看傲腾配OpenCAS加速联通沃云业务

article/2025/11/7 20:55:05

傲腾(Optane)是Intel在存储器方面的重量级产品。其采用3D Xpoint存储非易失介质来存储数据。3D Xpoint的一大特点就是时延更加接近SDRAM,而寿命方面大大高于NAND Flash,而容量密度则介于SDRAM和NAND Flash之间。这种特性决定了傲腾天生就是在SDRAM和Flash甚至HDD之间做缓存的好料

目前傲腾的几种形态分别是PCIe接口的闪存盘或闪存卡,和DIMM接口的内存条。

这些时候必须降时延

冬瓜哥曾经在这篇文章中详细介绍了为何前期测试时性能碉爆而上线后却惨不忍睹,也就是时延问题,在交互式I/O场景下是首要考虑因素。所谓交互式I/O,或者说OLTP类I/O模型,其数据块一般较小,而且多为同步I/O,也就是在上一笔I/O没有返回结果之前,不会进行下一笔I/O,此时存储系统的高并发完全派不上用场。除非业务层面是多路I/O流同时进行。

看看下面这张图,大多数桌面类应用无一例外全部都是交互式I/O模型,除了一些后台数据处理类业务比如音视频播放/处理、压缩解压、上传下载等等外。图中显示出,多数桌面类常用程序发出4个及以上数量的并发I/O的概率已经非常低。50%以上的概率都是发出单个同步I/O。

一个存储系统,并发度可以低,这不是问题,因为可以堆多套系统形成分布式架构来轻而易举的提升并发度但是如果一个系统时延很高,那么基本上是很难解决的,因为导致高时延的原因之一就是I/O的软件处理路径过长,处理步骤过于复杂,而不管是砍掉路径上的处理模块,还是优化其中某个慢速步骤的处理速度,其花费的精力都非常巨大,甚至得不偿失。此时当然希望直接从底层硬件层面一劳永逸的解决问题,也就是利用极低时延的存储介质,一砖撂倒。

实际上,最让Intel傲腾引以为傲的地方,应该是它极低的处理延迟。凭借相变存储在物理上天生的远高于NAND Cell的相应速度,即便是上层只发送一笔I/O请求(Queue Depth=1)的时候,其体现出来的IOPS也非常高。

相对而言,NAND Flash只有在高队列深度的情况下才能达到较高的吞吐量,因为NAND Flash延迟较高,为了获得较高IOPS,Flash SSD内部必须采用多通道、多颗粒、多Plane并发方式来获取高吞吐量。而对于原本就低并发的应用而言,傲腾显然可以更加高效的提升业务性能。

目前,采用傲腾介质作为数据缓存的应用案例越来越多,联通沃云与Intel最近搞了一个性能优化联合调优测试。目标业务是联通沃云。联通沃云海量数据检索平台,每日要从各省采集业务数据,单省日均采集记录达到 500 万条,最高峰值达到千万条记录;而后入库对数据做解析和分析后,提供对外的开放大数据服务,受信的第三方通过开放的接口可随时调用大数据平台中的数据。平台采用 ES(Elastic Search)作为分布式搜索引擎,由于云主机 IO 读写性能限制,导致大规模查询和按条件查询响应较慢。ES 大部分场景都是读多写少,因此在对系统做分表和 ES 检索优化的同时,探索提升云主机 IO 读写性能,尤其是减少读请求的延迟是一个非常重要的优化方向。

沃云基于 OpenStack 构建,后端存储和计算节点之间采用ISCSI 协议或者 RBD 相连。这些连接方式兼容性和稳定性非常好,但是延迟通常较高,典型的延迟都是毫秒级。毫秒和微秒对于人类来说没多少区别,但是对于一个计算机系统来说,相差一千倍。比如在下面的模拟测试结果中,平均随机读延迟达到了2毫秒,如果考虑长尾效应,则最差延迟超过了9毫秒。随机写的延迟大致为读的两倍

而如果将应用直接迁移到傲腾介质上,的确是最优的选择,但是鉴于傲腾的容量目前还达不到NAND Flash级别,所以将它用作缓存是一个非常具有性价比的方案,这就必须有一层软件来作为缓存管理层。好马配好鞍,Intel专门为傲腾开发了开源的缓存管理软件——OpenCAS。OpenCAS会在系统中虚拟出一个块设备,应用部署在该层的块设备之上,所有的I/O请求就会被OpenCAS接收并处理,利用高效的缓存算法,发挥出傲腾的性能。

和主流的缓存软件一样,OpenCAS也支持多种缓存模式,包括Write Through,Write Around,Write Back,Write Only,Pass Through。将OpenCAS安装到Compute Node上,并设置为对远程Ceph映射过来的盘,如下图所示。

测试采用了一块750GB的Intel Optane P4800X SSD,标称读写延迟10微秒。

这里对以上采集的数据分别按照随机读,随机写,7:3的随机读写进行分组对比,并形成柱状图使得测试结果更直观易懂。图中 Ceph 指的是直接对 Ceph 远程盘进行测试的结果,无缓存。

测试随机读取时,循环运行 FIO 测试工具 30 次。随着测试的进行,缓存的命中率也从开始几秒时的 1.3%左右逐步提升到最后的 95%-97%。这过程中性能表现也越来越好。这里数据采用 30 次运行里表现最好的数据。以下截图是 Open CAS 软件的缓存命中统计。

从以上的数据对比图可以看出,加了缓存之后,不管是 Write-Through 模式还是 Write-Back 模式,数据读取的延迟都有了非常大的改善。其中平均延迟从2006.2微秒减少到了 52.04 微秒(Write-Through)以及 51.01 微秒(Write-Back),降低了约40倍。P99 延迟数据从 2343 微秒减少到了 67 微秒(Write-Through 和 Write-Back 均是),缩小了约 97%,与此同时,每秒读请求数 IOPS 从 19142.84 提升到了 118046.38 ( Write-Through )以及 124237.81 (Write-Back),提升了约 6 倍

在随机读写 7/3 比例混合的场景中,Write-Through 模式写延迟仅有 12.7%减少(5438.97 VS 4744.42),但读性能表现良好,读请求的平均延迟缩小了约 90%(2030.72 VS 190.39),P99 缩小了 89%(2278 VS 247),有效抑制了读请求的延迟波动率。而Write-Back模式则表现出了卓越的性能优势,读延迟减少了 96.2%(2030.72 VS 76.89),写延迟减少了 98.3%(5438.97 VS 87.68),而每秒读写请求数提升了约 7.6 倍。

使用 Open CAS 结合 Optane™ SSD 来做缓存,在特定场景极大提升了OpenStack系统的读写性能。如果应用场景有数据一致性的要求,那么选择 Write-Through 模式。此时对于读密集的应用能带来很大的性能提升。而如果应用场景是写性能要求高,或者磁盘读写综合性能要求高,但数据一致性要求不高,或者有其他的补偿措施来保证数据一致性的,那么可以选择Write-Back模式,此时不管读还是写的性能都可以得到非常大的提升。联通沃云海量数据检索平台主要为读密集的使用场景,对读请求的延迟比较敏感。本次实验对其调优决策和平台升级有非常大的参考意义。

欢迎关注英特尔商用频道:

扩展阅读

连书都得看国外写的才能做好芯片?这有人不服!

《大话计算机》同款T恤,我要了!!

终于来了!手慢无!《大话计算机》开放预售!

位于计算机内存中的黑洞

《大话计算机》动图一则展示

《大话计算机》序言① by廖恒

《大话计算机》序言② by 包云岗老师

《大话计算机》序言③ by 何万青

《大话计算机》序言④ by 雷迎春

《大话计算机》序言⑤ by 汪利文

《大话计算机》序言⑥ by 张勇

《大话计算机》序言⑦ by @去流浪

  

博主简介:冬瓜哥,《大话计算机》与《大话存储 终极版》、《大话存储 后传》图书作者。多项技术专利发明人。

现任某半导体公司高级资深架构师。

大话计算机          大话存储

长按扫码可关注

嗨,你还在看吗


http://chatgpt.dhexx.cn/article/PKKWwKTR.shtml

相关文章

网红释一刀

释一刀,本名伍永骞,男,布依族。身高1米69,体重:58公斤。毕业于少林寺的一位俗家弟子。 1979年生于贵州。结婚夫人名叫周小艳,是中学的同班同学,比他小两岁半。 2010年,释一刀出差的一个晚上,在夜总会喝酒,巧看见老同学(周,女校花),便一见钟情爱上对方。两人交往一…

拼多多被曝确定五一放假三天,网友:“这也砍一刀?”

眼看着五一马上来临,即将喜提“五天”小长假的消息,让无数打工人欢呼雀跃。 然而,大家的快乐似乎并不相通。 有知情人士在脉脉上爆料,4 月 26 日晚上拼多多内部终于敲定了今年五一的放假时间,然而让员工们感到不尽人…

java 流水_Java之流水号生成器实现

开心一笑 搞笑.png 提出问题 如何使用jAVA生成流水号,同时支持可配置和高并发??? 解决问题 假设你们项目已经整合缓存技术 假如你有一定的Java基础 假如...... 下面的代码实现的是一个支持高并发,可配置,效率高的流水号生成器,…

哈希一刀流——布隆过滤器详解

目录 传统艺能😎背景🤔概念🤔误判控制😋具体实现😋插入😋查找😋删除😋优劣😋使用场景😋 传统艺能😎 小编是双非本科大二菜鸟不赘述,欢…

连米哈游都成了第二,这个一刀999的页游大王把老外吃透了。

自从《 原神 》在 2020 年上线之后,米哈游基本就稳坐出海收入第一的王座。 但是,稳坐榜首的米哈游,却在今年 10 月,被突然冒出的三七互娱一脚踢了下来。 没错,就是那个做出了《 大天使之剑 》、《 传奇霸业 》的页游大…

如何产生一个全局唯一的流水号(附demo)

本文介绍如何使用最简单的方法产生一个全局唯一的流水号,支持集群,性能可靠,并且经过实际的应用 唯一流水号的格式为当前系统时间当前服务器编号并发序列号,长度最短可为17位,每毫秒支持生成多个并且支持集群部署 废话…

记小辉人生中的第一刀

本篇是小辉趴在床上写完的博客,讲的是半个月前“肛裂肛瘘混合痔”手术到术后两周的康复过程以及一些注意事项和提示,给读者们的健康提个醒,欢迎转发给身边正在经历痛苦或者犹豫的朋友。 希望大家都身体健康,永远用不上我下面提到的…

砍一刀免费拿营销玩法解说

大家应该都收到拼多多的砍价链接,小来对拼多多这种扰民是推广方式非常反感,但不得不承认,这个营销方式却是拼多多最有效的营销方式之一。 拼多多最新的财报显示,拼多多2020年活跃买家数为7.884亿,首度超越阿里位居全国…

【leetCode:剑指 Offer】06. 从尾到头打印链表

1.题目描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 2.算法分析 倒序输出,使用栈Stack的数据结构。 先将链表中的元素入栈,然后遍历栈内元素,将元素加入到数组中。 3.代码实现…

流水

这几天怎么过去的 在纸上画一笔 就这么轻松 没和任何人联系 似乎很忙 总是在上课上课上课 从这个教室到那个教室 从这个实验室到那个实验室 嗜睡得厉害 心里很空 很久没有S的消息 有点冷

R语言--readr包读写数据

文章目录 前言一、发现问题二、分析问题三、解决问题四、读写速度总结吐槽 前言 当你使出了浑身解数,read.csv和read.table还是无法读入数据时,或许可以尝试一下readr包中的read_table,read_csv等函数。尝试一下! 我是一个很专一…

R语言入门:读取csv文件及获取统计数值(1)

本次编程尝试使用R语言读取csv文件“filesize.csv”,并根据内容绘制统计图和得出平均数,中位数和方差等简单数据。 csv文件内容1001个数值至少大于1000的小数组成,每行一个,共计1001行 在打开文件之前,我们可能会遇到…

R语言 读取文件

1. R读取txt文件 使用R读取txt文件直接使用read.table()方法进行读取即可,不需要加载额外的包。 read.table("/home/slave/test.txt",headerT,na.strings c("NA"))注意,此处的na.strings c("NA") 的意思是文件中的缺失数…

R从文件中读取数据,输出文件

看了几天的书,终于到这一步了,说实话,用R来做统计,很少有人手动的去输入那些数字,肯定是从别的地方导入的,我们用来处理就可以了,所以到这里才算是真正的入门,前面都是做基础的练手。…

R语言中文件或数据的读写

文章目录 系统数据的读写xlsx文件的读写举例说明具体代码结果如下 csv文件的读写读取csv文件写入csv文件使用readr包读取csv文件使用data.table包读取csv文件 scan函数scan()函数的使用语法参数含义描述实例: 系统数据的读写 save(a,b,file"test.RData")…

掌握R语言文件读取方法

目标 掌握 R语言文件读取方法 学习笔记 utils包内Date Input用法base包内readLines用法stringi包内stri_read_linesxlsx包内Date Input用法readr包内 Read a delimited file 用法 1.utils包内Date Input用法 以read.table为例。 read.table参数详细说明见http://www.360doc…

R语言入门(15)_读取文件(read)

目录 一、read.table() 读取工作路径下的纯文本文件(.txt)(.csv) 1、工作路径的设置 2、head函数——只显示数据前几行 3、read.table()的其他一些参数 二、与read.table相类似的函数 三、read.table()读取网络上的文本文件 三、读取非文本文件 …

使用R读取并查看数据

本篇文章介绍如何使用R读取并查看数据,包含一些最基础的函数使用方法和说明。后面还会陆续介绍数据清洗,匹配和提取等相关的操作。 查看函数帮助 对于新手来说,在使用R时最重要的是了解不同函数的使用方法。很多时候我们都是边用边学的状态&…

R语言如何从外部读取数据到R中

R语言可以从键盘&#xff0c;文本&#xff0c;excel&#xff0c;access&#xff0c;数据库&#xff0c;专业处理软件sas 一、使用键盘的输入 mydata<-data.frame(agenumeric(0),gendercharacter(0),weightnumeric(0)) mydata<-edit(mydata) 二、读入带有分隔符文本格式…