一般說來,異步I/O是和同步I/O相比較來說的,假如是同步I/O,當一個I/O操作執(zhí)行時,應用程序必須等待,直到此I/O執(zhí)行完. 相反,異步I/O操作在后臺運行,I/O操作和應用程序可以同時運行,提高了系統(tǒng)性能; 使用異步I/O會提高I/O流量,假如應用是對裸設備進行操作,這種優(yōu)勢更加明顯, 因此象數(shù)據(jù)庫,文件服務器等應用往往會利用異步I/O,使得多個I/O操作同時執(zhí)行.
1 文件集的安裝
要在aix平臺上使用異步I/O特征,系統(tǒng)必須安裝有文件集bos.rte.aio,可以通過如下命令檢查之:
lslpp -l bos.rte.aio
然后再通過smitty(smit)使得異步I/O可用
#smit chgaio
STATE to be configured at system restart available
2 如何確定是否需要使用異步I/O
a. 使用VMSTAT命令查看列wa,如何其值超過25%,則使用;
b. 使用命令iostat * * ,假如%tm_act超過35%,則使用;
值得注重的是,在SMP系統(tǒng)中,vmstat的值us,id,wa列是所有處理器之間的平均值,但是每個處理器的i/o等待值卻不是平均值,而是一個全局的統(tǒng)
計數(shù)值,
3 當前aio服務器的數(shù)目
pstat -a grep aios wc -l
4 如何設置aio 服務器
一般有三個規(guī)則可以用來決定因素aio的數(shù)目
a 限定MAXIMUM等于十倍的當前使用的物理磁盤數(shù),MINIMUM等于一半的MAXIMUM數(shù);
b 設置MAXIMUM為80,MINIMUM為默認值1,監(jiān)控系統(tǒng)正常的負荷情況,過一段時間后,再進行調(diào)整如下:
MAXIMUM=當前運行的aio數(shù)+10
MINIMUM=當前運行的aio數(shù)-10
c 在最高I/O活動開始之前,使用vmstat -s看結(jié)果中的iodones,隔一時間段再執(zhí)行,查看二次iodones之差值,便可以知道在這個時間段內(nèi)有多少個物理I/O發(fā)生了,假如便可以考慮增加MAXIMUM數(shù)再進行觀察調(diào)整
5 異步I/O的幾個參數(shù)
可以使用chdev或是smit來修改有關(guān)AIO的參數(shù),主要考慮如下幾個
MINIMUM number of servers :指定分配給異步I/O進程的最少內(nèi)核進程數(shù),
MAXIMUM number of servers :指定分配給異步I/O進程的最大內(nèi)核進程數(shù)
Maximum number of REQUESTS :指定能同一時間分配的最大數(shù)目的異步I/O請求數(shù),它包括進程中的請求,也包括等待中的請求數(shù),最大數(shù)不能小于MAXIMUM number of servers,它定義在/usr/include/sys/limits.h中,
Server PRIORITY:指定分析給異步I/O進程的優(yōu)先級,建議用默認值39
STATE to be configured at system
restart:指定系統(tǒng)初始化時,異步I/O進程的狀態(tài),可能值是1)defined(處于定義狀態(tài)且不可用),2)available(可用)STATE of FastPath:假如選擇disable,則表明強迫所有的I/O活動都通過異步內(nèi)核進程,默認是enable
6 此平臺上的數(shù)據(jù)庫,如Oracle中使用異步i/o,則需要設置參數(shù)disk_asynch_io = TRUE就可以了
1、Hp-ux使用Aio的補丁要求
b、HP-UX 11i的補丁要求為:
PHKL_30621 vm preemption point, mlock/async_io
PHKL_25506 asyncio driver patch
使用swlist -l prodUCt檢查
2、創(chuàng)建aio的字符設備
a、建立aio字符設備
#/sbin/mknod /dev/async c 101 0x0
b、調(diào)整設備的屬主,這個例中假定用戶為oracle,組為dba
#chown oracle:dba /dev/async
c、調(diào)整設備的權(quán)限位
#chmod 660 /dev/async
3、Hp-ux要要調(diào)整的內(nèi)核參數(shù)
調(diào)整內(nèi)核參數(shù)據(jù)需要使用root用戶
a、把asyncdsk置為in
sam-> Kernel Configuration -> Drivers->asyncdsk調(diào)整為in
b、調(diào)整max_async_ports參數(shù)
這個參數(shù)限定的是同時使用/dev/async設備的最大進程數(shù),對于Oracle這個參數(shù)應大于等于init< sid>.ora中的processes+后臺的進程數(shù),當max_
async_ports的值達到時,其余的進程將采用同步IO的方式。
c、調(diào)整set aio_max_ops參數(shù)
這個參數(shù)所限定的是在任意一個時間點排隊的Aio操作的最大的數(shù)目,一般保持默認值就可以,可以用glance監(jiān)測一下。
d、調(diào)整fs_async參數(shù)
這個參數(shù)表明的是對文件系統(tǒng)的寫是否采用Aio的方式,設定fs_async=0指定對于文件系統(tǒng)寫不用Aio,設定fs_async=1則指定使用aio的方式,Ora
cle不建議將這個什設置為1
4、其它方面設置
值得注重的是要為oracle用戶的組(一般為dba)設定MLOCK的權(quán)限,否則在數(shù)據(jù)庫啟動會報錯或在庫運行時會出現(xiàn)莫名其妙的數(shù)據(jù)庫hang的現(xiàn)象,
具體說明如下
a、有二個命令getprivgrp(檢查),setprivgrp(設置)
eg1:檢查dba組是否有MLOCK的權(quán)限
root#getprivgrp dba
eg2:設定dba組的MLOCK的權(quán)限
roolt#setprivgrp dba MLOCK
b、也可以把設定加入配置文件中,這樣在下次啟動時就自動生效了。
在/etc/privgroup中加入如下的一行:
dba MLOCK
假如privgroup不存在,可以編輯一個。
5 8i 及以后的版本 :在init< sid>.ora中設定disk_asynch_io = TRUE
6 檢查一下aio是否生效了
#fuser /dev/async
有進程列出來說明aio已經(jīng)生效了。
7 在hp11.0上使用異步I/O時可能還有些問題,會出現(xiàn)一些ora-01578的錯誤,但是hp11i后應沒有問題了