Pet*_* R. 5 zfs ssd proxmox nvme
目前我在 ZFS 上运行 Proxmox 5.3-7,几乎没有空闲的 debian 虚拟机。我在 RAID 1 中使用了两个 SSDPE2MX450G7 NVME 驱动器。运行此设置 245 天后,SMART 值很糟糕。
SMART/Health Information (NVMe Log 0x02, NSID 0xffffffff)
Critical Warning: 0x00
Temperature: 27 Celsius
Available Spare: 98%
Available Spare Threshold: 10%
Percentage Used: 21%
Data Units Read: 29,834,793 [15.2 TB]
Data Units Written: 765,829,644 [392 TB]
Host Read Commands: 341,748,298
Host Write Commands: 8,048,478,631
Controller Busy Time: 1
Power Cycles: 27
Power On Hours: 5,890
Unsafe Shutdowns: 0
Media and Data Integrity Errors: 0
Error Information Log Entries: 0
Run Code Online (Sandbox Code Playgroud)
我试图调试消耗这么多写入命令的内容,但我失败了。iotop
显示 400kB/s 的平均写入速度和 4MB/s 的峰值。
我试过运行 zpool iostat,它看起来也不错。
zpool iostat rpool 60
capacity operations bandwidth
pool alloc free read write read write
rpool 342G 74.3G 0 91 10.0K 1.95M
rpool 342G 74.3G 0 90 7.80K 1.95M
rpool 342G 74.3G 0 107 7.60K 2.91M
rpool 342G 74.3G 0 85 22.1K 2.15M
rpool 342G 74.3G 0 92 8.47K 2.16M
rpool 342G 74.3G 0 90 6.67K 1.71M
Run Code Online (Sandbox Code Playgroud)
我决定去看看到写入呼应1
成/proc/sys/vm/block_dump
,展望/var/log/syslog
。结果如下:
Jan 25 16:56:19 proxmox kernel: [505463.283056] z_wr_int_2(438): WRITE block 310505368 on nvme0n1p2 (16 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283058] z_wr_int_0(436): WRITE block 575539312 on nvme1n1p2 (16 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283075] z_wr_int_1(437): WRITE block 315902632 on nvme0n1p2 (32 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283096] z_wr_int_4(562): WRITE block 460141312 on nvme0n1p2 (8 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283108] z_wr_int_4(562): WRITE block 460141328 on nvme0n1p2 (16 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283271] z_null_iss(418): WRITE block 440 on nvme1n1p2 (8 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283315] z_null_iss(418): WRITE block 952 on nvme1n1p2 (8 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283348] z_null_iss(418): WRITE block 878030264 on nvme1n1p2 (8 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283378] z_null_iss(418): WRITE block 878030776 on nvme1n1p2 (8 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283409] z_null_iss(418): WRITE block 440 on nvme0n1p2 (8 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283442] z_null_iss(418): WRITE block 952 on nvme0n1p2 (8 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283472] z_null_iss(418): WRITE block 878030264 on nvme0n1p2 (8 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.283502] z_null_iss(418): WRITE block 878030776 on nvme0n1p2 (8 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.289562] z_wr_iss(434): WRITE block 460808488 on nvme1n1p2 (24 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.289572] z_wr_iss(434): WRITE block 460808488 on nvme0n1p2 (24 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.457366] z_wr_iss(430): WRITE block 460808744 on nvme1n1p2 (24 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.457382] z_wr_iss(430): WRITE block 460808744 on nvme0n1p2 (24 sectors)
Jan 25 16:56:19 proxmox kernel: [505463.459003] z_wr_iss(431): WRITE block 460809000 on nvme1n1p2 (24 sectors)
Run Code Online (Sandbox Code Playgroud)
等等。有没有办法限制写入次数?正如您所看到的,写入的数据单元令人发指,我被卡住了,因为我不知道如何限制它。
您的真实写入被夸大的原因有多种。让我们标记一些基点:
首先,让我们设置一个基线:从您的zpool iostat
输出中,我们可以推断出每个镜像支路的连续约 1.5 MB/s 写入流。因此,在 245 天内,它总共写入 1.5*86400*245 = 32 TB;
recordsize
由于首先写入 ZIL,然后在 txg_commit(写入小于zfs_immediate_write_sz
),上述数字已经考虑了 ZFS写入放大和双数据写入。
给出上述内容,为了减少 ZFS 引起的写入放大,您应该:
设置小recordsize
(即:16K);
放 logbias=throughput
设置compression=lz4
(如@poige 所建议)
编辑:为了更正确地估计写放大,请显示输出 nvme intel smart-log-add /dev/nvme0
除了已经给出的减少建议recordsize
- 没有理由不使用 LZ4 压缩 ( zfs set compression=lz4 …
) 以及默认情况下,从而进一步减少大小(有时非常显着)。
归档时间: |
|
查看次数: |
3673 次 |
最近记录: |