枫林 发表于:13年11月28日 15:47 [原创] DOIT.com.cn
存储在线专栏文章:EMC Symmetrix存储阵列从1988年诞生至今,名字从Symmetrix到DMX,再到VMAX,已经不下十几种型号,硬件配置与架构完全更替。而不变的就是操作这个庞然大物的心脏,操作系统Enginuity。至于Enginuity到底是以什么内核而编写的,就算EMC的工程师也很少有人能说得清楚。毋庸置疑的是这个拥有悠久历史的存储操作系统Enginuity让Symmetrix一直以来领跑高端存储,而其中Enginuity的性能优化算法在中间扮演了重要角色。本文将对Symmetrix操作系统Enginuity的缓存优化几种算法进行介绍,让读者走进这个神秘存储阵列的心脏。
Enginuity的最大化应用性能的缓存算法:
Symmetrix Enginuity的主要功能可以分为几大块,除了文本中要介绍的缓存性能优化算法以外。还包括支持高可用数据一致性、支持配置管理的虚拟池调配易用性与性能分层存储、安全方面以及磁盘性能优化等功能。缓存性能优化功能作为Enginuity的核心组件,在保证处理并发与高负债的I/O过程中起着至关重要的作用。
众所周知,高端存储所需要支持的是一个复杂、且不断变化的应用环境。Enginuity在设计初始就是为了满足可以高速将大量数据进行高效的传输。Enginuity会利用一些内部的机制与算法来最大化前端应用的数据访问,以及数据在阵列内部的复制。缓存与磁盘作为Symmetrix阵列中主要的数据载体,缓存速度明显高于物理磁盘,即使是在现今闪存盘大行其道的情况下,缓存仍然还是作为存储阵列中的主要加速方式。所以,任何存储阵列研发都致力于最大化在内存中处理I/O,寻求缓存与物理磁盘之间的平衡,从而提升整体的性能性能,确保数据的一致性与安全性、更快的响应前端的数据访问请求。为了达成这个目标,存储系统需要知道哪些数据可能马上要被访问,然后把数据载入或者继续留在缓存里。而且缓存与物理磁盘的这种平衡是一个连续的过程,且需要满足所有逻辑卷。就Enginuity来说,它能通过一些算法来调整数据流与控制阵列性能,而且这些算法基于几千台已装机的Symmetrix存储阵列的实际分析而来,用来取保Enginuity可以根据已有的历史数据,分析结果满足最大化应用数据访问性能。而Enginuity的缓存算法可以体现在以下几个方面:
1.智能预读算法:预读算法的目的就是把需要的数据预先载入缓存,,因为任何智能存储数据读取的优先是访问缓存,如果缓存没有命中,再从物理磁盘载入数据到缓存,然后返回给前端应用主机。虽然预读算法并不是Symmetrix首创,但是传统的预读算法只是简单的基于任意数据大小与数据流的选择,或者只是保守的预读一个很长的顺序读写的后续数据,还有为了满足一些分散的小的I/O而去去读一大段的数据从而满足缓存命中的需求。而这种做法对于一些中短类型的顺序读的效果不是很好,而这部分的数据读取在实际应用环境中发生的情况可能会在90%以上。如果预读的算法工作不够高效,就会导致大部分在缓存中的数据不会被前端应用访问,造成资源浪费。Enginuity在处理预读数据选择的时候,会利用一些更加巧妙的方法来选择预读的数据。这种选择基于动态的实时环境分析预估而得,且Enginuity的预读算法只是会加载需要被访问的数据,而不会影响其他I/O的活动。
2.基于标签的缓存算法:Tag-Based Cache(TBC)算法是从Enginuity早期版本(5670)就提出的革命性算法,并且一直沿用至今。它的目的是解决存储满足不同的应用环境问题配置灵活性,TBC允许在很低的管理负债的情况下提供这种灵活性。简单来说TBC的作用就是根据应用来分配缓存,他的主要体现就是Symmetrix Dynamic Cache Partitioning功能。(参考:Symmetrix动态缓存分区技术(DCP)原理与配置)
3.PermaCache:谈这个算法之前,我们要先谈一下Enginuity处理驻留在缓存中数据的算法。Enginuity在空缓存的情况下,会结合预读机制将数据渐渐载入缓存,满足前端应用读取的需求。当缓存用到一定的阀值以后,Enginuity会应用到LRU算法,这个是也是在行业中被广泛使用缓存页面替换算法,全程叫做Least Recently Used。LRU顾名思义就是把最久的未被使用的数据从缓存里替换为新的数据。而这种算法在某些情况下会有一点列示,例如某些数据他访问优先级很高,但是被访问的次数却不多,我们通常把这些数据叫做HPRA(High Priority,Rarely Accessed)数据。对于这些数据,如果只是利用直接的LRU算法,这些数据会被很快的移除缓存,造成下次数据访问的时候需要再次从物理磁盘载入,增加数据读取的总时间,影响应用性能。而PermaCache算法就是为了解决这样的问题, PermaCache可以将特定的数据(以磁道为单位)长久滞留于缓存,以提供高速的访问响应。虽然这个方法配置起来需要EMC的工程师修改BIN文件,没有用户配置接口。但是作为一个极端的性能加速方法,它的作用显而易见,也是缓存优化的选项之一。
上面我们介绍了三种Symmetrix操作系统Enginuity的缓存性能优化算法。可以看出,作为加速应用的数据访问速度主要载体-缓存,除了硬件本身的速度与缓存的大小以外,一些特定的算法同样也可以在特定的情况下优化存储性能,Enginuity的智能预读、基于标签的缓存算法,PermaCache都是可选的方式之一。Symmetrix的缓存处理机制比较复杂,本文只是罗列了其中一些功能。对于更多的Symmetrix缓存机制介绍,参考文章:Symmetrix缓存技术解读
本文作者为EMC中文技术社区(https://community.emc.com/go/chinese)技术版主。如果您对本文有任何疑问和不同见解,也欢迎到EMC中文支持论坛参与讨论。