2378|1

6423

帖子

16

TA的资源

版主

楼主
 

存储系统中的自动化技术 [复制链接]

原文地址

2009年,Google曝光了自动驾驶汽车的雏形图片;随后在2012年获得了美国首个自动驾驶车辆许可证。随后,Uber,奔驰、本田、奥迪、宝马、特斯拉、德尔福、苹果、百度等公司都相继加入了该行业。至2035年,全球自动驾驶汽车销量将占汽车总销量的9.2%。自动驾驶汽车体现了新型的人工智能、无线网络、传感器技术对传统行业的颠覆。虽然它是一个非常时髦的领域,但是它所依赖的自动化技术却是一个十分经典的领域。在不知不觉之间,自动化技术在生产和生活中发挥了巨大的作用。随着软件定义存储和云计算的普及推广,自动化也正在深入影响存储系统的诸多方面。

在存储系统设计中,为了解决存储系统的延迟和它的容量之间的矛盾,普遍采用了分层(Tiering)设计的思想。Tiering的原理与Cache是类似的,都是将经常访问的数据存放到高速的存储介质(性能卷)中,而把不经常访问的数据存放到容量介质(容量卷)中。当然与Cache相比,Tiering技术在把数据转移到性能卷之后会删除原来的数据副本并释放相应的空间,而Cache则仍然会保留在容量卷中的原始数据。因此Tiering对于空间了利用率会更高一些。此外,采用了多个分层存储介质的系统配备上自动的分层软件可以实现对于用户数据的透明分层,这对于用户来说提供了很好的性能和容量的优化。



无论是Tiering还是Cache技术,一个很关键的设计就是它的淘汰算法。为了能够在性能卷上腾出空间用于存储经常访问的数据,需要随时根据需要来淘汰不经常使用的数据。淘汰算法需要根据历史的页面(或处理单位)访问统计信息来评估未来可能对于这些页是否还会使用。依赖于评估算法的模型不同,出现了例如LRULFU等不错的淘汰算法。


对于LRU来说,存储系统需要记录对于每一个存储页上次访问的时间,在出现缓存使用量超出阈值需要进行淘汰的时候,会选取最古老的一个页的数据进行淘汰。通常在存储系统中并不需要记录每次访问的绝对时间,仅需要把所有的缓存页用链表链接起来维护它们的访问顺序,就可以找到访问时间最早的页面并进行淘汰。LRU对于系统中存在热点数据的情况时,它的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。


LFU的设计理念则更多考虑到数据野的使用频率(次数)。系统对于每一个缓存页进行计数,并尝试淘汰计数最低的页面。因此,对于LRU中出现的偶发性的、批量的操作导致的问题具有较好的抑制性。但是,有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数结果定时打折,形成指数衰减的平均使用次数。


从上面的分析来看,LRULFU的优劣势是互补关系,对于一个智能自动化的系统来说,最优化的方法是借鉴两者的共同优势,实现自动调整的优化算法。自适应替换缓存算法(ARC)就是一个自动化淘汰缓存的优化算法。


ARC是有IBMAlmaden研究中心提出的借鉴了LRULFU两者优势的一个算法,在SolarisZFS中的缓存淘汰算法曾经一度基于该算法实现,IBM2006年申请专利并获得授权,并在IBMDS6000/DS8000系列存储控制器中获得应用。


对于Almaden研究中心来说,LRULFU都在一定场景下发挥相应的优势,而实际的存储系统中,可能场景并不一定是LRULFU所擅长的场景,为了解决这种场景上的差异,ARC需要去实时评估当前的缓存场景是哪一类型占主导,并依据评估结果对算法进行动态调整,以期望获得比LRULFU更优秀的缓存效果。


ARC中,设定了固定大小的缓存页分成了两个链表:LRU链表和LFU链表。两个链表的节点共享所有的缓存页,通过调整两个链表节点的数量来决定当前是更加倾向于LRU场景还是LFU场景。在LRULFU两个链表上还各自附着了一个Ghost链表。Ghost链表不存出具体的内容,仅用于评估当前的形势。例如,如果更大的比例是处于LRU所关联的Ghost链表发生了缓冲区命中,那么可以认为当前的形势更加适合进行LRU,因此可以据此增加LRU链表节点的数量并同步减少LFU链表节点的数量。

ARC算法的基本原理如下:


1、如果数据第一次使用,会把它放到LRU链表的表头,同时把LRU链表中的其他页逐渐转移到链表的后端。如果LRU链表长度超出定义的长度,就把最后一个页淘汰掉,并把它的地址和引用信息加入到所对应的Ghost链表中。
2、如果位于LRU链表中的内容被第二次使用,将会从LRU链表中取出来并放入到LFU链表中,同时把LFU链表中的其他页逐渐转移到链表的后端。如果LFU链表长度超出定义的长度,就把最后一个页淘汰掉,并把它的地址和引用信息加入到所对应的Ghost链表中。
3、如果LRULFU链表关联的Ghost链表发生了命中,那么除了进行上述操作外,还需要调整增加对应的LRULFU节点数。


在典型的测试中,ARC的设计比普通的LRU缓存设计更加有效。对于一个类SPC1的测试,Megiddo Modha用它们的ARC得出了两倍多的更好的命中率,实践证明了该算法的有效性。而在该算法的思想背后,蕴含着朴素的自适应控制系统的原理:基于对系统观测量的有效分析并指导系统做出动态调整以期望实现系统的最佳表现。


在一些软件系统设计中,采用了前台和后台的任务划分方式。通常前台任务直接与应用和用户进行交互和通信,而后台任务则负责进行批量的低优先级任务。在特殊的情况下,如果长期大量的后台任务得不到有效的处理,那么会导致系统最终耗尽有效资源并严重影响或阻塞前台的任务。因此,在这类设计中,如何根据不同的场景协调前后台任务的优先级,并保障前台任务平稳和流畅的运行非常关键。在这些场景里,往往可以利用自动化资源或带宽管理技术来达到前后台任务的合理分配。


这里考虑一个在SSDFlash数据写入的前后台任务的例子。SSD所采用的存储媒介Nand Flash的写入特性约束是很强的。FlashPage可处于ErasedProgrammed两种状态。每次擦除动作会把一个Block内所有的数据(~10M)全部擦除掉,写入的时候需要在Block内部从第一个Page到最后一个Page顺序写入。如果用户写入SSD的方式与此不同,就会需要一个地址转换层实现从逻辑地知道物理地址的转换。这种转换也意味着一旦用户只修改了位于一个Block内的部分数据,那么虽然部分的数据已经变成无效状态了,但是在其他部分的数据被转以前,这个Block是不能被擦除的。负责转移一个Block中有效数据的机制称为Garbage CollectionGC)。

在通常的SSD设计中,通常预留了一些备用的空间(Over Provision)来保存用户新写入的数据以及GC需要转移的数据。但是这些备用空间是有限的,因此需要在后台不断进行GC腾空那些已经部分失效的Block并擦除后,才能形成持续稳定的备用空间。因此,在用户持续写入的压力下,除了前台任务需要不断去把用户新写入的数据保存到Flash中之外,也需要后台任务去随时监视备用空间的大小,并动态调整GC的强度。因为GC的存在,会导致SSD中的写放大,并同时对于用户写入带宽造成影响。下面的例子是PTS1.1给出的一个在持续的随机写压力下不同的SSD实测效果图。可以看到,刚开始SSD中没有保存数据时,随机写性能很高。随着备用空间的消耗和GC的逐步启动,写性能持续下降并最终稳定到一个较低的值。在这种状态下系统的写性能所消耗的备用空间的速度与GC新产生的备用空间的速度相等。

对于不同的SSD来说,除了在各个阶段大家的性能表现不同外,性能的抖动也表现出来一定差异。从图上看,一些SSD性能抖动很大,这样不仅需要预留更大的设计富裕量以应对最坏情况,也客观上造成了用户服务质量变差和系统缓冲负载的增加。因此,SSD通过一系列包括自动反馈控制GC的强度在内的方法确保了用户性能的稳定性。


下图给出了一个典型的GC反馈机制。在该系统中来自主机端的用户写请求和来自于GC端的写请求需要分别通过各自的带宽限制器之后,合并成一个数据流之后在后端写入到Flash中去。系统中有一个负责决定两者瞬时带宽的反馈算法,根据后端的IO延迟和Flash上备用空间的大小来确定两者各自的强度。如果后端的压力过大,则会导致系统对于主机端写入数据的延迟增加。为了避免主机端延迟过大,该系统通过对于后端的IO延迟进行统计,并据此来调整带宽。此外,如果备用空间变小,那么需要更大的GC强度才能回收更多的有效空间,因此系统也会依赖于备用空间大小作为输入信息,实时调整主机端写入强度和GC写入强度的比例。

该系统中,反馈机制的实现非常重要。这是因为备用空间通常是以Block或更大的粒度作为回收对象的单位,而该粒度的大小为10~1000MB,这样如果备用空间发生变化时,会对系统的带宽分配造成一定的冲击。为了减少这样的冲击,并且平抑一些突发业务压力的变化,通常在反馈机制中通过一些机制过滤掉系统中的状态突然变化,最终实现用户的性能的稳定。


在基于软件定义的存储系统中,以及在基于RAID2.0技术的存储系统中,上面所说的GC机制也广泛存在和使用。此外,类似的机制也实现在了基于HDD的系统中。例如,EMC采用了基于统计机器学习的方法对于存储系统进行智能控制,实现了在HDD中对于不同的业务的平衡的服务。


NVMe协议中,定义了基于主机的静态和动态功耗控制。其中动态的功耗控制可以通过下图来说明。NVMe规定了一个控制器可以提供的功耗配置列表。主机可以通过Identify命令来获取设备支持的所有功率配置情况以及相应的性能指标,该指标通过0~5等级这样一些相对的参数来标明实际的能力。主机根据实际的用户需求的能力和要求的功耗不同而通过Set Feature来动态调整功耗状态。该控制系统会综合比较需求的性能指标和来自控制器端的性能统计参数,并依赖于功耗控制目标来综合做判断,用于实时调整功耗状态。使用了这样的策略,可以有效根据实际情况来配置SSD到不同的状态,达到最优的用户体验。

上面提到的方法,也广泛应用在SSD内部。SSD系统的功耗强烈地依赖于顺势性能。如果功耗过大,对系统是一种负担,另外会导致温度上升等一系列问题。在SSD内部,通常配置了一系列功率和温度传感器,并且会使用自动控制技术来进行控制。下面的仿真结果反映了基于不同的散热条件下,SSD系统的温度和性能随时间变化的曲线。在系统刚刚启动时,温度还没有达到控制阈值,因此系统的性能最高。但是随着时间的推移,系统温度达到了70,系统逐渐开始控制带宽抑制温度上升,最终系统温度会稳定在70的平衡点,性能也会稳定到一个恒定值。

应该说,得益于各种自动化的方法和自适应的方法,存储系统在一定程度上实现了智能化,增加了存储系统的适应范围和提升了综合服务质量。当然这种智能化依赖于良好的设计和实际数据来支撑实际的情况,并将先验的数据总结成系统经验。不适当的数据输入或者是实际情况的改变都会造成不良的结果。在今年的57日,一名司机在使用特斯拉Model SAutopilot模式时,遭遇了一辆正在左转的重型卡车,导致司机死亡。虽然目前还没有对该事件的详细调查结果,但是显然,自动化的系统和智能系统需要更高的可靠性和适用性来让人类更加放心地让它承担更大的责任。毕竟,创造智慧这件事,连上帝自己都细思恐极。对人类来说,我们究竟是要智能的仆人,还是聪明的伴侣?


[1] https://kintronics.com/products/software/point-storage-manager/
[2] http://www.cse.wustl.edu/~lu/papers/sigmetrics08_control.pdf
[3] https://en.wikipedia.org/wiki/Automated_tiered_storage
[4] http://blog.chinaunix.net/uid-28466562-id-3837685.html
[5] https://en.wikipedia.org/wiki/Cache_algorithms
[6] https://en.wikipedia.org/wiki/Adaptive_replacement_cache
[7] http://www.tomsitpro.com/articles/enterprise-ssd-testing,2-863.html
[8] https://www.emc.com/collateral/white-papers/h14344-emc-scaleio-basic-architecture.pdf
[9] https://movie.douban.com/review/7506242/














此帖出自FPGA/CPLD论坛

最新回复

值得细细研读…………  详情 回复 发表于 2016-7-17 19:23
点赞 关注
个人签名training
 

回复
举报

15

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
值得细细研读…………
此帖出自FPGA/CPLD论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表