В настоящее время я запускаю Proxmox 5.3-7 на ZFS с несколькими неработающими виртуальными машинами debian. Я использую два диска SSDPE2MX450G7 NVME в массиве RAID 1. После 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
показывает среднее значение записи 400 КБ / с с выбросами 4 МБ / с.
Я пробовал запустить 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)
и так далее. Есть ли способ ограничить количество записей? Как видите, написанные единицы данных возмутительны, и я застрял, потому что у меня нет идей, как их ограничить.
В дополнение к уже данным советам по сокращению recordsize
- нет причин не использовать сжатие LZ4 (zfs set compression=lz4 …
) также по умолчанию, таким образом уменьшая размер еще больше (а иногда и очень значительно).
Несколько предметов ...
Если это арендованный сервер, разве провайдер не несет ответственности за исправность оборудования?
Значения смещения файловой системы ZFS, пул txg_timeout и некоторые другие параметры могут иметь смысл проверить.
Существуют разные причины, по которым ваши настоящие записи были настолько раздутыми. Отметим базовую точку:
Во-первых, позвольте установить базовый уровень: от вашего zpool iostat
вывод, мы можем вывести непрерывный поток записи ~ 1,5 МБ / с на каждую из ветвей зеркала. Таким образом, за 245 дней получается 1,5 * 86400 * 245 = 32 ТБ записанных данных;
число выше уже учитывает как ZFS recordsize
усиление записи и двойная запись данных из-за первой записи в ZIL, затем в txg_commit (для записей меньше zfs_immediate_write_sz
).
С учетом сказанного выше, чтобы уменьшить усиление записи, вызванное ZFS, вам следует:
установить небольшой recordsize
(например: 16 КБ);
устанавливать logbias=throughput
устанавливать compression=lz4
(как предлагает @poige)
РЕДАКТИРОВАТЬ: чтобы более правильно оценить усиление записи, покажите вывод nvme intel smart-log-add /dev/nvme0