Приветствую многоуважаемые! Осваиваю ZFS. Есть несколько серверов виртуализации KVM где хотелось бы применить силу ZFS в снапшотах, дистанционный incremental send.
Сейчас для тестов имеется следующий сервер: 2x2680v4, 8x32Gb DDR4 Reg, Карта бифуркации 16 на 4 NVMe SSD. В ней на время тестирования два Samsung 970 Evo Plus на 1Tb.
Чистый Debian 11. Из contrib установлена ZFS 2.0.3
Собран пул: зеркало из двух SSD, ashift=12. На глаз производительность не впечатлила. Начал копать. Настройки пула изменены минимально от дефолтовых.
zp_ssd recordsize 16K local
zp_ssd compression off default
zp_ssd atime off local
zp_ssd primarycache metadata local
zp_ssd secondarycache metadata local
zp_ssd sync standard default
В продакшене будет совсем по-другому, сейчас хочется понять «worst case» когда все читается с дисков, без ARC кэша, удачной компрессии.
Немного освоил fio. Начал с тестов на чтение. Обнаружил пренеприятную особенность. ZFS никак не реагирует на параметр iodepth. Зато великолепно реагирует на numjobs.
Набросал такой fio тест:
[global]
filename=/zp_ssd/fio.file
size=1G
time_based
runtime=10
direct=1
buffered=0
ioengine=libaio
numjobs=1 или 16
[SEQ_1M_Q8]
stonewall
rw=read
bs=1M
iodepth=8
[SEQ_1M_Q1]
stonewall
rw=read
bs=1M
iodepth=1
[RND_4K_Q32]
stonewall
rw=randread
bs=4K
iodepth=32
[RND_4K_Q1]
stonewall
rw=randread
bs=4K
iodepth=1
Меняя в этом тесте только один параметр numjobs получаются абсолютно разные результаты в ZFS:
При numjobs=1 все совсем грустно:
- READ: bw=820MiB/s (860MB/s), 820MiB/s-820MiB/s (860MB/s-860MB/s), io=8200MiB (8598MB)
- READ: bw=820MiB/s (860MB/s), 820MiB/s-820MiB/s (860MB/s-860MB/s), io=8205MiB (8604MB)
- READ: bw=24.1MiB/s (25.3MB/s), 24.1MiB/s-24.1MiB/s (25.3MB/s-25.3MB/s), io=241MiB (253MB)
- READ: bw=23.7MiB/s (24.8MB/s), 23.7MiB/s-23.7MiB/s (24.8MB/s-24.8MB/s), io=237MiB (248MB)
При numjobs=16 цифры начинают радовать, но разницы между 1-2 и 2-3 (где меняется iodepth нет):
- READ: bw=8205MiB/s (8603MB/s), 8205MiB/s-8205MiB/s (8603MB/s-8603MB/s), io=80.1GiB (86.1GB)
- READ: bw=9483MiB/s (9944MB/s), 9483MiB/s-9483MiB/s (9944MB/s-9944MB/s), io=92.6GiB (99.5GB)
- READ: bw=385MiB/s (404MB/s), 385MiB/s-385MiB/s (404MB/s-404MB/s), io=3851MiB (4038MB)
- READ: bw=383MiB/s (402MB/s), 383MiB/s-383MiB/s (402MB/s-402MB/s), io=3834MiB (4021MB)
Убиваю пул, форматирую в ext4 один диск. Получаю такие показатели:
При numjobs=1:
- READ: bw=3150MiB/s (3303MB/s), 3150MiB/s-3150MiB/s (3303MB/s-3303MB/s), io=30.8GiB (33.0GB)
- READ: bw=2405MiB/s (2522MB/s), 2405MiB/s-2405MiB/s (2522MB/s-2522MB/s), io=23.5GiB (25.2GB)
- READ: bw=921MiB/s (965MB/s), 921MiB/s-921MiB/s (965MB/s-965MB/s), io=9207MiB (9654MB)
- READ: bw=63.5MiB/s (66.6MB/s), 63.5MiB/s-63.5MiB/s (66.6MB/s-66.6MB/s), io=636MiB (666MB)
При numjobs=16:
- READ: bw=3159MiB/s (3313MB/s), 3159MiB/s-3159MiB/s (3313MB/s-3313MB/s), io=30.0GiB (33.3GB)
- READ: bw=3155MiB/s (3308MB/s), 3155MiB/s-3155MiB/s (3308MB/s-3308MB/s), io=30.8GiB (33.1GB)
- READ: bw=2417MiB/s (2534MB/s), 2417MiB/s-2417MiB/s (2534MB/s-2534MB/s), io=23.6GiB (25.3GB)
- READ: bw=887MiB/s (930MB/s), 887MiB/s-887MiB/s (930MB/s-930MB/s), io=8871MiB (9302MB)
Ext4 прекрасно реагирует и на numjobs и на iodepth.
Прошу помочь.