Partial Stroking:根据场景提升性能
100 IOPS,难以满足现在互联网海量高并发请求。所以,DB都会将数据存在SSD。
但20年前,没有现在这么便宜的SSD硬盘。DB数据只能存放在HDD。
即便如今数据中心用的HDD,也是7200r,要更快随机访问速度,会选择SSD。但当时,SSD非常贵,还没能商业化。硬盘厂商们在不断研发转得更快的硬盘。数据中心往往用10000转,乃至15000转的硬盘。
直到2010年,SSD开始逐步进入市场,西数还在尝试研发20000转硬盘。转速更高、寻道时间更短的机械硬盘,才能满足实际DB需求。
但10000r,乃至15000r硬盘也更贵,想节约成本,提高性价比,就得想它法。Google早年用家用PC乃至二手硬件,通过软件层面设计解决了可靠性和性能。那有办法提高机械硬盘的IOPS吗?这就是Partial Stroking或者Short Stroking,“缩短行程”技术。
既然访问一次数据的时间:“平均延时+寻道时间”,只要能缩短其一,就能提升IOPS!
一般 硬 盘 的 寻 道 时 间 > 平 均 延 时 硬盘的寻道时间 > 平均延时硬盘的寻道时间>平均延时,如何缩短平均寻道时间?
最极端的:不需要寻道,即将所有数据都放在一个磁道。比如始终把磁头放在最外道磁道。寻道时间就基本为0,访问时间就只剩平均延时。
IOPS就变成:
1s / 4ms = 250 IOPS
但只用一个磁道,能存的数据就很有限了!可能我们还不如把这些数据直接都放到内存呢!
所以,实践可只用1 / 2 1/21/2或1 / 4 1/41/4磁道,即最外面1/4或1/2的磁道。
如此,硬盘可使用的容量可能变成1/2或1/4。但寻道时间也变成1/4或1/2,因为悬臂需移动的“行程”也变成原来1/2或者1/4,IOPS大幅提升!
比如7200r硬盘,正常平均延时4.17ms,寻道时间9ms。原本IOPS:
1s / (4.17ms + 9ms) = 75.9 IOPS
若只用其中1/4磁道,则IOPS变成:
1s / (4.17ms + 9ms/4) = 155.8 IOPS
IOPS提升一倍,和块15000r硬盘性能差不多。但这时硬盘可用空间也只有原1/4。所以,这样通过软件去格式化硬盘,只保留部分磁道让系统可用的情况,可大大提升硬件性价比。
总结
机械硬盘的硬件主要由:盘面、磁头和悬臂组成。
数据在盘面上的位置,可通过磁道、扇区和柱面来定位。
实际的一次对于硬盘的访问,需要把盘面旋转到某一个“几何扇区”,对准悬臂的位置。然后,悬臂通过寻道,把磁头放到我们实际要读取的扇区上。
受制于机械硬盘的结构,对随机数据的访问速度,就要包含旋转盘面的平均延时和移动悬臂的寻道时间。通过这俩时间,能计得机械硬盘IOPS。
7200转机械硬盘的IOPS,只能做到100。早期没有SSD,所以想出Partial Stroking这个浪费存储空间,但能缩短寻道时间以提高硬盘IOPS的方案。