`
itspace
  • 浏览: 978276 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HP-UX: Asynchronous i/o

阅读更多


PURPOSE
-------

The purpose of this document is to discuss the implementation of
asynchronous i/o (aio) on HP-UX, specifically to enable aio for the Oracle
RDBMS Server.


SCOPE & APPLICATION
-------------------

This note is intended for DBAs and Support Personnel.


1.0 Introduction
================
On HP-UX, when the Oracle datafiles reside on a filesystem, then the DBWR
process(es) make synchronous writes to these datafiles. This means that each
write must return with a 'succesful completion' before the next write is
issued. This serial operation can lead to a i/o bottleneck. There are two ways
to counteract this:
  a. configure multiple DBWR processes
  b. use asynchronous i/o

Before deciding on one of these two options, it should be noted that on HP-UX,
aio is *only* possible on a raw device. Put in another way, aio *cannot* be used
on a filesystem.

Multiple DBWRs can be used on a filesystem.

It is not recommended to use both multiple DBWRs and aio.

2.0 Configuring asynchronous i/o
================================
aio requires configuration of both Oracle and HP-UX

2.1 HP-UX Configuration
-----------------------
a. create the /dev/async character device
   % /sbin/mknod /dev/async c 101 0x0
   % chown oracle:dba /dev/async
   % chmod 660 /dev/async

   If the device does not exist, then ENODEV (Err #19) is returned when the device
   is accessed:
   Async driver not configured  : errno=19

   If the permissions are incorrect, then EACCES (Err #13) is returned:
   Async driver not configured  : errno=13

b. configure the async driver in the kernel
   Using SAM
     -> Kernel Configuration
        -> Drivers
           -> the driver is called 'asyncdsk'
   Generate new kernel
   Reboot

c. set max_async_ports
   Using SAM
     -> Kernel Configuration
        -> Configurable Parameters
           -> max_async_ports

   max_async_ports limits the maximum number of processes that can concurrently
   use /dev/async. Set this parameter to the sum of
     'processes' from init.ora + number of background processes

   The background processes started at instance startup will open /dev/async
   twice.

   If max_async_ports is reached, subsequent processes will use synchronous i/o.

 
d. set aio_max_ops
   Using SAM
     -> Kernel Configuration
        -> Configurable Parameters
           -> aio_max_ops

   aio_max_ops limits the maximum number of asynchronous i/o operations that
   can be queued at any time. Set this parameter to the default value (2048),
   and monitor over time (use glance).

e. if HP-UX patch PHKL_22126 (or one that supersedes it) is installed, then
   see Section 3.0

2.2 Oracle Configuration
------------------------
The following init.ora parameters are required.

a. pre 7.3.0
   no init.ora parameters required
b. 7.3.X
   use_async_io = TRUE
c. 8.X
   disk_asynch_io = TRUE    

3.0 Implications of HP-UX Patch PHKL_22126
==========================================

This patch is called:
PHKL_22126: s700_800 11.00 VM,async,hyperfabric

The HP-UX patch description says:
The effective user ID of the process calling async driver,
typically called by a process for database applications such
as Oracle, must be a superuser or the user must
be a member of a group that has the MLOCK privilege.

In essence, aio will not work for Oracle, unless the dba group has the MLOCK
privilege.

To check if a group has the MLOCK privilege, execute:
% /usr/bin/getprivgrp <group-name>

If the dba group is not listed, then set it:
% /usr/sbin/setprivgrp <group-name> MLOCK

Note, the next reboot will clear this privilege. To automate this at startup,
create /etc/privgroup with the entry
dba MLOCK

This can be tested with
% /usr/sbin/setprivgrp -f /etc/privgroup
See 'man 1m setprivgrp' for more information.

If the MLOCK privilege is not granted to the dba group, then instance startup
will exhibit the following:

a. prior to 8.1.7, each background and shadow process will dump a trace file
   with the following:

   Ioctl ASYNC_CONFIG error, errno = 1

   errno 1 is EPERM (Not super-user).

   Such trace files may be found in
      $ORACLE_HOME/rdbms/log
      background_dump_dest
      user_dump_dest

   Additionally, a tusc of instance startup will show the following for
   each background process:
   [16044] open("/dev/async", O_RDWR, 01760) ................ = 14
   ...
   [16044] ioctl(14, 0x80106101, 0x7f7f51b0) ................ ERR#1 EPERM
 
   Similar output will be given for a tusc of a shadow process.

   The instance does start, but i/o is synchronous

b. in 8.1.7, the instance will not start, and will error with:
   SVRMGR> startup
   ORA-00445: background process "PMON" did not start after 120 seconds

   See Note:133007.1 for the alert on this.

c. in 9.0.1, the behaviour is similar to pre-8.1.7, in that trace files with
   the following are dumped:

   Ioctl ASYNC_CONFIG error, errno = 1

   Additionally, the following is also seen:

   Ioctl ASYNC_ADDSEG error, errno = 1

   The instance does start, but i/o is synchronous.

4.0 Checking that Asynchronous i/o is being used
================================================
Async i/o is being used if both the following are true:
  a. /dev/async is open by DBWR
  b. the relevant init.ora partameter is set (see Section 2.2)
  c. the datafiles are on raw devices

To check if /dev/async is open by DBWR, do one of:
    i. % fuser /dev/async
   ii. % lsof -p <dbwr pid>
         lsof can be downloaded from ftp://vic.cc.purdue.edu/pub/tools/unix/lsof
  iii. use glance/gpm to check files opened by DBWR

NB - Oracle server processes (background and foreground) will attempt to open
     /dev/async if the async driver is enabled in the HP-UX kernel, regardless
     of init.ora settings.

If (a), (b)and (c) are true, and i/o is still perceived to be synchronous, attach
to DBWR with tusc, and check that write calls to /dev/async are not returning an
error. The file descriptor for /dev/async will be needed, which can be retrieved
using lsof.

5.0 The fs_async kernel parameter
=================================
The kernel parameter fs_async can be set to allow asynchronous writes to file
systems. However, write calls can return without the data being physically
written to disk (the write sits in the UNIX buffer cache). The data in question
is file-system metadata such as free space lists, blocks and inodes.
A system crash would potentially lose this data, and leave the filesystem in an
inconsistent state, causing database corruption.

Oracle still opens files with the O_DSYNC flag (see 'tusc' snipet
below), which insists that writes are physically written:
open("/oracle/datafiles/system01.dbf", O_RDWR|O_LARGEFILE|O_DSYNC, 0) = 19

In summary, fs_async is ignored for datafiles(due to open() with O_DSYNC).
However, filesystem metadata may be lost, potentially causing datafile
corruption.


Oracle does not recommend setting fs_async to '1'.

Settings:
  fs_async=0 Do not use async writes to file systems
  fs_async=1 Do async writes to file systems

分享到:
评论

相关推荐

    Socket I/O 模型的使用示例

    在本文中,我们将深入探讨异步Socket I/O模型的几种常见实现方式,包括选择(select)、异步选择(asynchronous select)、事件选择(poll)、重叠I/O(overlapped I/O)以及完成端口(completion ports)。...

    在HP-UX上配置异步io

    在HP-UX操作系统中,配置异步IO(Asynchronous I/O,简称Aio)是为了提升系统性能,特别是在处理大量I/O操作的场景下,如运行Oracle、Sybase等数据库时。传统的同步IO模式会在每次I/O操作完成后等待确认,这在高负载...

    MediaTek_MT2502A_SOC_Data_Sheet GPIO_Table__v1_0.pdf

    - Mode 0 & 1: General-purpose I/O - Mode 2: External interrupt (EINT0) - Mode 3: External Peripheral Interface (XP) - Mode 4: Universal Asynchronous Receiver/Transmitter (URXD3) - Mode 5: Card ...

    spring-guides:https

    Spring入门指南弹簧导轨 异步方法: : 消费休息: : 休息服务: ... //spring.io/guides/gs/reactor-thumbnailer/ 非弹簧指南:async-rest-service: http : //www.jayway.com/2014/09/09/asynchronous-spring-service/

    Oracle 10g RAC 在HP-UX v3+MC ServiceGuard环境的安装

    根据给定的文件信息,以下是对“Oracle 10g RAC 在 HP-UX v3+MC ServiceGuard 环境的安装”所涉及的知识点的详细解析: ### 一、系统与软件版本 #### 1. 操作系统 - **HP-UX 11.31**:这是惠普公司基于Unix的商业...

    005、简单输入输出控制.7z

    - AIO(Asynchronous I/O)在Java和POSIX系统中提供,允许并发的异步I/O操作,提高系统性能。 理解这些概念和机制对于理解和编写高效、可靠的软件至关重要,特别是那些需要处理大量I/O操作的应用,如服务器、...

    Fiberized.IO 是一个基于 Fiber 和 Async IO 的通用 C++ 网络库.rar

    [FLIP-12: Asynchronous I/O Design and Implementation]。 其设计的核心是对原有的每条处理后的消息发送至下游operator的执行流程进行改进。其核心实现是引入了一个AsyncWaitOperator,在其processElement/...

    windows下六种socket I/O模型示例

    5. **异步I/O(Asynchronous I/O)** 异步I/O是Windows最强大的I/O模型,它允许在I/O操作完成时通知应用程序,而不是在开始时。Windows API提供了`AsyncRead`和`AsyncWrite`函数来实现这种模型。这个模型特别适用于...

    嵌入式课程设计I/O接口

    9. **错误检测与处理**:I/O接口应具备检测和处理错误的能力,例如奇偶校验、CRC校验、超时检测等,以确保数据传输的可靠性。 通过"实验五IO接口",学生将有机会实践上述理论知识,掌握如何在实际项目中设计和实现I...

    Performing I/O-Bound Asynchronous Operations

    ### 执行I/O密集型异步操作 #### 引言 在现代软件开发中,特别是在构建响应迅速且可扩展的应用程序时,理解并正确实施I/O密集型异步操作至关重要。这种技术不仅可以显著提高应用程序的性能,还可以确保用户体验...

    netty网络编程.pdf

    - AIO(Asynchronous I/O):异步非阻塞I/O,Java 1.7引入,通过异步回调处理读写事件,但实际应用不如NIO广泛。 2. BIO与NIO模型区别 - BIO模型中,每个连接都需要一个单独的线程处理,当连接数增多时,线程开销...

    android-async-http 源码

    Asynchronous Http Client for Android Build Status An asynchronous, callback-based Http client for Android built on top of Apache's HttpClient libraries. Changelog See what is new in version 1.4.9 ...

    Ajax学习 网址备忘录.txt

    Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换来实现这一点,这使得网页交互更加迅速且提升了用户体验。 #### 二...

    异步I/O处理

    在Linux系统中,异步I/O可以通过AIO(Asynchronous Input/Output)接口实现,如libaio库。而在Windows系统中,可以使用I/O完成端口(IOCP)或者Windows API的BeginRead/BeginWrite等函数。此外,许多高级编程框架,...

    APM32 32位工业级-车规级MCU GW系列无线MCU选型表&型号指南

    - **通信接口**: SPI (Serial Peripheral Interface)、I2S (Inter-IC Sound)、I2C (Inter-Integrated Circuit)、USART (Universal Synchronous/Asynchronous Receiver/Transmitter)、CAN (Controller Area Network)...

    TMS IntraWeb Component Pack Pro release v3.0.0.0 for delphi 7

    Current release v3.0.0.0 (Oct 28, 2007) in version v3.0.0.0 &lt;br&gt;- New : support for C++Builder 2007(支持C++ Builder 2007) - New : asynchronous events added to almost all controls....

    异步通知和异步I/O

    另一种方法是采用AIO(Asynchronous I/O)接口,它允许进程注册回调函数,当I/O完成时,内核会调用这个函数。 接下来,我们讨论"异步I/O"。异步I/O与异步通知不同,它涉及到I/O操作的整个生命周期,包括发起、执行...

    linux 设备驱动中的阻塞与非阻塞 I/O

    Linux内核还提供了异步I/O(Asynchronous I/O,AIO)模型,它允许进程在发起I/O操作后立即返回,然后在I/O完成时通过信号或回调函数通知进程。这种方法结合了阻塞和非阻塞的优点,既避免了阻塞的等待,也减轻了轮询...

    Android代码-android-async-http

    Asynchronous Http Client for Android An asynchronous, callback-based Http client for Android built on top of Apache's HttpClient libraries. Changelog See what is new in version 1.4.9 released on 19th...

Global site tag (gtag.js) - Google Analytics