坑边闲话:在关闭多线程之后,采用本地测试的方式,笔者发现 ZFS 呈现出了惊人的 NAND 直读、直写性能。本文介绍这一发现,但并不尝试分析原因。

最近在跑实验,supervisor 建议我关闭超线程。找了半天 BIOS 没找到 HyperThreading 选项,最后发现 AMD 的超线程不叫 HT, 而是 SMT.

遗憾的是 SMT 的关闭与 performance tuning 的关闭是绑定的,所以 NUMA per socket 就得手动设置,最大一个 CPU 插槽 4 个 NUMA,对应两个 ZEN3 CCD. 毕竟 EPYC 7003 内部就是四组内存控制器,这很合理。

有意思的来了。

我看到核心连线的拓扑图,发现设置了 NPS 之后,CPU 与 NVMe 的关系变得更具体了,说人话就是 NVMe 与 CPU 的亲和性更高了。于是我顺手给这个 ZFS 跑了个分。

  • 服务器:H3C R4950g5 with dual AMD EPYC 7763
  • zpool 包含两个 vdev
    • 第一个是四盘 intel 750 1.2TB MLC raid-z1
    • 另一个是单盘 WD 黑盘 SN750 1TB
  • ZFS 参数:
    • LZ4 压缩
    • 1MB recordsize
    • 开启 direct-io
    • 其余默认

ZFS 常识

由此也可以看出,raidz vdev 的扩容并非是要添加一组一模一样的硬盘。只要能构成一个 data vdev,即可被添加到某个 zpool 里。

结论:这个奇怪的 zfs 阵列,搭配 openzfs 2.3.2 可以做到:

  • NAND 直读速度超过 10GB/s
  • NAND 写入速度超过 5GB/s

图 1. 存储池读取速度

图 2. NUMA node 拓扑结构。

图 3. 关闭 EPYC 芯片的超线程 SMT 功能。