添加更多主轴时 ZFS 写入性能不佳

use*_*789 6 linux performance zfs write

我在 Linux 上使用 ZFS 并且遇到一个相当奇怪的症状,当我向系统添加更多磁盘时,每个驱动器的写入速度会降低,从而有效地抵消了额外的主轴以提高顺序写入性能。

磁盘通过 SAS 磁盘架上的 HBA (LSI 9300-8E) 连接到主机

在下面进行测试时,我在 IO Zone iozone -i 0 -s 10000000 -r 1024 -t 10 上运行了以下命令

以下是我的测试结果:

在我的第一次测试中,我创建了一个带有 12 个磁盘的镜像,它显示每个磁盘的预期写入性能约为每秒 100 MB/s。

zpool create -o ashift=12 -f PoolA 镜像 S1_D0 S2_D0 镜像 S1_D1 S2_D1 镜像 
S1_D2 S2_D2 镜像 S1_D3 S2_D3 镜像 S1_D4 S2_D4 镜像 S1_D5 S2_D5

              容量操作带宽
池分配空闲读写读写
---------- ----- ----- ----- ----- ----- -----
池A 3.60G 10.9T 0 5.06K 0 638M
  镜子 612M 1.81T 0 863 0 106M
    S1_D0 - - 0 862 0 106M
    S2_D0 - - 0 943 0 116M
  镜子 617M 1.81T 0 865 0 107M
    S1_D1 - - 0 865 0 107M
    S2_D1 - - 0 939 0 116M
  镜子 613M 1.81T 0 860 0 106M
    S1_D2 - - 0 860 0 106M
    S2_D2 - - 0 948 0 117M
  镜子 611M 1.81T 0 868 0 107M
    S1_D3 - - 0 868 0 107M
    S2_D3 - - 0 1.02K 0 129M
  镜子 617M 1.81T 0 868 0 107M
    S1_D4 - - 0 868 0 107M
    S2_D4 - - 0 939 0 116M
  镜子 616M 1.81T 0 856 0 106M
    S1_D5 - - 0 856 0 106M
    S2_D5 - - 0 939 0 116M
---------- ----- ----- ----- ----- ----- -----

在下一个测试中,我增加了 12 个磁盘,总共 24 个磁盘,我们有效地将每个磁盘的带宽减少了一半。

zpool create -o ashift=12 -f PoolA 镜像 S1_D0 S2_D0 镜像 S1_D1 S2_D1 
镜像 S1_D2 S2_D2 镜像 S1_D3 S2_D3 镜像 S1_D4 S2_D4 
镜像 S1_D5 S2_D5 镜像 S1_D6 S2_D6 镜像 S1_D7 S2_D7 
镜像 S1_D8 S2_D8 镜像 S1_D9 S2_D9 镜像 S1_D10 S2_D10 
镜子 S1_D11 S2_D11

                容量操作带宽
池分配空闲读写读写
----------- ----- ----- ----- ----- ----- -----
池A 65.2M 21.7T 0 4.67K 0 588M
  镜像 6.56M 1.81T 0 399 0 49.0M
    S1_D0 - - 0 399 0 49.0M
    S2_D0 - - 0 513 0 63.1M
  镜像 5.71M 1.81T 0 400 0 48.7M
    S1_D1 - - 0 400 0 48.7M
    S2_D1 - - 0 515 0 62.6M
  镜像 6.03M 1.81T 0 396 0 49.1M
    S1_D2 - - 0 396 0 49.1M
    S2_D2 - - 0 509 0 62.9M
  镜像 5.89M 1.81T 0 394 0 49.0M
    S1_D3 - - 0 394 0 49.0M
    S2_D3 - - 0 412 0 51.3M
  镜像 5.60M 1.81T 0 400 0 49.0M
    S1_D4 - - 0 400 0 49.0M
    S2_D4 - - 0 511 0 62.9M
  镜像 4.65M 1.81T 0 401 0 48.9M
    S1_D5 - - 0 401 0 48.9M
    S2_D5 - - 0 511 0 62.3M
  镜像 5.36M 1.81T 0 397 0 49.2M
    S1_D6 - - 0 397 0 49.2M
    S2_D6 - - 0 506 0 62.5M
  镜像 4.88M 1.81T 0 395 0 49.2M
    S1_D7 - - 0 395 0 49.2M
    S2_D7 - - 0 509 0 63.3M
  镜像 5.01M 1.81T 0 393 0 48.2M
    S1_D8 - - 0 393 0 48.2M
    S2_D8 - - 0 513 0 63.0M
  镜像 5.00M 1.81T 0 399 0 48.7M
    S1_D9 - - 0 399 0 48.7M
    S2_D9 - - 0 513 0 62.5M
  镜像 5.00M 1.81T 0 398 0 49.2M
    S1_D10 - - 0 398 0 49.2M
    S2_D10 - - 0 509 0 62.8M
  镜像 5.55M 1.81T 0 401 0 50.0M
    S1_D11 - - 0 401 0 50.0M
    S2_D11 - - 0 506 0 63.1M
----------- ----- ----- ----- ----- ----- -----

希望有人可以解释为什么添加更多磁盘会有效地降低每个磁盘的性能。

其他要求的信息

硬件总结

服务器

Lenovo ThinkServer RD550,单 10 核 Xeon,256GB 内存,720ix 控制器上 RAID 1 上的操作系统。

服务器 HBA

LSI 9300-8e mpt3sas_cm0:LSISAS3008:FWVersion(12.00.00.00)、ChipRevision(0x02)、BiosVersion(06.00.00.00)

磁盘架

磁盘架是联想 ThinkServer SA120,带有双 SAS 控制器,双电源以冗余方式连接,每个磁盘有 2 条路径。

磁盘架连接

磁盘架通过 0.5 米 SAS 电缆连接,并通过磁盘架以菊花链形式连接,最后通过一个回路返回控制器。

驱动器信息

48 x 2TB SAS 硬盘 Seagate Model # ST2000NM0023 硬盘通过多路径配置,每个硬盘都有冗余路径。

软件概要

操作系统/内核

CentOS 7.3 "uname -a" Linux 4.9.9-1.el7.elrepo.x86_64 #1 SMP Thu Feb 9 11:43:40 EST 2017 x86_64 x86_64 x86_64 GNU/Linux 的输出

ZFS 调优

/etc/modprobe.d/zfs.conf目前是一个空白文件,我在这里没有尝试太多,顺序写入性能似乎应该随着磁盘的增加而增加。

eww*_*ite 0

等待更多信息...

您应该提供以下详细信息:

  • 磁盘的具体品牌/型号/速度/接口。(它们是 SAS?SATA?)
  • 使用的特定外部 JBOD 机柜。
  • 机柜如何连接到服务器。

谁知道?您可能只是超额订购了机柜的 SAS 扩展器,无法通过添加驱动器轴进行扩展。

当然,这里也有一个调整的因素。我们需要查看您对/etc/modprobe.d/zfs.conf.

如果该文件为空,您可能会错过 ZFS 构建中可用的大量可调参数。

您还能解释一下正在使用的操作系统吗?发行版、内核和版本。


只需遵循我的Linux+ZFS HA 指南即可。

您还需要调整您的 zfs.conf:

这是我的:

#options zfs zfs_arc_max=51540000000
options zfs zfs_vdev_scrub_min_active=24
options zfs zfs_vdev_scrub_max_active=64
options zfs zfs_vdev_sync_write_min_active=8
options zfs zfs_vdev_sync_write_max_active=32
options zfs zfs_vdev_sync_read_min_active=8
options zfs zfs_vdev_sync_read_max_active=32
options zfs zfs_vdev_async_read_min_active=8
options zfs zfs_vdev_async_read_max_active=32
options zfs zfs_top_maxinflight=320
options zfs zfs_txg_timeout=15
options zfs zfs_vdev_scheduler=deadline
options zfs zfs_prefetch_disable=0
options zfs l2arc_write_max=8388608
options zfs l2arc_headroom=12
options zfs zfs_dirty_data_max_percent=40
options zfs zfs_vdev_async_write_min_active=8
options zfs zfs_vdev_async_write_max_active=32
options zfs zfs_immediate_write_sz=131072
options zfs zil_slog_limit=536870912
Run Code Online (Sandbox Code Playgroud)