虚拟磁盘 存储设备的模拟;系统角度是一块物理磁盘,但实际可能由多块磁盘组成
传输总线 用来通信的物理总线,包括数据传输(I/O)以及其它磁盘命令
扇区 磁盘上的一个存储块,通常是512B
I/O 对于磁盘,严格的说仅仅包括读和写,而不包括其它磁盘命令。I/O至少由方向(读或写)、磁盘地址(位置)和大小(字节数)组成
磁盘命令 除读写外,磁盘还会被指派执行其它非数据传输的命令(例如缓存写回)
吞吐量 对于磁盘而言,吞吐量常指当前数据传输速率,单位是B/s
带宽 存储传输或者控制器能够达到的最大数据传输速率
延时离群点 非同寻常的高延时磁盘I/O
磁盘接受的I/O请求要么在队列里等待,要么在处理中。磁盘管理器可以为了优化性能而采用一些包括旋转磁盘电梯寻道算法,或者对读写I/O准备分开的队列。
缓存磁盘
缓存的命中可以带来非常低的延时,但高延时的缓存未命中仍然是磁盘设备的常态。
盘上的缓存也可以用作写回缓存以提高写性能,在数据写到缓存后,磁盘就通知写入已经结束,之后再把数据写入到较慢的永久磁盘介质中;与之相对的另一种做法叫写穿缓存,只有当写完全进入到下一层再返回。
控制器
把CPU I/O传输总线和存储总线以及相连的磁盘设备桥接起来,这个设备又被称为主机总线适配器(host bus adaptor, HBA)。其性能可能受限于其中任何一个组件,包括总线、磁盘控制器和磁盘。
磁盘这块儿的概念和文件系统有很多重叠的地方,可能得挑一些记一下了
测量时间
与观察角度有关
操作系统(块设备接口)出发,服务时间可以从I/O请求发到磁盘设备开始,到结束中断发生,不包括在操作系统队列里等待的时间
磁盘出发,则从磁盘主动服务I/O开始,不包括磁盘队列里等待的任何时间
时间尺度
缓存
随机/连续 I/O
根据磁盘上I/O的相对位置(磁盘偏移量),可以用术语随机和连续磁盘I/O负载。
连续负载也称为流负载,流一般用于应用程序层,描述对磁盘(文件系统)的流式读和写。
磁性旋转磁盘,随机I/O带来的磁头寻道和I/O之间的盘片旋转导致额外的延时;性能调优的工作就包含识别并通过一些手段排除随机I/O,如缓存、分离随机I/O到不同的磁盘以减少寻道距离为目的的数据摆放。
基于闪存的SSD,在执行随机和连续I/O时通常没有区别,但存在一些由其它因素造成的细微差别,具体取决于硬盘本身,如地址查找缓存可以应对连续I/O,却对随机I/O无能为力。
需要注意的是,从操作系统角度看到的磁盘偏移量并不一定是物理磁盘的偏移量,如硬件提供的虚拟磁盘可能把一块连续偏移量范围映射到多块磁盘。磁盘可能会通过磁盘数据控制器按照自己的方式重新映射偏移量,从而有时随机I/O并不通过检查偏移量确定,而是由服务时间的上升来判断
与IOPS或者吞吐量相关。
读频率高的系统可以通过增加缓存获得性能提升;写频率高的系统可以通过增加磁盘提高最大吞吐量和IOPS。
读写本身可以是不同负载模式:读可能是随机的,而写可能是连续的(写实复制的文件系统),它们的I/O大小可能不尽相同。
I/O的平均大小(字节数),或者I/O大小的分布。
磁盘设备对不同的读写大小有非常不同的行为,理想的I/O大小可以查阅磁盘供应商文档或者通过为微基准测试获得。
有意义的IOPS需要 包含其他细节:随机或者连续、I/O大小、读写比。
除了读写I/O外,磁盘可以接受其他命令,如可以命令带有缓存的磁盘(RAM)把缓存写回磁盘上。
这些命令会影响性能造成磁盘运转而让其他I/O等待。
使用率是一段时间内的总结,故而要注意被长时间摊平而忽略的突然的爆发。
虚拟硬盘使用率并不一定能准确反映磁盘的实际情况,
如包含写回缓存的都虚拟磁盘在写负载时看上去并不忙(磁盘控制器马上返回写完成),但底下的磁盘在之后某个时间会很忙;
虚拟磁盘是建立在多块物理磁盘上,100%占用率可能意味着有些磁盘一直很忙,但并不是所有磁盘在所有时间内都忙
度量因超出资源服务能力而排队的工作。
I/O等待是针对单个CPU性能的指标,表示当CPU分发队列(在睡眠态)里有线程被阻塞在磁盘I/O上时消耗的空闲时间。
等待I/O造成的线程阻塞以至于CPU无事可做。
CPU空闲时间划分成无所事事的真正空闲,以及阻塞在磁盘I/O上的时间。
较高的每CPU I/O等待时间表示磁盘可能是瓶颈所在,导致CPU等待而空闲。
如果一个CPU密集型的进程开始执行(抢占更多CPU时间),I/O等待值可能下降(CPU被占用,不再空闲),但磁盘I/O还是一样阻塞线程,导致忽略磁盘瓶颈。
如果应用程序和磁盘I/O是异步的,那磁盘I/O延时可能不直接影响应用程序性能,通常发生在写回缓存上,应用程序I/O早已完成,而磁盘I/O稍后发出。
应用程序可能用预读执行异步读,在磁盘读取的时候,可能不阻塞应用程序;文件系统也有可能用类似手段进行预热缓存。
即使应用程序同步等待I/O,该程序代码路径可能并不在系统的关键路径上,而对客户端应用程序的响应可能也是异步的。
磁盘I/O是多个内核组件的终点,包括文件系统和设备驱动。磁盘I/O与应用程序发出的I/O在频率和大小上都不匹配,部分原因有: