概括
我发现 Proxmox VE 7 (Bullseye) 中 ZFS SSD 镜像的 I/O 性能波动很大。我只是个新手,无法独自追踪它。
细节
这在实际任务中表现非常糟糕,因此这不仅仅是人为的基准。但为了帮助诊断,我正在运行:
sysbench fileio --file-test-mode=rndrw run
它从 Proxmox 终端运行“裸机”,没有任何虚拟机处于活动状态。结果差异很大。以下是两个示例:
File operations:
reads/s: 2316.07
writes/s: 1544.08
fsyncs/s: 4949.70
Throughput:
read, MiB/s: 36.19
written, MiB/s: 24.13
General statistics:
total time: 10.0062s
total number of events: 88040
Latency (ms):
min: 0.00
avg: 0.11
max: 35.66
95th percentile: 0.65
sum: 9947.54
Threads fairness:
events (avg/stddev): 88040.0000/0.00
execution time (avg/stddev): 9.9475/0.00
和
File operations:
reads/s: 22.60
writes/s: 15.07
fsyncs/s: 56.98
Throughput:
read, MiB/s: 0.35
written, MiB/s: 0.24
General statistics:
total time: 10.6162s
total number of events: 877
Latency (ms):
min: 0.00
avg: 11.43
max: 340.62
95th percentile: 77.19
sum: 10020.19
Threads fairness:
events (avg/stddev): 877.0000/0.00
execution time (avg/stddev): 10.0202/0.00
如您所见,事件总数出现了 10,000 倍的波动,延迟也大幅增加。这些波动并不是“一次性的”。它会在这些极端情况之间不断波动。
我已尽最大努力缩小简单硬件问题的范围。两个 SSD 都是全新的,smartctl 中所有 100 都已设置。我已更换 SATA 电缆。我已在镜像降级的情况下运行它,以尝试隔离单个驱动器问题。我已将驱动器移至单独的 SATA 控制器。没有任何结果能给我不同的结果。
我的第二台服务器配置方式类似,但镜像中装有较旧(且不匹配)的 SSD。没有看到此问题。不过,服务器硬件不同。不良结果来自下面描述的系统。看似“正常”的结果来自一台装有 E3-1275v2 的旧改装 PC。
我希望得到一些提示来帮助诊断这个问题。问题似乎出在延迟上。这是什么原因造成的?我接下来应该采取什么措施?
提前致谢!
系统 (如果有帮助的话)
- 主板:Supermicro X9DRi-F
- CPU:双 Xeon E5-2650 v2
- 内存:128 GB(8 x 16 GB)
- SATA 控制器:板载 SATA 3(单独的 SATA 2 也经过测试)
- SSD:2x 1GB TeamGroup SATA(是的,便宜,但应该没问题)
- PCIe 卡:
- Mellanox MCX312B
- LSI SAS9207-8i(HBA 连接到 8 个未安装的磁盘...传递到 VM)
- Nvidia GTX 750(传递至虚拟机)
答案1
昨天,我的新设置也发生了类似的事情:Intel 11500 上的 Proxmox VE 7,配备 32 GB RAM 和 2x SSD Crucial BX500(这些是消费级),配置为 ZFS 镜像。
我使用 进行了基准测试,dd
将 1GB 的零写入 SSD,运行速度为 5 MB/s(我知道dd
这对于基准测试来说不太好,但仍然......)。在基准测试期间,iostat
利用率为 100%。就我而言,我通过修剪 SSD 解决了性能问题。您可以使用 强制执行zpool trim rpool
,也可以使用 启用自动修剪zpool set autotrim=on rpool
。修剪磁盘后,我再次运行基准测试,它在 7 秒内运行完成(153 MB/s)。
在寻找如何提高性能的过程中,我xattr
按照sa
Proxmox 维基我调整了zfs_arc_min
/zfs_arc_max
和其他内核参数。
我希望这对你也有效。
答案2
您应该在 SSD 上创建 zfs 池,并将 ashift=12 与 SSD 的 4096 个扇区对齐。
检查当前值
zpool get all pool_name | grep ashift
还检查分区是否与 1MB 对齐(2048 个 512 字节扇区)
答案3
zfs 是写时复制 fs。这对廉价的 SSD 来说非常非常糟糕。你可以直接用 Windows 机器通过安全擦除来测试这个 SSD,并进行完整的写入测试(我认为 hd tune 可以做到),你会看到当这些 ssd 用完 SLC \ RAM 时的性能...它会非常差...比如 50-70 mb/s,而不是 sata 的 500+。此外,一些廉价的 ssd 使用系统内存而不是自己的内存模块或 slc 缓存,这对 zfs 来说也不好。我希望这个帮助有类似的问题,可以通过将 ssd 更改为 980 pro 来解决(但尺寸更小,因为成本原因)