短行程
只把磁盘外侧的磁道用来服务负载,剩下的部分不用或者留给地吞吐量的负载(归档)。
扇区分区
磁盘磁道长度各不相同,磁盘中心区域的磁道较短,而外侧磁道较长,相比固定的每磁道扇区数(和位数),由于物理上较长磁道能够写入更多的扇区,扇区分区(又称为多区域记录)增加了扇区个数。因为旋转速度一定较长的外侧磁道比内侧磁道能够带来更高的吞吐量
扇区大小
一种标准,高级格式 Advanced Format,以支持更大的扇区大小,特指4KB。
磁盘缓存
磁盘共有的一个部件,是一小块内存RAM,用来缓存读取的结果和缓冲要写入的数据。该内存允许I/O(命令)在设备上排队,以更高效的方式重新排序。
电梯寻道
电梯算法,提高命令队列效率,根据磁盘位置把I/O重新排序,最小化磁头移动。类似电梯,不根据楼层请求的顺序提供服务,而是在大楼里上上下下扫一遍,并在当前请求的楼层停靠。可以通过检查磁盘I/O的跟踪记录进行验证,把I/O按照结束时间和开始时间分别排序,结果并不一致。(根据位置提供服务,磁头在1000偏移量处时,1000偏移量处的密集I/O,影响2000偏移量处的单次I/O)
ECC
磁盘在每个扇区的结尾存储一个纠错码,驱动器可以在数据被读出时进行验证,并有可能纠错。如果扇区数据读得不对,磁头可能会在下次旋转到相同位置时重新读取(可能会重试多次,每次磁头的位置会稍有不同),这可能是导致异常缓慢I/O的原因,检查操作系统和磁盘的错误计数器以确认。
磁盘数据控制器
机械磁盘提供的一套表明了固定的每磁道扇区数比例和连续的可寻址偏移量范围。磁盘上的一切受磁盘数据控制器(磁盘内部的微处理器)掌控,由固件中的逻辑控制。控制器决定磁盘如何排布这些可寻址的偏移量,其中可以实现一些算法,如扇区分区
固态驱动器
固态磁盘 solid state disk, SSD
通常在不同的偏移量下性能保持一致(没有旋转或者寻道的延时),对于给定的I/O大小也能预测出I/O延时。
负载的随机和连续特征不再像对旋转磁盘那样影响重大。
由于内部复杂的操作,碰到性能问题要想理解问题本质会和旋转磁盘一样复杂。
闪存
NAND
使用基于电子的陷阱电荷存储介质,可以在没有能源的情况下永久地存储电子。
名称里的闪和数据的写入方式有关,要求一次性擦除整个存储块(包括多页,通常每页8k)并重写内容。由于这种写入的开销,闪存的读写性能不对称。(写之前要擦除,黑板?)
控制器
SSD的控制器有以下任务:
寿命
NAND介质存在燃尽、数据消失和读干扰问题。
SSD控制器通过移动数据解决这些问题。
把写散布在不同数据块达到磨损均衡;超量配置存储则预留额外空间在需要时顶替坏块。
病理学
闪存可能出现的问题
驱动器支持与系统通信的协议,一般通过一个磁盘控制器实现。
磁盘设备
服务器里多块磁盘,每一个都由操作系统分别控制。磁盘连接到一个磁盘控制器,控制器可能是主板上的内置电路或者扩展卡,让磁盘设备被发现并可以访问,该架构下磁盘控制器仅仅作为一个管道,使得系统可以与磁盘通信。
RAID
冗余独立磁盘阵列(冗余廉价磁盘阵列)
把磁盘组合成一个又大又快又可靠的虚拟磁盘,控制器通常包含一个板载缓存(RAM)以提高读和写的性能。
存储阵列
把许多磁盘接入系统。
使用高级磁盘控制器,提供一个更大的缓存(数GB)以提高读写性能,缓存由电池供电。
混存在电池有效时以写回模式工作,失效则回到写穿模式,并且由于等待读-改-写周期造成突然写性能下降。
通常通过外部存储控制器卡连接到系统上,卡与存储阵列之间的传输是IOPS和吞吐量的限制,为提高性能和可靠性,存储阵列一般通过双通道连接(使用两条物理线连接一块或者两块不同的存储控制器卡)
网络连接存储
NAS
支持的网络协议NFS、SMB/CIFS 或者 iSCSI
网络性能是重要的考虑因素,网络拥塞、多跳延时等等。
磁盘I/O栈里的组件和层次取决于操作系统、版本和采用的软硬件技术。
I/O调度器使I/O能够排队排序(或者重新调度)以优化发送,具体由附加策略决定,在I/O调度之后,请求被放到块设备列里,等待发送给设备。