zoukankan      html  css  js  c++  java
  • SMR磁盘学习10---Data Handling Algorithms For Autonomous Shingled Magnetic Recording HDDs

    SMR磁盘学习10---Data Handling Algorithms For Autonomous Shingled Magnetic Recording HDDs

    SMR的瓦结构使得磁盘的存储密度增加了,但也带来了一些问题。由于SMR写磁头操作限制,使得SMR更加倾向于顺序写,随机写的性能很糟糕。为了让SMR被市场所接受,必须要维持它的随机写性能。

    首先用LFS分析了顺序写与随机写的性能状况,根据这一状况来确定解决工作,将工作分成两个部分:第一部分在对主系统进行微调整后强制执行维持随机写性能,即短块随机写算法。第二部分为第一部分写性能方法的进行改进。其次给出这两部分相关操作与测试结果,最后进行总结并得出结论。

        第一部分:

    数据组织:将数据安排到主顺序的瓦区域(host-sequential shingled regions)这些区域被称为I – regions。但是这样的安排与HDD有两点不同,

    1. Refresh operation  经过Refresh operationlogical track i是第一次读,然后重写几个tracks结束。

    2. I – regions包含了额外的tracks 作为Refresh bufferguard tracks(两个相邻I – region的保护)

    (这样完成的是一个迂回系统,在进行refresh操作后数据会渐渐的转移到I – regions(保持这些tracks的位置和提供一个host data地址和physical address之间的动态映射,即I – region是间接的region))

    E-region是由Mtracks的小瓦区,接受新的写不管他们的逻辑寻址

    主操作:写的操作来自主机,收集主机的写数据,传送到随机的主地址,并转换成有效的物理顺序写操作到E-region,每个被写到E-region的主操作都被称作一个异常,(一个新信息往往会使得I – region的关联位置无效重写)

    后台操作:如果不做任何处理,E – region会被填满(来了新写操作就接收,没有进行E – region的回收),于是设置一组后台操作,它适用于平稳、持续、无间歇的随机写操作(不是主机发出的命令,用于清理E – region为新写腾出做够的空间)

       目的是通过恢复I – region track上的数据来清除E – region上的异常。(瓦结构意味着顺序恢复,要依次Refresh每一个I – region)

    Refresh operation:如果没有holes,就是简单的一个track读和一个track写;如果holes存在(最常见),在完全重组的track被重写前,相应的异常从E – region中读出来,这样已经重写的异常就被清理了。同时要求Refresh速率要高,来保证在平稳状态下为新的写留有足够的空间。(oldest tracks重写可能会形成很多的holes

    性能分析:

    在平稳状态下,一个新的主机写请求确切的说就是一个异常的读。

    IOPS(每秒进行读写操作的次数,衡量随机访问的性能,其中10 K rpm能处理100 IOPS),利用IOPS来衡量随机写的性能。(请求顺序写入 E-region的时间、寻求消耗时间、refresh operation时间、完成所有必要异常的读所需要的时间)

    3%的预留空间、10K rpm和每个E-region track 扇区大小为2000512字节的情况下,随着writeBlocksize的增大观察标准HDD和短块随机写算法的IOPS情况

    当写块的大小<104时该算法的使得平稳的随机写性能高于标准HDD

    第二部分:改进并探究transfer length

    说明:E-region接受的写操作在进行refresh Operation后被更新到I-region(完成写入数据的操作),如果将每次更新写操作的平均次数降到最低,随机读的性能自然而然也就提高了。

    这里将SMR的约束放宽了,只考虑写磁头宽度和算法的约束。假设写磁头宽度为2tracks的宽度。数据安排在N个逻辑data tracksM个额外的tracks上,overprovisioning的值为M/N

    将问题抽象化为:有N个有效状态Si, Si所占两个物理tracks;其余的逻辑tracks各占一个物理track,如图3。给任意初始状态和一个逻辑track去更新,选择任意的终态。

    于是就想能不能找到一个配置使得随机更新到任何逻辑track的写请求平均数目最小化。

    通过贪婪算法给出了一个猜想:给任意初始状态和一个逻辑track去更新k,选择一个使得写数目最小的作为终态,如果这样的终态不止一个,选择最集中的一个。

    在两种不同配置的情况下通过改变N进行测试,从图上看出使用该配置比不使用每次更新写的平均次数要少。(记录效率,测试使用的transfer length为一个track

    Transfer length size 探究

    (用多个tracks进行测试)

    分两种情况:顺序的逻辑tracks 更新操作、均匀的逻辑tracks更新操作

    transfer length和需要更新的逻辑track进行标准化,完成测试。

    测试结果:(随着Transfer length size的增加,每个track的操作数目情况如图)

    顺序分布逻辑tracks分布的更新性能比均匀分布的逻辑tracks好,

    均匀分布策略性能差的原因是被要求更新的track稀疏(顺序策略是依次更新,均匀策略是命令式的分别更新),如果整个分区都被更新这两种策略表现一样好。

    结论:对于小的transfer length,可以维持随机写的性能,当transfer length大于一个tracks大小时,其性能下降。对于较长的transfer length 顺序策略可以接近标准性能。

  • 相关阅读:
    安卓笔记20170117
    android笔记20170116
    meta 标签的作用
    SASS 初学者入门
    JQuery selector
    浅谈js回调函数
    自己写的jquery 弹框插件
    魔兽种子
    html页面的CSS、DIV命名规则
    各种弹框素材的链接
  • 原文地址:https://www.cnblogs.com/tao-alex/p/5933511.html
Copyright © 2011-2022 走看看