<<Information Store and Management>>读书笔记 之六
2.3 磁盘驱动器的性能
=====================
磁盘驱动器是一个决定着整个存储系统环境性能的电子机械设备. 这个部分将讨论影响磁盘驱动器性能的各种因素.
2.3.1 Disk Service Time
磁盘服务时间之的是磁盘完成一次I/O请求所需的时间. 组成磁盘服务时间的有寻找时间(seek time), 转动延迟(rotational latency), 和数据传输速率(data transfer rate).
Seek Time
寻找时间(seek time), 也叫做access time, 描述了径向(沿着半径移动)跨盘片放置r/w头到某位置所需的时间. 换句话说, 它是重新放置和确定盘臂和读写头到正确磁道上所需的时间. seek time越小, IO操作就越快. 磁盘供应会公布他们的seek time细节如下:
■■ Full Stroke: 读写头横跨整个盘片所需的时间, 从最里面圈, 到最外圈.
■■Average: 读写头从一个随机的圈到另一个随机的圈所需的平均时间, 通常是full stroke的三分之一.
■■ Track-to-Track: 读写头在两个相邻的圈间移动所需的时间.
这些袭击的每一条都是用毫秒(千分之一秒)衡量的. 随机圈的seek time比相邻圈的seek time在读操作时更要紧些. 为了最小化seek time, 数据通仅写在可用的cylinder的一个子集上. 比如说, 一个500GB的磁盘驱动器被设置为仅使用开始的40%的cylinder的话, 那么这个磁盘可以被看作200G的有效磁盘. 这种被称作short-stroking的磁盘(被动短臂化).
Rotational Latency
旋转延迟, 为了访问数据, 驱动臂跨越盘片移动读写头到某圈上, 同时盘片也在旋转, 使所需的扇区(sector)放置在读写头之下. 盘片旋转以便放置读写头到指定扇区的时间, 叫做旋转延迟. 这个延迟时间取决于转轴的转速, 并且该时间的单位以毫秒(千分之一秒)计算. 平均旋转延迟是磁盘旋转一整圈时间的一半. 与seek time相同, 旋转延迟在随机的扇区间移动的大小在读写操作中比相邻扇区的速度指标更紧要些. 每秒5400转磁盘的平均旋转延迟大概是5.5毫秒, 对于每秒15000转的磁盘来说大概是2毫秒.
Data Transfer Rate
数据传输速率(也叫做传输速率)指的是磁盘单位时间内能传给HBA的数据的量. 为了计算传输速率, 首先需要理解读写操作的过程. 在一个操作中, 数据首先从磁盘盘片传输到读写头上, 然后移动到磁盘驱动器的内部缓存中. 最后, 数据从缓存中通过接口传递给宿主的HBA. 在写操作中, HBA先通过磁盘的接口写入数据从到磁盘的内部缓存中, 数据然后移动到读写头上. 最后数据移动到盘片上.
读写操作是的数据传输速率是依据内部和外部传输速率衡量的, 如图2-8.
内部传输速率就是数据从盘片表面的单独一圈移动到磁盘内部缓存的速度. 内部传输速率将seek time的因素考虑在内了. 外部传输速率是数据移动到HBA的速度. 外部数据传输速率即为借口的速度, 比如说ATA硬盘为133兆每秒. 外部传输速率是保持长期低于内部传输速率的.
2.4 决定磁盘性能的基本法则
为了理解磁盘性能的法则, 磁盘可以被看作由以下两个元素组成的黑盒子.
■■Queue: IO请求等待被IO控制器处理的地方
■■Disk I/O Controller: 一个个地处理等待在队列中的IO请求的单元.
IO请求到达控制器的速率由应用程序生成. 这个速率被叫做到达速率(arrival rate). 这些请求被保留在IO队列中, IO控制器一个接一个的处理它们, 如图2-9. IO到达速率, 队列的长度, 和IO控制器处理每条请求的时间决定了磁盘系统的性能, 这性能我们用响应时间(response time)来衡量.
Little法则是描述队列中请求数量和响应时间的一个基本法则. 法则描述了如下的关系(括号中的数字为参照注释)
N = a × R
其中"N"是队列系统中的请求总数, 即队列中请求数+IO控制器中的请求数.
其中“a” 是到达速率, 或者单位时间内到达系统中的IO请求数.
其中“R”是平均响应时间, 或者每个IO请求的卸货时间, 即IO请求从到达到离开的总时间.
The utilization 法则是另一条重要的法则, 它定义了IO控制器的效用. 该法则有公式如下:
U = a × RS
其中
“U”是IO的效用(utilization)
“RS“是service time, 或者控制器画在一个请求上的平均时间, 1/RS就是service rate.
从arrival rate “a”, 可以计算出average inter-arrival time, 如下:
Ra = 1/a
因而效用(utilization)可以被定义为service time与average inter-arrival time的比值, 公式如下:
U = RS /Ra
这个比值的大小在0到1之间.
这里, 重要的是理解单控制器系统中, arrival rate必须比service rate要小, 换句话说, service time必须比average inter-arrival time要小, 否则IO请求到达会比IO控制器处理能处理的速度还要快.
有了这两条法则的帮助, 一些磁盘性能的重要指标, 比如说average response time, average queue length和一个请求在队列中的时间都可以被推导出来了.
下面的等式中, average response rate (S) 被定义为平均响应时间的倒数, 推导如下:
S = service rate – arrival rate
因此,
R = 1/ (service rate – arrival rate)
R=1/(1/RS - 1/Ra)
=1/(1/RS-a) (from eq. 3)
=RS/(1-a × RS)
R = RS/(1-U) (5) (from eq. 2)
结果,
Average response time (R) = service time/(1 – utilization)
(from equation 2)
随着utilization接近1, 即IO控制器接近饱和, 即response time趋向于无穷大. 本质上, 饱和的组件, 即瓶颈, 限制着IO请求的序列化, 意味着每个IO请求不得不等它前面的IO请求完成才能得到处理.
Utilization (U) 还可以用来白哦是控制器中的平均IO请求的数目, 如下:
Number of requests in the queue (NQ) = Number of requests in the system (N) – Number of requests on the controller or utilization (U).
Number of requests in a queue 也被称作average queue size.
NQ = N – U
= a × R – U (from eq. 1)
= a × (RS / (1 – U)) – U (from eq. 5)
= (RS /Ra) / (1 – U) – U (from eq. 3)
= U / (1 – U) – U (from eq. 4)
= U (1 / (1 –U) – 1)
= U2 / (1–U) (6)
一个请求花在队列中的时间跟请求在系统中花费的时间是相等的, 或者是average response time 减去控制器处理一个请求的时间.
= Rs / (1 – U) – Rs (from eq. 5)
= U × RS / (1 – U)
= U × avg. response time
= Utilization × R (7)
试考虑到一个IO系统中, 每秒到达100个IO请求. Service Time是8毫秒. 磁盘的性能可以通过上面的关系计算出IO控制器的utilization(U), total response time (R), average queue size [ U2 / (1 – U)] , 还有请求花在queue中的总时间, 如下:
Arrival rate (a) = 100 I/O/s; 因此, the arrival time
Ra = 1/a = 10 ms
RS = 8 ms (given)
1. Utilization (U) = RS / Ra = 8 / 10 = 0.8 or 80%
2. Response time (R) = RS /(1 – U) = 8 / (1 – 0.8) = 40 ms
3. Average queue size = U2 / (1 – U) = (0.8)2 / (1 – 0.8) = 3.2
4. Time spent by a request in a queue = U × R, or the total response timeservice
time = 32 ms
如果, 控制器能力增加一倍, 那么service time就减半了, 结果, 该场景下:
RS = 4 ms .
1. Utilization (U) = 4 / 10 = 0.4 or 40%
2. Response time (R) = 4 / (1 – 0.4) = 6.67 ms
3. Average queue size = (0.4)2 / (1 – 0.4) = 0.26
4. Time spent by a request in a queue = 0.4 × 6.67 = 2.67 ms
结果, 我们可以得出结论, 通过缩半service time(seek time, latency, internal tranfer rete的总和), 或者utilization, 响应时间可以被戏剧性地降低(在前面的例子中, 几乎是6六倍). Utilization和response time的关系可见图2-10.
响应时间随着utilization的增加呈非线性的变化. 当平均队列大小比较低的话, 响应时间就短. 响应时间随着queue的增加而缓慢增长, 在utilization超过百分之70的时候呈指数增长.