解读浪潮存储登顶SPC-1背后的核心技术:智能I/O感知

浪潮存储资深架构师 叶毓睿、鲍磊

浪潮存储AS5600G2在SPC-1全球存储性能基准测试中,以752万IOPS、0.472ms时延的测试值刷新全球16控存储性能记录。这一测试成绩远超业界中端存储的性能,甚至已经超越绝大部分高端存储性能,受到业界广泛关注。

如何更加高效的提升存储系统的应用性能,构建起一套类似汽车自动变速箱的技术系统,让存储系统可根据前端应用自适应和调配不同数据处理策略,实现智能的IO感知、路径选择、组织和调度;让我们一起走近浪潮存储的这项核心技术“智能加速引擎iTurbo”。

智能加速引擎iTurbo是浪潮存储I/O软件栈的一套完整的智能加速算法,涵盖对介质、芯片、组件、OS等的优化,具备对I/O、路径、数据块、空间条带、计算存储网络资源等关键要素的智能调度能力,即保障百万级的命令和数据在一系列先进的硬件,如高性能处理器、FPGA、PCIe、Optance介质以及NVMe、RDMA协议组成的高速数据处理系统上畅通无阻和高效运行。

本篇文章我们揭秘iTurbo的核心技术之一:智能I/O感知。它包括智能缓存预读和特征数据识别。

智能缓存预读:实现“热”升“冷”降的数据电梯

在介绍缓存预读之前,我们首先要搞清楚关于缓存的两个基本问题,一是为什么要用缓存,二是缓存是如何工作的。

首先,我们来看看为什么要用缓存。大家知道,CPU 的运行速度比磁盘的速度快很多倍,这样会导致 CPU 需等待磁盘完成处理后才能继续下一道指令, 缓存的处理速度能够跟得上 CPU,它作为CPU与磁盘之间的过渡,很好的解决了这一问题。当CPU处理完数据后,将数据直接发送给缓存,然后立即向应用返回确认,缓存中数据达到一定水位定期写入磁盘,从而提升效率。

其次,我们来探索下缓存的工作原理。在程序运行过程中,缓存会有一个局部性原理,即程序会频繁访问局部缓存。如果缓存地址变换频繁,那么缓存中存放的数据就会频繁改变;如果程序频繁访问局部数据,那么 缓存中的数据改变就不会很大。因而命中率就会提高,CPU 的运行效率也会提升。

解读浪潮存储登顶SPC-1背后的核心技术:智能I/O感知

浪潮存储的缓存工作原理

由此可知,衡量缓存管理的优劣有两个指标:一是缓存命中率,命中率高,性能就高,否则反之;二是有效缓存的比率,有效缓存是指真正会被访问到的缓存项,如果有效缓存的比率偏低,则相当部分磁盘带宽会被浪费到读取无用缓存上,而且无用缓存会间接导致系统缓存紧张,最后可能会严重影响性能。

现在我们清楚了缓存的工作原理及性能指标,那么为了充分发挥缓存的作用,仅仅依靠“暂存刚刚访问过的数据”是远远不够的,还要通过使用数据预读算法——尽可能把将要使用的数据预先从内存中取到缓存里。那么关键问题来了,一是如何更精准的判断哪些数据是应用程序将要使用的数据?二是当缓存写满时,如何判断哪些数据被淘汰?这就是浪潮存储缓存预读算法的精髓所在。接下来我们就来深入剖析浪潮存储缓存预读的工作原理。

一方面,浪潮存储基于缓存预读,可精准判断数据热度。浪潮存储的缓存预读算法,可以根据历史数据的I/O模式,通过智能分析、预判将要访问的数据,提前将这些数据预读到缓存中,提升缓存命中率,降低I/O访问时延。这里主要有两个关键技术要点:

解读浪潮存储登顶SPC-1背后的核心技术:智能I/O感知

浪潮存储的智能缓存预读算法

一是自适应缓存预读策略。读I/O分为随机读和顺序读两大类,为了保证预读命中率,针对不同的I/O模式采用不同的预读算法。对于顺序读根据区域地址进行顺序预读,对于随机读根据区域热度进行预读。根据不同的读I/O模式两种预读策略动态调整,不仅可以保证很高的预读命中率,同时有效率/覆盖率也很好。

因为顺序读是最简单而普遍的,而随机读在内核来说也确实是难以预测的。内核通过验证如下两个条件来判定是否顺序读:该区域内容被第一次读,并且读的是首部;当前的读请求与前一个读请求在区域内的位置是连续的;如果不满足上述顺序性条件,就判定为随机读。预读策略根据读I/O模式不同动态调整。

二是预读粒度动态调整。当确定了要进行顺序预读时,就需要决定合适的预读粒度。预读粒度太小的话,达不到应有的性能提升效果;预读太多,又有可能载入太多程序不需要的内容,造成资源浪费。为此,浪潮存储可根据实际的需求动态调整预读数据内容的粒度,从而提高缓存的有效率。如果缓存命中率提高,后续的预读粒度将逐次倍增,直到系统的最佳预读大小;随着缓存命中率降低,后续预读粒度将逐渐减小,直到系统的最佳预读大小。

另一方面,浪潮存储基于缓存替换算法 实现低访问数据下移。当缓存满了怎么办?不得覆盖掉一个,覆盖掉哪一个?这就是替换算法要解决的。浪潮存储的缓存替换算法是基于预读数据的命中率,结合数据的访问热度,淘汰最近最少用的那一块,从而提升预读数据的有效性,保证预读持续、高效的正向性能提升。

浪潮存储的设计思路是,如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。具体实现算法如下:

硬件缓存每一行都有一个计数器,用来记录被使用次数。

计数器变化规则:

− 每组4行时,计数器有两位,计数值越小则说明越被常用

− 命中时被访问行的计数置0,比其低的计数器加1,其余不变

− 未命中且该组未满时,新行计数器置为0,其余全加1

− 未命中且该组已满时,计数值为3的那一行中的主存块被淘汰,新行计数器置为0,其余全加1

说到这里,估计大家还是没有看懂,为了更加直观的展示算法原理,我们举个例子:

解读浪潮存储登顶SPC-1背后的核心技术:智能I/O感知

智能缓存替换算法原理

现在有四个格子,但是有 5 个不一样的块要进来,缓存替换过程如下:。

1 来,没有命中,1 进入缓存。计数器为 02 来,没有命中,2 进入缓存。2 计数器 0, 1计数器为 1(对应第三条)3 来同上4 来同上1 又来,命中,1 的计数器变为 0。其余加 1。2 又来,命中,2 的计数器变为 0。其余加 1。5 来了,但是现在 Cache 满了。去掉哪一个呢?计数器最大的那个! …

特征数据识别:基于“逐字节”比对实现去重

根据用户的数据特征建立数据特征表单,当新的数据请求与表单中的特征匹配时,说明该部分数据已经落盘,这部分数据可以避免重复写入。特征匹配采用近似匹配的策略,存在两份不同数据的特征一致的情况,为了确保用户的数据安全,每份不同的数据都能一字不落的存放起来,浪潮存储还对特征匹配的数据需要进行“逐字节”比较,为了降低逐字节比较时的访盘时延,系统会智能感知特征数据的访问热度,将频繁访问的热点特征数据提取到内存中,保证系统时延最低。

解读浪潮存储登顶SPC-1背后的核心技术:智能I/O感知

浪潮存储的特征数据识别算法

总结一下,浪潮存储的智能I/O感知,通过自适应缓存预读算法对历史数据I/O模式进行分析、判断识别,对其提前读取到缓存,从而达到缓存最高命中率。当缓存写满时,通过独特的替换算法将使用最少数据的淘汰,将缓存发挥出其最大的价值,从而提升存储整体I/O性能;通过特征数据识别和逐字节的比较,在确保数据安全的前提下减少数据落盘,从而提高存储的性能及空间使用率。

(免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。 )