西部数码域名网站模板,wordpress 导航菜单,怎样做买东西的网站,做网站的文件BCW: Buffer-Controlled Writes to HDDs for SSD-HDD Hybrid Storage Server
原文地址
为了兼顾访问性能和硬件成本#xff0c;目前有不少的存储系统都采用了混合存储#xff08;Hybrid Storage#xff09;#xff0c;使用 SSD 来提供微秒级访问#xff0c;配合 HDD 来降…BCW: Buffer-Controlled Writes to HDDs for SSD-HDD Hybrid Storage Server
原文地址
为了兼顾访问性能和硬件成本目前有不少的存储系统都采用了混合存储Hybrid Storage使用 SSD 来提供微秒级访问配合 HDD 来降低存储成本。在实现细节上一般会使用 SSD 来服务用户的写操作cache然后通过后台操作批量将 SSD 存储的数据搬迁到 HDD 进行更长时间的存储。
阿里云的盘古存储系统采用了类似设计来实现混合存储在观察了生产环境中的使用情况后论文作者发现系统对 SSD/HDD 的利用上存在明显的不均衡现象SSD 经常被过度使用而 HDD 的利用率却相对较低尤其是 write-intensive workload。
下表中四种负载分别来自于A计算型任务B存储型任务C、D结构化存储。 在写负载持续增高的情况下以 SSD 为主的混合存储系统会面临如下问题
SSD 寿命持续的高负载会缩短 SSD 寿命从数据上来看SSD 的每日写入情况经常触及所设上限即 DWPD (Drive Writes Per Day)。SSD 性能在写入密集的情况下大量的写请求可能会超过 SSD 的处理能力导致请求在 SSD queue 中排队引起长尾延时除此之外请求的增加也会更频繁地触发 SSD 的 GC导致性能下降。
对于此问题一个直接的解法是引入更多的 SSD无论是加机器还是单机上增加 SSD这都能降低单个 SSD 承担的压力但会引入额外的硬件成本性价比很低。
是否能够在不增加硬件且不降低系统性能的情况下解决此问题呢 通过大量针对 HDD 的实验作者发现在进行连续的顺序写时HDD 的延时表现出了显著的周期性。在持续写入的时间线上延时大致能划分为 fast - slow - mid 三个阶段以 4K 大小的请求为例fast 阶段持续 60ms延时为 35us然后是一个瞬时的 slow 阶段延时为 12ms接着的 mid 阶段持续 40ms延时为 55us之后则是 mid/slow 交替直至某个时间点回到 fast10TB 西数 HDD 上并没有展现完整的周期但 8TB 西数 HDD 的测试上体现了这一点下图。 可以看到在 fast/mid 阶段HDD 的延时在 us 级这和 SSD 非常接近。引起这一现象的源头是 HDD 内部的 buffer 机制HDD 会在其内置的 DRAM 中给写请求划分一块 buffer当它将一个请求存入 buffer 后它会向上层返回成功。而当 buffer 达到一定阈值后HDD 会将 buffer 中的数据写入物理介质这个刷盘过程会阻塞后续的写入从而导致延时增大。除此之外如果 HDD 持续 idle它也会隐式地执行此操作来清空 buffer另外 sync 的调用也可以触发 buffer 的刷盘。
这个发现为前述问题提供了一个解决思路 如果我们能够预测 HDD 下一次写入的情况在它能够提供微秒级延时时将请求交由 HDD 进行处理。 为了更好地描述 HDD 的这一特性论文中对此进行了建模F、M、S 分别对应上述 fast/mid/slow 阶段当进入 M/S 阶段后需要经过 sync才能使时延回到 F。对于不同型号的 HDD模型参数表中的 L, W, F 会有差异但均可通过事先测试来获取具体可参见原文此处不再赘述。
Design
Write-state Predictor 在模型的基础上文中根据当前的 buffer 大小以及写入状态F、M、S构建了对应的预测状态机进而设计了预测算法。 此算法中的 ADW 是个持续累积值需要由外部调用方下文中的 BCW 算法来进行清理除此之外算法逻辑比较清晰此处也不展开描述了。
值得一提的是作者对预测算法的准确性进行了验证以 128K 为单位连续写入 100GB 数据每写入 1GB 后就调用一次 sync 操作。结果显示算法对 F、M、S 三种状态的预测准确率能够达到 99.5%、98.1% 和 60.3%。可见对 F/M 的预测还是很准确的对 S 状态的错误预测是因为算法更侧重于保证性能毕竟从性能角度来看相比将 S 预测为 F/M把 F/M 预测为 S 会造成更严重的影响。
Buffer-Controlled Writes (BCW) 基于状态预测算法作者实现了写入控制算法BCW以尽可能保证所有的用户请求都在 HDD 处于微秒时延的状态F/M时被写入。
这个算法同样不能独立工作仍需要外部算法在 HDD 处于微秒时延时向写入队列转发请求算法中通过 flagHDD 来告知外部算法是否可以转发。
BCW 的一个主要设计在于其写入 padding 数据的逻辑
PS padding由于预测算法会在 F/M 状态下的 ADW 接近 Wf 或 Wm 时返回 S 状态BCW 根据此可以得知buffer 即将被填满所以它通过主动地构造 PS padding 数据较大64KB来触发 slow 写入直到某次写入的时延对应的状态不再为 SBCW 即认为当前 HDD buffer 以恢复到能够以微秒时延写入数据的状态它会重置 ADW。PF padding考虑到低负载的情况下HDD 可能不会收到任何写入请求可能 SSD 足够处理为了保证算法的稳定性BCW 会在非 S 状态时不断写入 PF padding较小4KB。算法中仅在预测状态为 M 的情况下进行此操作这是因为当 sync 或者 HDD 内部隐式 flush 被执行后buffer 会进入到稳定的 F 状态此时无需做任何的 padding。
Mixed IO scheduler (MIOS) 正如 BCW 中提到的它需要外部算法根据其设置的 flag 来决定此时是否能将请求转发给 HDD因此整个设计上需要一个调度器根据 HDD/SSD 的状态来进行综合调度决定每一个写入请求最终由谁处理。
如图所示本文设计的调度策略所参考的指标除了前述 HDD 的状态/flag 外还引入了 SSD 队列长度 l(t)。调度算法如下 算法的基本逻辑很容易理解
当 flag 被设置时HDD 一定处理 S 状态此时请求只能由 SSD 处理。当 HDD 处于 F/M 时如果 SSD 并不忙队列长度 l(t) 并非超过设置的阈值 L交由 SSD 处理对性能最好。
关于阈值 L 的选择文章给出的经验值为 1Evaluation 部分也给出了相应的验证来说明这一点。 在基本逻辑之上调度算法还被细化为 MIOS_E 和 MIOS_D两者的区别在于当 SSD 不忙且 HDD 处于 F 状态时前者会将请求转发给 HDD 以进一步地降低 SSD 的负载。
需要注意的是MIOS 算法需要拥有对 HDD 的完全控制所以当读请求到来时BCW 算法会被挂起来处理此请求此时不能再向该 HDD 写入数据。这也比较容易理解当读请求到达时HDD 的磁头可能就跑到了另外的地方无法再保证连续写的要求。因此对于 read-dominated workloadMIOS 并不适用。
Evaluation
Baseline纯 SSD 写入。MIOS_EMIOS_D
Production Workloads
论文使用了前述的 4 种 workload 对 MIOS 算法进行了详尽的实验结果如下。 时延对比无论是平均时延还是长尾时延MIOS 都拥有更好的效果。 SSD 队列长度分布也体现了长尾延时的降低。 不同请求大小下的平均时延对于大请求MIOS 的效果比 baseline 更差一方面是在写入大请求时SSD 本身比 HDD 拥有更佳的性能内部并行机制另一方面则是大请求相对较少被 SSD queue length 或 GC block 的概率也较低。
MIOS_E vs MIOS_D 因为 MIOS_E 允许在 SSD 不忙的情况下将请求转发给 HDD所以相比 MIOS_D它会转发更多的请求但也会导致时延上升。这个现象对于 workload A 特别明显从表 3 可知相比其他三个 workload 而言它对 SSD 的 workload 很低这也使得在 MIOS_D 下大部分请求仍旧由 SSD 进行处理能够获得更好的性能但在 MIOS_E 下请求被转发给 HDD导致了性能下降。
但这并不意味着 MIOS_E 毫无用武之地当 SSD 的写入性能本身就一般的情况下即使它的 queue length 并未表现出忙的特征但实际写入的延时可能依旧较高此时转发给 HDD 反而能获取更好的性能。作者尝试将 SSD 替换为 660p原先为 960EVO性能更佳后MIOS_E 表现非常好。 除了性能以外因为 MIOS_E 会收到更多的 HDD 请求从而算法中的 padding 数据也会增多所以它相比 MIOS_D 会产生更多的空间浪费。另外MIOS 算法将部分 SSD 负载搬迁到 HDD 上执行会有效提高 HDD 的利用率但仍需要确认HDD 仍有足够能力来承担数据搬迁SSD-HDD任务。实验对此进行了验证有兴趣的同学可以参考原文此处不再赘述。
Write Intensity 由于 MIOS 利用了 HDD 连续写的特性所以它非常适合 write-intensive workload作者对此进行了补充测试X 轴代表的是发送间隔越小数据量越大。
可以看到当写压力很大的情况下20-60usSSD 的性能会受到排队和 GC 的影响平均时延和长尾时延都要高于 MIOS。而当压力降低到可承受范围后SSD 将保证稳定的写入性能此时MIOS_D 退化为纯 SSD 写入因为 SSD 无忙特征但 MIOS_E 依旧会转发部分请求至 HDD所以相对之下会有更高的平均和长尾时延。
总结
总的来说MIOS 充分利用了 HDD 在连续写场景下的时延周期特性找到了一种在混合存储下保证微秒级写入和存储成本二者兼得的方法尤其对于 write-intensive workload未受到读请求打断的 MIOS 效果会非常好。
整体的设计还是非常容易理解的但发现这一特性并设计出能够稳定运行的算法生产环境必须相信作者们花费了不少功夫。
原文链接 本文为云栖社区原创内容未经允许不得转载。