以下内容来自《大话存储》
IO可以分为读/写IO、大/小块IO、连续/随机IO、顺序/并发IO、稳定/突发IO、持续/间断IO和虚实IO
【连续/随机IO】连续和随机是指本次IO给出的初始扇区和上一次IO的结束扇区是不是完全连续的或者相隔不多。如果是,则本次IO为连续IO;如果相差太大则为随机IO。
【顺序/并发IO】宏观上的概念是指磁盘控制器同时对一个RAID系统中的多块磁盘同时发送IO指令,这里的同时是指向一块磁盘发送一条指令后不必等待它回应,接着向另一块磁盘发送IO指令,并且最底层的IO数据包含了文件系统下发的多个IO的数据,则为并发IO
如果这些直接发向磁盘的IO只包含了文件系统下发的一个IO的数据,则此时为顺序IO,则控制器缓存中的文件系统下发的IO队列,只能一个一个来。
【稳定/突发IO】某存储设备或某应用程序再一段时间被接收或者发送的IOPS以及Throughput(吞吐量)保持相对稳定和恒定,则为稳定IO;如果单位时间的IOPS或者Throughput突然猛增,则为突发IO
【实/虚IO】某IO请求中包含对应实际数据地址的,比如磁盘LBA地址,或者文件偏移量,请求读或者写实际文件获证磁盘扇区数据的,成为实IO;而应用程序针对文件元数据操作的(再文件系统层以上没有文件主体数据操作),或者针对磁盘发送的非实体数据IO请求,比如Report LUN、SCSI Sense Request等控制性IO,成为虚IO
文件系统的IO包括同步IO、异步IO、阻塞/非阻塞IO和Direct IO
【同步IO】程序的某一个进程或线程,如果某时刻调用了同步IO接口,则IO请求发出后,这个进程或线程必须等待IO路径上的下位程序返回信号,不继续执行后面的代码,被操作系统挂起,操作系统继续执行其他的进程或者线程
【异步IO】操作系统会继续执行本线程或进程中后续的代码,直到时间片到时或者因其他原因被挂起。
【Direct IO】有些应用程序,eg.数据库程序,有自己的缓存,IO再发出之前已经经过自己的缓存算法优化过了,如果请求IO到达文件系统之后,又被缓存起来进行额外的优化,就是多此一举了。因此文件系统提供了另外一种接口,即Direct IO接口,其IO请求、数据请求以及回送的数据都不被文件系统缓存,而是直接进入应用程序的缓存。
IO的性能指标
【IOPS】每秒能进行多少次IO
【传输带宽】磁盘或设备再传输数据的时候数据流的速度
具有高带宽规格的硬盘在传输大块连续数据时具有优势
具有高IOPS的硬盘在传输小块不连续的数据时具有优势