ZoL+FIO Randwrite nvme bs=8k@32io = 148МБ/с?

Извините за заголовок, но это очень краткое изложение BS, которую я изучаю. Ситуация

Я использую ZoL 2.1.5 (из ppa Джонатонфа) в Ubuntu (пробовал 20.04 и 22.04)

У меня есть следующий диск NVMe

  • Kingston KC2500 1 ТБ (/dev/nvme0n1), отформатированный как 512 (с форматом nvme -l 0)
  • Samsung 983 DCT M.2 960 ГБ (/dev/nvme6n1), отформатированный как 512 с форматом nvme -l 0)

Следующая папка содержит все команды, вот краткий вывод:

RAW-устройство:

      fio -name=rndw8k32 -ioengine=libaio -direct=1 -buffered=0 -invalidate=1 -filesize=30G -numjobs=1 -bs=8k -iodepth=32 -rw=randwrite -filename=/dev/nvme0n1
WRITE: bw=1600MiB/s (1678MB/s), 1600MiB/s-1600MiB/s (1678MB/s-1678MB/s), io=30.0GiB (32.2GB), run=19202-19202msec

fio -name=rndw8k32 -ioengine=libaio -direct=1 -buffered=0 -invalidate=1 -filesize=30G -numjobs=1 -bs=**8k** -iodepth=32 -rw=randwrite -filename=/dev/nvme6n1
WRITE: bw=1180MiB/s (1237MB/s), 1180MiB/s-1180MiB/s (1237MB/s-1237MB/s), io=30.0GiB (32.2GB), run=26031-26031msec

Теперь, чтобы создать полосу на первом диске:

      zpool create -o ashift=9 -O compression=lz4 -O atime=off -O recordsize=64k nvme /dev/nvme0n1
fio -name=rndw8k32 -ioengine=libaio -direct=1 -buffered=0 -invalidate=1 -filesize=30G -numjobs=1 -bs=**8k** -iodepth=32 -rw=**randwrite** -filename=/nvme/temp.tmp
WRITE: bw=147MiB/s (154MB/s), 147MiB/s-147MiB/s (154MB/s-154MB/s), io=30.0GiB (32.2GB), run=209618-209618msec

Хорошо, возможно, виноват размер записи:

      zpool create -o ashift=9 -O compression=lz4 -O atime=off -O recordsize=8k nvme /dev/nvme0n1
fio -name=rndw8k32 -ioengine=libaio -direct=1 -buffered=0 -invalidate=1 -filesize=30G -numjobs=1 -bs=8k -iodepth=32 -rw=randwrite -filename=/nvme/temp.tmp
WRITE: bw=349MiB/s (366MB/s), 349MiB/s-349MiB/s (366MB/s-366MB/s), io=30.0GiB (32.2GB), run=87922-87922msec

Что на самом деле, черт возьми? Такая же картина и на 2-м NVMe. Если я использую Recordsize=64k и fio bs=64k, я получаю нормальную скорость. Если я использую Recordsize=64 и fio bs=8k, я получаю ерундовую скорость. Если я использую Recordsize=8k и fio bs=8k, я получаю ерундовую скорость.

https://pastebin.com/0RH6gLM9

Может быть, проблема в том, что я использую файл и сравниваю файл и устройство? Ну, ext4 дайте мне:

Для блока 8к

      fio -name=rndw8k32 -ioengine=libaio -direct=1 -buffered=0 -invalidate=1 -filesize=30G -numjobs=1 -bs=8k -iodepth=32 -rw=randwrite -filename=/mnt/temp.tmp
WRITE: bw=569MiB/s (597MB/s), 569MiB/s-569MiB/s (597MB/s-597MB/s), io=30.0GiB (32.2GB), run=53989-53989msec

Для блока 64к

      fio -name=rndw8k32 -ioengine=libaio -direct=1 -buffered=0 -invalidate=1 -filesize=30G -numjobs=1 -bs=64k -iodepth=32 -rw=randwrite -filename=/mnt/tmp.tmp
WRITE: bw=2137MiB/s (2241MB/s), 2137MiB/s-2137MiB/s (2241MB/s-2241MB/s), io=30.0GiB (32.2GB), run=14373-14373msec

На всякий случай я также протестировал его после переформатирования NVMe с помощью

      nvme format /dev/nvme0n1 -l 1

и использование ashift=12 bs=8k дает мне:

      zpool create -o ashift=12 -O compression=lz4 -O atime=off -O recordsize=8k nvme /dev/nvme0n1 -f
fio -name=rndw8k32 -ioengine=libaio -direct=1 -buffered=0 -invalidate=1 -filesize=30G -numjobs=1 -bs=8k -iodepth=32 -rw=randwrite -filename=/nvme/temp.tmp
WRITE: bw=192MiB/s (202MB/s), 192MiB/s-192MiB/s (202MB/s-202MB/s), io=30.0GiB (32.2GB), run=159853-159853msec

и использование ashift=12 bs=64k дает мне:

      zpool create -o ashift=12 -O compression=lz4 -O atime=off -O recordsize=64k nvme /dev/nvme0n1 -f
fio -name=rndw8k32 -ioengine=libaio -direct=1 -buffered=0 -invalidate=1 -filesize=30G -numjobs=1 -bs=8k -iodepth=32 -rw=randwrite -filename=/nvme/temp.tmp    
WRITE: bw=495MiB/s (519MB/s), 495MiB/s-495MiB/s (519MB/s-519MB/s), io=30.0GiB (32.2GB), run=62035-62035msec

подробности: https://pastebin.com/GDGgSMmR

Итак, чего мне не хватает в моих тестах? Почему ZFS делает мой nvme НАСТОЛЬКО медленнее? На всякий случай весь NVMe обнуляется перед тестами (как накануне).

0 ответов

Другие вопросы по тегам