浅谈存储重删压缩之三netapp的逆袭

浅谈存储重删压缩之三netapp的优化

摘要:上一期我们回顾了HDS硬盘压缩以及EMC在老架构上改进的设计,本期我们主要来看看命运多舛的Netapp如何更新自己的重删压缩。

谢谢大家的关注和支持,欢迎转载,转载请注明出处。

欢迎大家关注“new_storage”

Netapp重删压缩的历史

Netapp实现重删压缩很早,造2010年之前,netapp的NAS设备已经具备了重删压缩的能力。当时全球市场一直将重心放在HDD存储,而netapp实现重删压缩也很能理解,当时有很多温冷数据存储在netapp上,所以重删压缩是一个增加附加值的功能。但是很遗憾,这个功能并没有帮助netapp获取多少市场,而是统一存储这种架构在2010~2014年在全球大行其到,成为中端存储的标志倒是让人非常意外。

Netapp ONTAP 8.3之前的实现

Netapp老的压缩实现是以压缩率优先的原则,因此压缩的压缩作用域设置为32KB,然后会进行压缩,如果压缩率低于25%也就是压缩出来的块依然大于24K就会放弃压缩。压缩最小可以压缩到4kB。对于不可压缩的块在后台压缩中进行继续压缩。对于小于32KB的IO,在线压缩会跳过他。

同时,netapp支持后处理的压缩。

对于重删的实现,netapp老版本只支持后重删,只是会在数据实时下盘时候就进行了指纹的计算,然后加入到记录指纹的一个日志文件。

等到后台重删被触发后则启动重删流程。然后执行跟传统重删一样的操作,指纹查找,有重复则进行逐字节比对,然后进行数据删除的操作。

Netapp老版本限制较多:

1,         压缩必须和重删一起使用,不能单独使用压缩功能

2,         只有使用了后压缩以及重删,才能开启在线压缩。

3,         同一台存储内,最多8个卷同时开启重删或者压缩

从这三个限制可以看出,netapp对于压缩重删的性能是非常保守的。而且在白皮书中也指出了这一点。

Netapp指出,在1个LUN重删时对性能影响《15%,但是8个LUN同时开启重删时影响则为15%~50%。

对于在线处理的压缩而言,如果系统负载在50%以下,开启压缩CPU利用率会上升约20%,对于大于50%以上业务压力的系统,netapp不建议使用在线压缩功能。

后压缩和后重删机制对于SSD为主的全闪存存储来说不知道是否会带来过量的写入而导致SSD快速磨穿,这个问题还有待验证。

新版本快速优化

Netapp新版本主要的优化在压缩,抛弃了原有的压缩架构,因为原有的压缩主要用于文件系统,压缩域比较大,需要多个数据块进行合并压缩。合并压缩意味着每个快需要等待多个快合并在一起才能去压缩。

Netapp的san存储块大小是4KB,因此在新版本netapp压缩以4KB为单位,压缩成1K~4KB的小块。压缩效果还是有个预判机制,压缩率》50%才会压缩,否则不压缩。这个改动使得压缩效率提升了很多,但是同样的压缩率很低。

为了改善压缩率,netapp在该版本新增了一个功能,国内叫做压紧。将多个小块合并成一个4KB的块来存储。这个操作很有效,毕竟每个快的元数据只存储一个地址和偏移量,压紧不会增加任何元数据的开销,只是需要刷新一下原来的元数据即可。

这么简单的一个操作解决了大量空洞的问题,同时还提升了资源利用率。但是由于netapp压缩机制本身简化带来的压缩率下降(压缩域太小),所以netapp本身的压缩时牺牲了压缩率,提升了性能。可取之处就是压紧的处理。压紧过程还会处理一些之前没有做压缩处理的块,因此压紧还有一定性能开销,按照netapp的说法大概在5%左右。

Netapp的重删改动比较大,主要在于元数据指纹的存储机制以及改成了支持在线处理和后处理两种。

重删的粒度和原来一样还是4KB,但是存储机制已经变化了。

1,                所有指纹数据仅仅在缓存中存储一份,不做持久化,不需要考虑镜像什么的,在重启和升级过程中,指纹会被丢弃。这么做的原因就是相对于牺牲性能,我们宁愿牺牲重删率。那么我们就可以大幅降低因为指纹和盘的交互以及指纹持久化带来的内存开销,镜像开销等等。所以对于希望实现重删的国产厂商,我的建议是:重删的指纹不需要持久化,不需要镜像,如果是升级或者重启,建议还是存到硬盘上一份,但是不需要实时下盘。只需要在掉电和重启等操作时下盘即可。Netapp当前并未做重启升级以及掉电时候的指纹保护,我觉得这一点并不好。

2,                指纹按照热度进行淘汰,一旦指纹空间满了,就采用最简单的LRU算法进行淘汰。这也是一个保持指纹查找高效的方式,可以保证指纹全内存。这个也是值得学习的。

当然上述两个对于指纹的改造其实还有一个提前需要解耦的东西。很多厂商在实现重删的时候讲引用计数和指纹在一起存储,就需要进行解耦才能更好的实现。

这也让我们需要反思后续的数据结构设计需要将数据按照持久化级别进行分离,而不是按照数据的关联性进行合并。随时保持架构的灵活性。

当然,netapp其实可以做的再好一点,比如说将指纹表最热部分缓存一份到L1 Cache,并且改变数据结构为hash,对性能的影响会更小,其他的全量指纹则放在L2 Cache再用B树存储来节省空间。这样可以让重删更加灵活,如果业务压力大则只在L1 Cache进行查找。

题外话,当前客户对于重删还是有很多顾虑,很多人认为重删会导致数据丢失的风险。所以我们不可避免的都需要做逐字节比对,在这种情况下,netapp给我们做了一个很好的表率,那就是我们使用弱哈希,节省指纹表空间,扩大指纹数。这个也是可取之处。使用强哈希不做比对的厂商未来根本没法在市场上被接受。

Netapp全闪存卷土重来

在2015年之前在SAN领域netapp就是一个落后者,在全市场领域更完全是个失败者。但是通过2016/2017年的持续优化,竟然翻身了,非常让人不可思议。

其实他只做对了一件事,将压缩重删实现了,同时开启后性能下降在可控范围内(5%~20%)。就这么一条,就让netapp如今在全闪存市场逆势上扬。

所以重删压缩不做或者做不好,未来将会走向泥潭。

重删压缩是个锦上添花的东西,绝对不是雪中送碳。IT市场的写标能力是技术的天敌。此外技术的市场化也是需要很长的孕育,至少在中国区接受重删压缩就可以少配容量的事情还需要很长时间。

谢谢大家的关注和支持,欢迎转载,转载请注明出处。

欢迎大家关注“new_storage”

原文地址:http://blog.51cto.com/13559412/2066610

时间: 2024-11-12 09:57:27

浅谈存储重删压缩之三netapp的逆袭的相关文章

浅谈存储重删压缩技术(一)

浅谈重删压缩技术(一) <喜欢更多内容可以关注微信公众号"围炉煮酒论IT"> 作为一个做企业存储市场的存储人,最近两年我不断被重删压缩撩拨着.对于重删压缩这个技术的好坏,真实需求还是伪需求大家看法不一.今天我就只能谈谈我个人的看法. 重删压缩是什么? 重删和压缩时完全不同的两种技术,解决不同的问题. 重删:就是说有很多分相同的数据,我只存储其中一份,其他的重复数据块我保留一个地址引用到这个唯一存储的块即可. 压缩:将一个大字符串中的子串用一个很简短的数字来标记,然后检索该字

浅谈Ceph纠删码

目  录第1章 引言 1.1 文档说明 1.2 参考文档 第2章 纠删码概念和原理 2.1 概念 2.2 原理 第3章 CEPH纠删码介绍 3.1 CEPH纠删码用途 3.2 CEPH纠删码库 3.3 CEPH纠删码数据存储 3.3.1 编码块读写 3.3.2 间断全写 3.4 使用范围 3.4.1 冷数据 3.4.2 廉价多数据中心存储 第4章 CEPH纠删码实例 4.1 数据读写 4.2 纠删码池不支持部分功能 4.3 纠删码PROFILE 4.4 CECHE TIER弥补ERASURE的缺

浅谈JS重绘与回流

在说浏览器渲染页面之前,我们需要先了解两个点,一个叫 浏览器解析 URL,另一个就是本章节将涉及的 重绘与回流: 重绘(repaint):当元素样式的改变不影响布局时,浏览器将使用重绘对元素进行更新,此时由于只需要 UI 层面的重新像素绘制,因此损耗较少. 常见的重绘操作有: 改变元素颜色 改变元素背景色 more …… 回流(reflow):又叫重排(layout).当元素的尺寸.结构或者触发某些属性时,浏览器会重新渲染页面,称为回流.此时,浏览器需要重新经过计算,计算后还需要重新页面布局,因

浅谈可重入函数与不可重入函数

在实时系统的设计中,经常会出现多个任务调用同一个函数的情况.如果有一个函数不幸被设计成为这样:那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果.这样的函数是不安全的函数,也叫不可重入函数. 相反,肯定有一个安全的函数,这个安全的函数又叫可重入函数.那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错. 一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执

浅谈IM软件怎样建立安全socket连接、登录

----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------------------------------------------------使用状态机来保持在线状态 [点击]                      拼图算法,将零碎小图,整理到一张大图上[点击]登录导航 [点击]                                          

浅谈密码存储安全

前言 用户信息泄露事件层出不穷,百度或谷歌输入"密码泄露",搜出来的泄密门更是让人目瞪口呆:从小公司到大公司,从明文存储到普通的哈希加密.作为一个IT从业者,我深刻感受到"得用户者得天下",尤其在互联网+盛行的趋势下.密码存储作为软件服务系统基础架构中不可缺少的一部分,越来越多的受到开发者的重视.对于一个服务,如果信息安全部分出问题,我想没有必要进一步去做用户体验的提升,性能的优化.进而也不可能获取大用户的青睐.还是那句话:出来混,迟早要还的. 本人并非密码学出生,

浅谈压缩感知(二十四):压缩感知重构算法之子空间追踪(SP)

主要内容: SP的算法流程 SP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 SP与CoSaMP的性能比较 一.SP的算法流程 压缩采样匹配追踪(CoSaMP)与子空间追踪(SP)几乎完全一样,因此算法流程也基本一致. SP与CoSaMP主要区别在于"Ineach iteration, in the SP algorithm, only K new candidates are added, while theCoSAMP algorithm adds 2K

浅谈MySQL存储引擎-InnoDB&amp;MyISAM

存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见的InnoDB和MyISAM两种存储引擎进行讨论.本文中关于数据存储形式和索引的可以查看图解MySQL索引 MySQL逻辑架构图: InnoDB存储引擎 InnoDB是默认的事务型存储引擎,也是最重要,使用最广泛的存储引擎.在没有特殊情况下,一般优先使用InnoDB存储引擎. 1??.数据存储形式

如何停止Netapp卷上卡死的重删任务

Netapp的重删(de-duplication)功能可以为存储节省大量的空间.但是有极少数情况下,针对某个卷启动重删(de-duplication)的任务后,该任务可能会卡死在某一个进度百分比.虽然不影响卷的使用,但是改卷的重删功能相当于失效,需要手动干预.手动停止该任务后,下次开始,重删任务还是停滞在上次卡死的进度上.这个时候就需要回滚(undo)重删任务.然后再开始重删任务.停止重删任务netapp::>volume efficiency stop -volume volname进入特权模