专栏名称: 企业存储技术
企业存储、服务器、SSD、灾备等领域技术分享,交流 | @唐僧_huangliang (新浪微博 )
目录
相关文章推荐
51好读  ›  专栏  ›  企业存储技术

一次无需调优的测试:SMT多线程对存储服务器IOPS的贡献

企业存储技术  · 公众号  ·  · 2025-01-26 18:00

正文

在《 服务器NVMe 调优指南:4900 万IOPS 、340GB/s 带宽 (24x SSD) 》一文中,我是以编译为主,并未加入自己较多的评论。因为在整理那份资料时,我大约有几年时间没深入测试过企业级 NVMe SSD 多盘服务器的性能。

最近一段时间,正好赶上手头有合适的设备,我就补充进行了一些测试验证。今天给大家分享点心得体会。

就是上面提到的文章,大家还记得测试服务器配置吗?—— CPU 2 128 核的第五代 AMD EPYC ,给每个 SSD 分配了 8 个核心用于测试。整体上就是用 192 核跑出了 4900 IOPS 平均每核心贡献 25 万多 IOPS 。不过正如上图,加到 24 块盘时并未显出遇到瓶颈,也就是说这 192 CPU 核心很可能 没有跑满 ,如果继续增加 SSD 或者提高单盘性能,应该还有潜力跑出更高的 IOPS 数字,毕竟一共有 256 个核心呢。

另外,上述测试尽管进行了一些调优,但还是使用传统基于中断模式的 Linux 内核 I/O 协议栈 libaio ,并没有用到 SDPK io_uring 这些“黑科技“。

而在上面的短视频《 6500 万IOPS 、310GB/s 带宽:软RAID 用了什么黑科技? 》中,大家可以看到 2 64 AMD EPYC 9534 CPU 利用率只有 50% 左右。也就是说,在用户态 polling (轮询)的 SPDK 存储引擎下,平均 每个 CPU 核心可以处理超过 100 IOPS (这个效率我并不吃惊,因为在下面列出第一个链接里早就测到过),并且那个 Demo 里同时还跑着 RAID 处理负载呢。

扩展阅读:《 SPDK 实战、QoS 延时验证:Intel Optane P4800X 评测(5)

Linux C 性能优化实战(基于SPDK框架)

SPDK+NVMe SSD对接Virtio支撑红包场景性能

注:如果使用 SPDK CPU 资源最好也要准备够,一个是要面对高性能的 NVMe SSD ,另外轮询状态下即使没 I/O 访问 CPU 核也会 100% 占满。

SPDK libaio 效率两相对比之后,就留下了一个问题或者说选择:像 中断合并( Interrupt Coalescing )、 SPDK io_uring 这些办法都可以提高 CPU 的存储 I/O 处理能力,而在具体应用中又会有各自的限制 (后续我再撰文解释)。那么在每一款存储服务器 / CPU+SSD 的配置中,用 libaio 先跑出的你 baseline (基线性能) 也是一个重要的数值——利用这个可以初步分析性能瓶颈,并为下一步加入 RAID 等数据保护机制后的测试做好准备。

最简单的调优,就是“不需要调优”

上图是我在一台 64 核单路服务器上做的测试, NVMe SSD 16 PCIe 4.0 接口的——比当前最快的 Gen5 盘要慢一些。

这款 SSD 标称的最大随机读 IOPS 110 万。我一开始 没做任何调优 ,保持默认 BIOS 设置在 Ubuntu 24.04 下就开始测了。随着我把测试的盘数从 1-2-4-8-16 这样增加, fio IOPS 结果几乎就是线性提高。只是用 libaio 最平常的测试, 16 块盘跑到 1700 多万 IOPS

估算一下,平均 每个 CPU 核心贡献了 27 万多 IOPS 。请读者朋友不要直接与前文中的数据对比,因为每个平台部署的软件版本等环境不同,并且我也说了第 5 EPYC 那个“ 25 万”的 CPU 核心并未跑满。

担心 CPU 核心不够? SMT 多线程来助力

前面的测试看起来一帆风顺,但其实我并不是刚开始测完 SSD 单盘时就那么有信心。

参考下面图表,在使用 libaio 时(不带任何花招),每个 CPU 核心能处理的 I/O 中断数是有限的。蓝色柱形是直接用 numjobs 参数增加测试线程——此时会自动调用多个物理核心,我按照习惯也是从 1-2-4-8 线程这样增加( 注意了,其实 8 线程时对应的核心并未跑满 )。达到 110 IOPS 时我就在想,服务器上有 16 NVMe SSD ,而我的 CPU 只是一颗 64 核,如果给每个 SSD 都专门分配 8 个核心用,做极限 IOPS 压测是不够的?

但前面的测试结果大家也看到了,我直接在测试中加入更多 SSD CPU 也基本没影响到 IOPS 的线性增加。这时想起《 服务器NVMe 调优指南 》一文中关于同步多线程( SMT )的描述,我又做了一些验证测试,如下图中的橙色柱形:

在上面这个单盘测试中,当我把测试线程( thread ,对应 fio 中的 numjobs )从 1 加到 2 时,橙色结果是 特意把 2 numjobs 绑定到 1 CPU 核心对应的 2 SMT 线程上 (具体方法可参考《 NVMe 调优指南 》一文)。以此类推,橙色部分 Thread 4 是绑定到 2 CPU 核的 4 个线程; Thread 8 是绑定到 4 个核的 8 个线程。

numjobs 1 增加到 2 时,我们看到单纯靠 SMT 多线程的一对逻辑核心支撑 2 numjobs IOPS 提高了 64% ,此时相当于用 1 CPU 核心能处理 32 IOPS 。当然相比之下,还是用 2 个独立硬件核心跑的性能更高。但当 numjobs 加到 8 时,这款 NVMe SSD 的随机读 IOPS 都能跑到最大值 ,此时 8 核与 4 /8 线程 的表现就一样了(后者利用率更高)。

既然 4 核有能力支撑 1 SSD ,所以 64 +16 SSD 跑到 1700 IOPS 没有问题。而在实际测试中,我 并不需要特别进行绑核等专门设置 ,每块盘直接使用 numjobs=8 参数,操作系统和硬件就能自动把资源调配好。

至少在我测试观察的部分,包括随机读 / IOPS ,顺序读 / 写带宽,在 BIOS 默认的 NPS=1 NUMA Node per Socket )设置下, 没做任何调优就能测出理想的存储性能 。就像我在 AMD EPYC 9005 服务器BIOS & 工作负载调优指南 一文中曾经写过的:“ 最好的调优,就是不用调优 ”。

此时我还想起了《 NVMe 调优指南 》写的另外一段话:

——“ 第三代及之前的 AMD EPYC 处理器包含首选输入 / 输出( Preferred I/O )和宽松排序( Relaxed Ordering )设置,这些设置有助于优化网络和磁盘 I/O 性能。第五代 AMD EPYC 处理器( 9xx4 型号)及更新型号包含了架构增强功能,默认情况下就能提供最优的网络和磁盘 I/O 性能,无需使用上述任何一种功能特性。

AMD EPYC 8004 & 9004 服务器平台

接下来,我想带大家简单看一下本次测试的服务器平台。

AMD EPYC 8004 系列处理器代号为“ Siena ”,定位比 9004 系列偏低,使用尺寸小一些的 SP6 单路 CPU 插槽 CPU 核心数最多 64 。内存支持 6 DDR5 通道, PCIe Gen5 lane 数量为 96 个。

Zen 4 标准核心与 Zen 4c 高密度核心,二者微架构统一,对软件透明,只是物理实现对于不同核心密度做了优化。 SMT 超线程也是都支持的,这在本文存储 IOPS 测试中也起到了关键的作用。

参考网站 https://www.amd.com/zh-cn/partner/articles/epyc-8004-purpose-built-efficiency.html

4 CCD CPU die )和 1 IOD EPYC 8004 SP6 CPU 上的布局

上图可以看到 AMD EPYC 服务器 CPU 4 代的代号和简要规格,每一代核心都有不小的 IPC 效率提升。目前又增添了去年 10 月发布的 EPYC 9005系列(代号Turin)

代号 Genoa EPYC 9004 估计大家都不陌生了,完整的规格包括 12 通道内存(每 CPU 插槽)和 128 PCI Gen5 Lane 支持,也有更多核心的型号可以选择。 8004 系列相当于一个精简版,它的价值在于平台成本应该较低一些, TDP 功耗也不超过 200W

来自存储厂商对 AMD Genoa 的肯定

由于企业存储产品的研发周期,一款稳定可靠的机型需要做较长时间的测试验证,以及软硬件配合调优工作。所以我们当前看到的主流存储对 AMD EPYC 服务器的采用,还集中在 Genoa 9004 ); 9005 的推出时间还短,不过一个有利的过渡条件是这两代 CPU Socket 即主板硬件可以兼容。

下面给大家列举 2 款业内典型的,高性能全闪存分布式存储系统代表:

首先是 IBM Storage Scale System 6000 ,该产品家族的灵魂,就是广受好评的 并行文件系统 GPFS 。具体到 SSS 6000 4U 机箱硬件,里面容纳个 2 个控制器,每控制器配置了 2 EPYC Genoa 48 CPU

如上图, SSS 6000 是当前 IBM Storage Scale System 产品线中最新、也是最高端的一款硬件节点。关于 Storage Scale/GPFS 产品的性能和功能特点,我希望后续有机会再给大家分享。

上面这款产品的架构图,来自新兴的文件存储厂商 VAST ,这家技术的一个主要特点就是 Shared-Everything 架构。在之前的几年, VAST 一直保持着前端元数据节点( CBox/ 机头) + 后端 NVMe SSD EBOF 机箱( DBox )形态的硬件组合。

扩展阅读:《 NVMe-oF 存储扩展:EBOF 、FBOF 、EBOD 生态详解

而得益于 NVMe-oF 后端网络的成熟, VAST 最近也发布了“超融合”形态的 Ebox 系列,它没有前后端机箱分离,而是采用了 元数据服务器 +SSD 集成在一起的全对称节点 (如果我没理解错,国内的 XSKY 等在架构上应该也类似)。

下表引用自《 VAST Data EBox :重新定义超大规模数据中心的基础设施 》,供大家参考:

类别

规格







请到「今天看啥」查看全文