NVMe在气象大数据分布式存储中的研究与应用

2021-12-11 12:59陈旭辉
气象水文海洋仪器 2021年4期
关键词:条带线程内核

陈旭辉,刘 洋,高 鹏,徐 娟

(甘肃省气象信息与技术装备保障中心,兰州 730020)

0 引言

气象部门在长期的气象探测、气象服务中积累了大量的全球气象监测及气象分析产品数据。近年来,随着物联网技术、自动化气象探测技术、气象应用技术的发展,气象数据的种类越来越多[1],监测数据的时空密度也越来越高,数据容量快速增长,以省级气象部门为例,每天接收的数据约500 G。气象数据具有典型的大数据特征,比如规模大、种类多、生成处理获取速度快、价值大但密度低、可信赖度高,其核心作用在于预测[2,3]。关于气象大数据的属性,沈文海、熊安元等进行过详细分析。2009年气象部门建立了全国气象信息共享系统[4-6],实现了全球气象资料的收集、处理、存储和共享,但该系统采用了传统的集中存储架构,随着数据增长,扩展性和存储性能已经无法满足数据快速处理的需求。

沈文海认为以分布式计算和存储为主的分布式技术是大数据不可或缺的核心技术,气象部门应该建立以分布式技术和弹性计算为核心的大数据业务平台[7]。分布式存储是大数据需求驱动下出现的一种存储技术[8,9],其安全可靠,扩展性强,并发性能好,特别适用于大数据处理环境[10]。NVMe(Non-Volatile Memory Express)全称非易失性存储器标准,是固态硬盘(SSD)的一种规范,NVMe规范采用了四通道PCI-E,PCI-E3.0的速度高达32 Gbps,是传统AHCI(Advanced Host Controller Interface,高级主制接口)协议SSD的5倍多。NVMe盘具有高带宽、高IOPS(Input/Output Per Second,每秒的读写次数)、低延迟、低功耗的特点,特别适合数据中心使用。

但是NVMe固态盘存在不支持主流的硬件RAID、使用寿命有限制、价格昂贵等缺点。因此NVMe盘在数据中心环境中使用数量比AHCI协议固态盘少,但随着应用系统的支持、闪存颗粒技术的发展和NVMe协议的逐步完善,数据中心存储向NVMe过渡是必然趋势。

VROC(Virtual RAID on CPU)是Intel公司针对NVMe盘推出的软件RAID技术,支持第三方NVMe固态盘,可以通过BIOS将多个NVMe盘组建成虚拟存储设备,为用户提供不同级别的RAID。

2019年中国气象局启动了气象大数据云平台(天擎)的建设,该系统使用了先进的大数据技术,构建了“数算一体”的气象大数据云平台,在存储方面采用了弹性可扩展的分布式架构,有效提升了存储系统的性能。甘肃省气象局大数据云平台采用了VROC技术,使用NVMe固态盘搭建了虚谷分布式数据库环境,为结构化气象数据提供高速存储。文章测试并分析了NVMe盘在不同场景下的性能,旨在对NVMe在数据中心的使用提出非常有价值的建议。

1 NVMe性能测试方案

1.1 测试环境

此次测试使用甘肃省气象局大数据平台采购的H3C服务器。

1.2 测试内容

为了对NVMe固态盘及VROC RAID性能进行测试,文章设计了如下测试方案。

1.2.1 单盘性能测试

采用128线程同步方式进行顺序读、顺序写、随机读、随机写测试,数据块采用4 K、8 K、16 K、32 K、64 K、128 K、256 K、512 K、1024 K、2048 K共10种。目的是验证NVMe单盘性能与标称值之间的差异。

1.2.2 VROC测试

从3个方面对Intel VROC进行测试:1)RAID0和RAID5性能比较测试。采用与单盘测试相同的方法,对RAID0和RAID5进行测试,条带(chunk size)大小均采用Intel缺省的128 K。2)不同条带对RAID0性能影响测试。用VROC支持的4 K、8 K、16 K、32 K、64 K、128 K 6种条带创建RAID0,采用章节1.2.1中方法进行测试。3)多线程多队列深度顺序读测试。采用fio异步方式,线程数和队列深度均为1、2、4、8、16、32、64、128、256、512、1024、2048,进行144次组合测试。

1.2.3 不同文件系统测试

将RAID0(128K条带)格式化为EXT3、EXT4、XFS,分别采用1.2.1中方法进行测试,比较不同文件系统对NVMe固态盘的影响。

1.2.4 不同IO schedulers调度策略测试

高版本Linux内核采用多队列IO调度器,redat7.6内核为3.10,只支持mq_deadline、kyber两种多队列调度方式。对NVMe RAID0盘分别使用mq_deadline、kyber、none调度器进行测试,分析不同调度器对NVMe盘性能的影响。

1.2.5 不同Linux内核测试

NVMe设备是比较新的设备,高版本的linux内核修复了NVMe方面的一些问题,文章采用3.10.0-862.el7.x86_64(reahat7.6缺省内核,简称3.10内核)、5.4.90-1.el7.elrepo.x86_64(redhat官方发布的最新lt版内核,简称5.4内核)两个内核在同一台机器上进行顺序读压力测试和不同数据块下读写测试。

1.3 测试数据处理

1.3.1 fio测试数据处理

为了保证fio结果的可靠性,以连续3次带宽距平百分率绝对值全部小于10%(平均值采用连续3次的滑动平均值)作为磁盘进入稳定态的标准,从进入稳定态的3次测试数据中选择带宽最大的一次作为最终测试结果。

1.3.2 RAID加速比及加速效率计算

为了表示RAID的加速性能,文章提出实测加速比、理论加速比、加速效率3个概念。实测加速比表示某一指标的RAID实测值除以单盘实测值,用S(L,C,B)表示,S(L,C,B)=RAID实测值/单盘实测值,下标L表示某种RAID级别,C表示对应的条带,B为测试数据块大小。理论加速比指每种RAID技术的理论加速比,用T(L,C,B)表示,采用Intel提供的方法进行计算,计算方法如表1所示,表中N表示RAID组磁盘的个数。

加速效率表示某一RAID实测加速比与理论加速比的比值,用E(L,C,B)表示,E(L,C,B)=S(L,C,B)/T(L,C,B),该值最大值为1,值越大,表示RAID加速性能越高,反之,说明该RAID加速性能越差。

表1 RAID读写理论IOPS计算方法

2 测试结果及分析

2.1 单盘测试结果分析

通过分析P4610的单盘读写性能测试结果得出,4 K顺序读带宽略低于标称值,顺序写带宽与标称值接近,随机读IOPS在4 K时高于标称值,在4 K、8 K时低于标称值,性能与标称值基本符合。

延迟方面,P4610读标称值为77 μs、写为18 μs,采用FIO 128线程,同步方式测试得到平均读延时为260 μs,最小23 μs,平均写延时为110 μs,最小10 μs,基本符合预期。

2.2 VROC测试

2.2.1 RAID5与RAID0测试结果分析

通过分析VROC RAID0和RAID5对不同数据块顺序读带宽测试结果可知,RAID5和RAID0读的性能比较接近,实测加速比在1.97~5.77,加速效率在0.4以上。RAID5和RAID0在128 K和256 K时读性能最佳。

分析RAID0和RAID5对不同数据块随机写IOPS测试结果可见,RAID5随机写性能非常差,随机写IOPS低于单盘的20%,RAID加速效率不足13%,RAID0写性能比RAID5高很多,可以达到单盘的2.6~4.6倍,RAID加速效率除4 K外都达到86%以上。RAID5性能很低这一结论与Brian Beeler在“Intel Virtual RAID on CPU (VROC) Review”中提到的测试结论基本一致。

2.2.2 VROC RAID0不同条带大小下加速效率

通过对比分析不同条带RAID0顺序读测试结果可知,不同条带对RAID0读性能影响不明显,在数据包>256 K时性能有所下降。

分析随机写IOPS方面测试结果表明,RAID0加速效率比较稳定,除了4 K小包外,其他加速效率均达到0.8以上,说明RAID0写加速效果较好。

分析RAID0随机写与单盘随机写CPU负载差,当RAID0条带采用4 K时,CPU占用率都比较高,比单盘高出15百分点;当用4 K小包测试时,所有的RAID条带CPU占用率比单盘高约41百分点;除了4 K条带外,其他条带下当数据包增大时,RAID0 CPU占用率呈明显下降趋势。

2.2.3 RAID0不同队列深度及线程对性能影响分析

图1为多队列多线程顺序读带宽分布图,该图表明线程对带宽的贡献更大,以Q1(队列深度为1,下同)为例,线程增加到1024时,带宽达到9.5 GMB/s,但T1(线程为1,下同)下,队列深度为1024时,带宽只有1.5 GMB/s。带宽在Q128T64时接近最大值,达到12,238 MB/s,Q128为本机最理想的队列深度,可以让磁盘快速进入满负载工作状态,又能获得较高的带宽,队列深度大于128时测试数据基本与Q128相同;当Q×T≤8时,Q1T1的带宽明显高于其他组合,大约是单盘标称值的10%,与Q1T8或Q8T1的带宽接近,这对于单队列单线程任务的场景比较有利;当队列深度≥256且线程数>512时,带宽出现“虚增”现象,测试值超过了最大理论值,因此文章分析时只使用了Q1024、T1024以下的测试数据。

图1 异步顺序读带宽

根据主机CPU负载的测试结果显示,当队列深度≥64,并且测试线程数<64时,主机CPU负载较高,达到90%以上,但当线程数超过64时,主机CPU负载明显下降。

由磁盘利用率测试结果可知,当增加队列深度或增加线程数时,磁盘利用率提高,当线程数×队列深度≥64时,除了T1、T2外,磁盘利用率接近100%,表明磁盘已进入负载饱和区。

2.3 不同文件系统测试结果分析

用某种文件系统下测试数据除以裸盘的测试数据得到文件系统加速比,从NVMe RAID0 EXT3、EXT4和XFS文件系统的测试结果可知:1)EXT3、EXT4的读写性能比较接近;2) XFS的读写性能均高于EXT文件系统,尤其是写操作。

2.4 不同IO调度策略测试结果分析

根据NVMe RAID0在mq_deadline、kyber、none 3种调度器下的顺序读带宽测试结果可知,当线程数≤8时,三者性能差别不大,随着线程数的增加,三者出现了明显差异,当线程≥32时,none调度器的性能最佳,kyber次之,mq_deadline最差。

2.5 不同Linux内核对NVMe盘性能影响分析

图1是采用2.2.3中的方法在linux 5.4内核测试得到的结果,1)5.4内核在更少的线程下,可以让NVMe磁盘发挥出更好的性能。图1中磁盘带宽随线程增长较快。2)5.4内核在处理巨量任务(队列深度≥256且线程数≥512时)时性能比3.10内核更有优势。图1中,在处理巨量任务时,带宽最高值收敛在理论带宽附近。

采用2.1中方法在linux 5.4内核测试得到:1)两个内核下XFS文件系统顺序读性能接近,均优于EXT4文件系统,3.10内核EXT4文件系统顺序读性能最差;2)当数据包<256 K时,5.4内核随机写IOPS远高于3.10内核,两种内核下EXT4文件系统写的性能基本相同。

通过测试可以发现linux高版本内核对于NVMe盘的支持较好,让NVMe在较少的CPU下可以发挥出较高的性能,同时高版本内核下XFS文件系统在处理小数据包时随机写性能方面高于低版本,以4 K为例,5.4内核IOPS是3.10内核的5倍。

3 结束语

为了验证NVMe固态盘在不同场景下的性能,文章使用fio测试工具从多个方面对NVMe固态盘进行了测试,得出如下结论:

1)VROC RAID5写性能损耗很大,不适合单机需要RAID5做数据保护的应用场景,VROC RAID0性能表现出色,非常适合建设分布式存储;

2)XFS文件系统是VROC软件RAID最佳的选择,该文件系统可以充分发挥NVMe盘性能;

3)NVMe固态盘在none调度器下性能表现更出色;

4)5.0版本以上的Linux内核让NVMe固态盘在较少的CPU下发挥出较高的性能;

5)NVMe盘只有在多队列、多线程应用下优势才能发挥出来,在单线程单队列应用下,性能只有单盘性能的10%;

6)文章提出的RAID加速效率指标可以比较客观地评估RAID的性能。

猜你喜欢
条带线程内核
文本图像条带污染去除的0稀疏模型与算法
多内核操作系统综述①
水驱油藏高含水期耗水条带表征指标及分级方法
受灾区域卫星遥感监测的条带分解方法研究
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
强化『高新』内核 打造农业『硅谷』
巧用废旧条幅辅助“蹲踞式起跑”教学
活化非遗文化 承启设计内核
微软发布新Edge浏览器预览版下载换装Chrome内核