[转载]Oracle在操作系统平台上采用异步IO

首先解释一下异步IO的概念:和同步IO相对的,当异步过程调用时,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

异步I/O有着以下的优点:异步I/O是和同步I/O相比较来说的,如果是同步I/O,当一个I/O操作执行时,应用程序必须等待,直到此I/O执行完。相反,异步I/O操作在后台运行,I/O操作和应用程序可以同时运行,提高了系统性能;使用异步I/O会提高I/O流量,如果应用是对裸设备进行操作,这种优势更加明显,因此像数据库,文件服务器等应用往往会利用异步I/O,使得多个I/O操作同时执行。

异步IO是在多用户、多任务机上产生的,过去我们用的DOS是一种单用户、单任务操作系统,应用程序需要读或写操作时,通过DOS功能调用(INT 21),由功能程序负责读写,应用程序在等待完成,由于DOS的单任务性,不会发生有多个任务同时执行IO操作的。但是在多任务操作系统中,由于多个任务可能同时执行IO操作,操作系统在执行IO操作时,就有同步和异步两种方式:


1.同步方式:一个任务的IO完成后,再开始另一个任务的IO操作;


2.异步方式:IO操作按一定的规则执行,可能先申请的后完成,后申请的先完成。


在单任务系统中,异步方式没有优越性,反而增加了调度的开销,但在多任务系统中,如果按同步方式,先申请先执行,在磁盘IO中,则磁头移动的过程中是不能读写的,定位以后才能读写,这样移动的过程就浪费了,磁盘的效率就低。在异步方式中,磁头移动的过程中,如果途中有其它合适的IO操作,先完成这个IO操作,然后再继续移动,这样效率就提高了,也就有可能后申请,先完成。异步方式在多任务系统中,IO操作的效率是提高很明显的。磁头移动过程,需要一定的规则来进行调度,通常采用“电梯算法”,这个算法具体是:磁头沿一个方向移动,有合适的IO就处理,然后继续移动,直到这个方向的前面没有IO申请,再向反方向移动。


早在80年代,NETWARE操作系统就采用了电梯算法,也就是NETWARE在服务器硬盘上操作速度快的其中一个原因,SCSI硬盘在单任务操作系统中是没什么优越性的,但是在多任务系统中,其效率就很高,就是因为SCSI硬盘在处理IO申请时,采用了电梯算法。(当然SCSI硬盘的平均寻道时间短、平均等待时间短、缓存大也是快速的原因)


到目前为止,所有的多任务操作系统都采用了电梯算法,估计HP小型机也不例外。并且不需要用户设置,系统默认就是采用的。

在数据库应用中,这是典型的多任务应用,采用异步IO是最为明智的,可以说大型数据库毫不例外地从中获得好处,因为IO的时间占用与CPU相比是1000倍以上的,往往IO是数据库的瓶颈,所以IO性能提高可以使数据库的性能相应提高。Oracle 10g中默认支持了异步IO。

猜你喜欢

转载自andyniu.iteye.com/blog/1827418