現在、ZFS上でProxmox 5.3-7を実行していますが、アイドリングしているdebian仮想マシンはほとんどありません。 RAID 1で2つのSSDPE2MX450G7 NVMEドライブを使用しています。このセットアップを245日実行した後、S.M.A.R.Tの値はひどいものになります。
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
書き込みコマンドを大量に消費しているものをデバッグしようとしましたが、失敗しました。 iotop
は、4MB /秒のスパイクを伴う平均400kB /秒の書き込みを示しています。
私は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
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)
等々。書き込み数を制限する方法はありますか?ご覧のとおり、書き込まれたデータ単位はとんでもないものであり、制限する方法がわからないので行き詰まっています。
実際の書き込みが大幅に増加した理由はいくつかあります。いくつかの基点をマークしましょう:
最初に、ベースラインを設定します。_zpool iostat
_出力から、各ミラーレッグへの継続的な約1.5 MB /秒の書き込みストリームを推測できます。したがって、245日後には、合計で1.5 * 86400 * 245 = 32 TB書き込まれます。
上記の数値は、ZFS recordsize
書き込み増幅と、最初のZILへの書き込みとその後のtxg_commitによるデュアルデータ書き込みの両方をすでに考慮しています(_zfs_immediate_write_sz
_より小さい書き込みの場合)。
上記を与えて、ZFSによって引き起こされる書き込み増幅を減らすには、次のことを行う必要があります。
小さなrecordsize
を設定します(例:16K)。
セット_logbias=throughput
_
_compression=lz4
_を設定します(@poigeの提案に従います)
編集:書き込み増幅をより正確に推定するには、_nvme intel smart-log-add /dev/nvme0
_の出力を表示してください
recordsize
を削減するためにすでに与えられたアドバイスに加えて、LZ4圧縮を使用しない理由はありません(zfs set compression=lz4 …
)もデフォルトなので、サイズがさらに削減されます(場合によっては大幅に削減されます)。
いくつかのアイテム...
これが専用サーバーの場合、プロバイダーは機器の状態に責任を負うのではないですか?
ZFSファイルシステムのシフト値、プールtxg_timeout、およびその他のいくつかのパラメーターを確認することは理にかなっています。