性能对比|FASS iSCSI vs NVMe/TCP

前 情 回 顾

在上一篇文章《iSCSI vs iSER vs NVMe-TCP vs NVMe-RDMA 》中我们介绍了大道云行FASS全闪分布式存储系统所支持的几种存储协议,现在我们将对此进行一系列的对比,首先是应用最广泛的iSCSI协议和较近较新的NVMe over TCP(缩写为NVMe/TCP)。

在这里插入图片描述

1 测试系统介绍

01

我们使用了一套基于Intel处理器的测试平台,FASS存储系统基于一台双路Xeon Gold 6154处理器的服务器,型号为Intel Server Systems R2208WFTZS,每个处理器具有18个核心(我们的配置关闭了超线程),整机搭配了192GiB DDR4-2666 R-ECC内存,机器架构如下图所示:

(FASS节点服务器硬件架构)

02

FASS存储系统使用的存储为单片Intel Optane SSD DC P4800X,裸容量为750GB,基于PCIe NVMe 3.0 x4界面。Intel Optane SSD DC P4800X是一种基于新型存储介质的固态硬盘,其Optane存储介质是一种相变存储,与当前基于Flash的SSD相比,具有更优异的性能。我们选择它作为FASS系统的存储介质主要是因为其读写性能比较一致,且具有稳定的性能表现。在系统中为FASS设置了64GiB的大页面内存,并配置了一个100GiB容量的厚配置卷作为测试目标。

FASS节点存储
测试客户机基于虚拟化环境,根基是一台配置了四路Intel Xeon Platinum 8180处理器的服务器,每个处理器具备28个核心(测试时超线程打开),整套系统即为4S112C224T(4处理器112核心224线程),搭配了768GiB DDR4-2666 R-ECC内存。虚拟化环境为Windows Server 2022 Datacenter提供的Hyper-V,虚拟机使用了16个vCPU,16GiB内存。

03

测试当中还有一个重要的部件:网卡,我们使用了两块Chelsio T62100-LP-CR以太网卡,具备两个100Gbps端口(QSFP28接口),测试客户机与FASS系统通过直联的方式连接,从而避免其它网络部件的影响。在测试客户机以及FASS系统机器上我们都分别安装了最新的Windows驱动(6.16.1.1)和Linux驱动(3.16.0.1)。测试时基于两端操作系统,使用了最大的Jumbo Frame可能值:9600。

网卡
我们目前使用了Ubuntu 22.04 LTS作为测试虚拟机的操作系统,截至测试时,最新的更新其Linux内核版本为5.15.0-40。相比Ubuntu 20.04,Ubuntu 22.04 LTS可以更好地支持NVMe/TCP,在Ubuntu 20.04上,NVMe/TCP应用起来偶尔会出现一些问题。

操作系统使用的内核也同时内置了Chelsio T62100-LP-CR经过SRIOV技术提供的Virtual Function虚拟网卡的驱动支持,同时Ubuntu 22.04 LTS也携带了流行的fio存储测试工具 的3.28版本。我们配置的FASS系统存储卷为单一链接,不过,Chelsio T62100-LP-CR的SRIOV Virtual Function提供了8个RSS Queue,它们可以显著提高虚拟机内的网络性能。

2 测试结果介绍

01

我们首先测试了最常用的libaio异步引擎的性能,首先是iSCSI的性能图:

在这里插入图片描述

在这里插入图片描述

02

接着是对比的NVMe/TCP性能图:

在这里插入图片描述

在这里插入图片描述
在iSCSI下,4KiB随机读取最高值达到了103.984kIOps,在单fio线程以及32队列深度时达到,同样,4KiB随机写入最高值76.646kIOps也是在单fio线程以及32队列深度时达到。在NVMe/TCP下,4KiB随机读取最高值达到了373.797kIOps,在双fio线程以及256队列深度时达到,同样,4KiB随机写入最高值257.361kIOps也是在双fio线程以及256队列深度时达到。

03

测试可以看出,iSCSI下,多线程fio在具有同样的总队列深度时,性能更低,原因如下图所示:
在这里插入图片描述
Ubuntu 22.04 LTS的iSCSI组件已经很新了,但它仍然具有单进程的限制,同时,多线程fio测试时其实际仅使用了一个队列,因此,多线程fio实际上会降低iSCSI的整体效率,同样地,超过256的队列深度亦会降低效率,因为SCSI协议理论支持队列深度为256。原理上,iSCSI并不意味着单队列,但软件iSCSI实现可能往往如此。

NVMe/TCP则不同,在多线程下会显著提升对应的性能:
在这里插入图片描述

实际上,一共使用了5个NVMe/TCP队列,映射到了5个网卡的RSS Queue上,对应地,就启动了5个kworker线程(以上图的kworker/0:0H+nvme_tcp_wq为首)。值得一提的一点是,NVMe还支持比SCSI更深的队列深度,最高可达64k(65536),因此整体会随着队列深度的增加而提高性能。

04

接下来是4KiB随机读取和随机写入时的延迟性能,首先是iSCSI:

在这里插入图片描述

在这里插入图片描述

接着是NVMe/TCP:

在这里插入图片描述

在这里插入图片描述

4KiB随机读取和随机写入,基于点对点通信,如前所述,iSCSI平均延迟最低可以达到126.79us(读取)和193.47us(写入),而在NVMe/TCP下,最低延迟可以达到66.09us(读取)和186.36us(写入)。写入时存在的一些异常是Chelsio TOE特性导致的。

05

接着是1MiB块大小的连续读取/写入性能,首先是iSCSI:

在这里插入图片描述

接着是NVMe/TCP:

在这里插入图片描述
在iSCSI下,1MiB性能也体现了前面所述的队列深度的限制,读取性能在4队列深度时最佳:2081.13 IOps,写入性能则随着队列深度提高而缓慢攀升,最高达到了2248.88 IOps,亦即意味着2248.88 MiBps(2.196 GiBps),实际上以及逼近Intel Optane SSD DC P4800X的标称限制(官方标称写入就是2200 MBps)。
而在NVMe/TCP下,1MiB读取性能在不同的队列深度均可以维持稳定的水平:约2500 IOps,写入则约为1650 IOps左右。

3

测试总结

测试结果清晰显示,纯软件的iSCSI和NVMe/TCP方案具有显著的性能区别,一方面,NVMe/TCP具有更精简的数据路径(如下图所示),另一方面,NVMe/TCP原生支持更多的队列和更大的队列深度,前者降低了延迟,后者提升了整体的吞吐量。

在这里插入图片描述
NVMe/TCP是为NVMe闪存盘研发的新协议,除了能发挥网卡多队列的优势之外还应用了很多新的Linux Kernel特性,如Zero-Copy等,因此它也对底层的内核版本具有要求——需要主线5.0版本及以上,兼容性方面稍不如是个操作系统就能支持的iSCSI,但随着NVMe固态硬盘越来越普及,NVMe/TCP也将会越来越普及,并逐渐成为iSCSI的替代,对于无法使用RDMA的场景,我们推荐FASS的用户选择NVMe/TCP协议。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值