<<Information Store and Management>> 读书笔记 之八
2.6 Application Requirements and Disk Performance
应用程序存储的需求分析一般从容量开始. 这点可以通过应用程序所使用的文件系统以及数据库组件的大小很容易地估计出来.
应用程序的IO大小和应用程序产生的IO数量是影响磁盘性能和响应时间的两个重要指标. 结果, 应用程序的存储设计和布局可以从以下的两点着手:
1. 分析工作量峰值的时候所产生的I/O的数量.
2. 记录下应用程序的I/O大小和block的大小.
Block的大小取决于应用程序建立其上的文件系统和数据库. 数据库环境中的block大小是由底层的数据库引擎和环境变量集来控制的.
让我们来看一个吞吐量为160MB/s, service time RS(控制器花在一个请求上的平均时间)为0.3ms的SCSI控制器(SCSI接口)的例子. 对典型数据库IO, block size是4KB, 8KB, 16KB, 32KB, 和64KB的频率(1 / [RS + Transfer time])的计算可以看表格2-1.
结果, 每个控制器的IOPS的数值取决于block的大小, 从1400(64kb)到3,100(4kb).
磁盘服务时间(The disk service time (RS))是个磁盘性能的关键指标. RS和磁盘利用率(U)决定了应用程序的IO响应时间.
正如本章稍早时候展现的, 总的磁盘服务时间disk service time (RS), 是寻址时间seek time (E), 旋转延迟rotational latency (L), 和内部传输时间之和internal transfer time (X):
RS = E + L + X
E是由IO请求的随机性决定的. L和X是由磁盘提供商提供的磁盘的技术详细指标. 一起来看一个提供了如下磁盘明细的例子:
■■随机IO环境下, 平均seek time是5ms, 或者说E = 5 ms.
■■磁盘转速是15,000 rpm - 可以通过这个确定出旋转延迟(L), 也就是完全旋转时间的一半, 即L = (0.5 / 15,000 rpm expressed in ms).
■■40 MB/s是内部数据传输速率, 从这个再加上被传输的block的大小可以推算出内部传输时间(X), 比如说32kb的block size, 那么X=32KB/40MB. 结果RS = 5 ms + (0.5 / 15,000) + 32 KB / 40 MB = 7.8 ms.
每秒I/O的最大值, 即IOPS = 1/RS. 换句话说, 对于32KB的block, RS的时间为7.8ms, IOPS的最大值就是1 / (7.8 × 10-3) = 128 IOPS.
表格2-2列出了不同block可以达到的最大IOPS的值.
表格2-2展现出了E的值(seek time), 人就是RS的最大组成部分. 它占了7.1ms到8.6ms中的5ms, 即磁盘服务时间的百分之58到百分之70.
不同block大小的IOPS从116到140, 这代表了在utilization非常高的时候(接近百分之百)所能达到的潜在IOPS的值. 正如2-4部分展现的, R, 随着utilization, 或IOPS的增大而增大.
在表格2-2的例子中, 当控制器的utilization接近96%的时候, 64KB的block的I/O响应时间(R)大约是215ms, 如下:
R = RS / (1- U)
= 8.6 / (1-0.96)
= 215 ms
如果应用程序需要更快的响应时间, 那么磁盘的utilization应该保持在70%以下, 或者在响应时间呈指数增长后, 贴近曲线.
考虑另一个表2-2中的例子, block size是8KB的, utilization接近100%, 最大的IOPS能达到139. 然而在U=97的时候, 系统中的IOPS会接近134, 每个I/O的响应时间, R, 会是240ms.
同样地, 105 IOPS (U=75%)的响应时间会是29.5ms; 对75 IOPS(54% utilization)而言, response time会是15.7ms; 对45 IOPS (32% utilization)的话, response time就是10.6ms.
看看64KB的block size的情况, U = 100%, 最大的IOPS可以达到116. 在这个block size和磁盘性能指标下, 应用程序不能维持135 IOPS.
对于64KB的IOPS为105(U=91%)的时候, R= 88.6 ms; 在 45 IOPS (U = 39%)的时候, R = 14.6 ms. 应用程序的存储需求要用容量和IOPS都达标, 这样才能满足应用程序. 如果一个应用程序需要200GB的磁盘空间, 那么容量通过一块磁盘就可以搞定. 然而, 如果应用程序对IO要求很高, 那么这一块盘的配置就会导致性能减退, 因为一块盘不能提供所需求的IO的响应时间.
应用程序所需要磁盘的总数(N)可以通过下面的方式来计算:
如果C是满足容量所需求的磁盘数量, I是满足IOPS所需要的磁盘数量的话, 那么
N = Max (C, I)
磁盘供应商会使用IOPS这个术语来公开磁盘的潜力, 这里的IOPS基于不同大小的block和应用程序环境的测试基准得出.
看看一个例子吧, 这里某应用程序需求的容量是1.46TB. 应用程序生成的高峰工作量大约是9,000 IOPS. 供应商明细了一块146GB, 15,000 rpm的硬盘最大IOPS是180(U=70%).
在这个例子中, 需要的磁盘的数目仅需要满足容量的需求的话那就1.46T / 146G = 10块盘就够了. 为了达到9000 IOPS的目标, 那么就需要50块盘(9,000 / 180).
在许多应用程序环境中, 更多的磁盘被配置以便于满足IOPS的需求, 而不是仅仅满足容量的需求. 对于响应时间敏感的应用程序, 所需要的驱动器的数目也是用UT在70%情况下单个盘的IOPS的数字来支持计算, 以便提供更好的响应时间的.
总结
--------------------
本章详细描述了存储系统环境- 宿主, 连接, 和存储. 数据从应用程序流动到存储需要经过这些组件. 这些实体的物理和逻辑组件会影响到整个存储系统环境的性能.
存储是存储系统环境中最重要的组件. 硬盘驱动器(HDD)是最流行的存储设备, 它使用磁媒体来访问和存储数据, 有时应用于对性能要求很高的应用程序中. 逻辑上HDD可以被看作sectors, tracks, cylinders, 这些组成了磁盘寻址的基础. 本章详细介绍了控制HDD性能的基本法则. 磁盘的总体性能取决于磁盘响应时间(disk response time), 它由seek time, rotational latency, 和disk servic time组成. 现代磁盘存储系统使用多块磁盘, 还使用诸如RAID的技术来满足应用程序对容量和性能的要求, 下一张我们会详细介绍.