LINUX.ORG.RU

ZFS Cache с NVMe диском

 , , ,


0

1

Добрый!

На текущий момент пытаюсь сделать ZFS Cache с NVMe диском.

Пытаюсь найти более правильный и оптимальный вариант для конфигурации чтобы достичь так скажем хорошую возможноую скорость.

На данный момент использую такую команду

zpool create -O compression=zstd -O recordsize=1M -O relatime=on -O xattr=sa -o ashift=12 tank /dev/sdX cache /dev/nvmeXn1

Ваши рекомендации по оптимизации? Может что-то упускаю =)

Спасибо!


Ответ на: комментарий от Anoxemian

Да вроде как нет, но нужно ли там указывать в данном случае параметр «zfs_arc_max» или всё оставлять по дефолту?

Ну и чтобы посоветовали, стоит ли использовать флаги которые упомянул, либо всё оставлять по дефолту)

Спасибо!

Marshy
() автор топика
Ответ на: комментарий от Marshy

А, понятно. Смотри, это так не работает, каждый параметр отвечает за итоговую конфигурацию, зависящаю от твоих хотелок и железа, в подавляющих случаях, умолчальные значения корректны. Описание параметров влияющих на конфигурацию приведены в документации. Копипастить рандомные буквы и значения из гугла - идиотизм.

Anoxemian ★★★★★
()
Ответ на: комментарий от Pinkbyte

Как раз собирал информацию =)

Мой сэтап - это 1 NVMe SSD(U.2, Samsung, выделенный и только под кэш на пул) на 512GB + 6 TB HDD.

В конце концов я делал так

zpool create home /dev/sda
zpool add home cache nvme1n1p1
zpool add home log nvme1n1p2
zfs set compression=off home
zfs set atime=off home
 
cat /etc/modprobe.d/zfs.conf
options zfs zfs_arc_min=17179869184
options zfs zfs_arc_max=17179869184
options zfs l2arc_noprefetch=0
options zfs l2arc_feed_again=1
options zfs l2arc_feed_secs=1
options zfs l2arc_feed_min_ms=200
options zfs l2arc_norw=0
options zfs l2arc_write_max=8388608
options zfs l2arc_write_boost=8388608
options zfs l2arc_headroom=2

Далее в тестах, 1 них выгоядит ок(но что-то не доверяю)

fio Disk Speed Tests (Mixed R/W 50/50):
---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 586.66 MB/s (146.6k) | 1.02 GB/s    (16.0k)
Write      | 588.21 MB/s (147.0k) | 1.03 GB/s    (16.0k)
Total      | 1.17 GB/s   (293.7k) | 2.05 GB/s    (32.1k)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 461.87 MB/s    (902) | 841.79 MB/s    (822)
Write      | 486.41 MB/s    (950) | 897.85 MB/s    (876)
Total      | 948.29 MB/s   (1.8k) | 1.73 GB/s     (1.6k)

Далее уже провожу отедльные. Формать команда => результат

fio --name=randrw --ioengine=libaio --direct=1 --bs=4k --iodepth=64 --size=4G --rw=randrw --rwmixread=75 --gtod_reduce=1
   READ: bw=24.8MiB/s (26.0MB/s), 24.8MiB/s-24.8MiB/s (26.0MB/s-26.0MB/s), io=3070MiB (3219MB), run=123839-123839msec
  WRITE: bw=8484KiB/s (8687kB/s), 8484KiB/s-8484KiB/s (8687kB/s-8687kB/s), io=1026MiB (1076MB), run=123839-123839msec

dd if=/dev/zero of=ashift12.bin bs=1M count=10000
10485760000 bytes (10 GB, 9.8 GiB) copied, 47.0316 s, 223 MB/s


dd if=/dev/zero of=/tmp/output bs=8k count=10k; rm -f /tmp/output
83886080 bytes (84 MB, 80 MiB) copied, 0.04125 s, 2.0 GB/s


dd if=/dev/zero of=/tmp/output conv=fdatasync bs=384k count=1k; rm -f /tmp/output
402653184 bytes (403 MB, 384 MiB) copied, 0.307634 s, 1.3 GB/s

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
READ: bw=7474MiB/s (7838MB/s), 7474MiB/s-7474MiB/s (7838MB/s-7838MB/s), io=10.0GiB (10.7GB), run=1370-1370msec

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
WRITE: bw=2567MiB/s (2692MB/s), 2567MiB/s-2567MiB/s (2692MB/s-2692MB/s), io=10.0GiB (10.7GB), run=3989-3989msec


fio --name=randwrite --ioengine=libaio --direct=1 --bs=4k --iodepth=64 --size=4G --rw=randwrite --gtod_reduce=1
WRITE: bw=12.4MiB/s (13.0MB/s), 12.4MiB/s-12.4MiB/s (13.0MB/s-13.0MB/s), io=359MiB (376MB), run=29028-29028msec

Меня смущают некоторые результаты, к примеру последний на запись и «dd if=/dev/zero of=ashift12.bin bs=1M count=10000». Не знаю почему, но получается из-за count скорость уходит совсем низко по сравнению с другими тестами. И ещё первый, на 4к тест, мне кажется должно быть повыше, всё же NVMe. Заметил ещё такую тендецию, что если качаю файл через обычный wget, то первые секунды скорость ок, а потом режится в раза 4(10 Gbit/s канал. С 700 МБ/с уходи на 100 МБ/с).

Marshy
() автор топика
Ответ на: комментарий от Minona

Хранение метаданных для плекса. Скачка и тд и тп. В основе просто лежит 10 Gbit/s канал, нужно сконфигурировать всё сразу правильно и по уму =), очень часто ещё будут файлы передвигаться с основного диска(он нвме), на пул. Не хочется чтобы это занимало вечность, а то файлы не всегда маленькие.

Marshy
() автор топика
Ответ на: комментарий от Marshy

Сверься, что у тебя на самсунге написано: некоторые модели не ashift=12, а ashift=13

UPD. Стриггерился, мимо, не проверяй)

Anoxemian ★★★★★
()
Последнее исправление: Anoxemian (всего исправлений: 1)
Ответ на: комментарий от Anoxemian

UPD: Удалось немного улучшить ситуацию с некоторыми тестами. Теперь сам пул делаю вот так

zpool create -O compression=lz4 -O recordsize=1M -O xattr=sa -o ashift=12 -O atime=off home /dev/sda

Улучшил в принципе этот + перенос самих файлов с NVMe на пул и обратно(теперь занимает порядка 4 секунд на 10 Гб файл)

dd if=/dev/zero of=ashift12.bin bs=1M count=10000
10485760000 bytes (10 GB, 9.8 GiB) copied, 2.7693 s, 3.8 GB/s

Данный тест стал хуже, хотелось бы улучшить:

fio --name=randrw --ioengine=libaio --direct=1 --bs=4k --iodepth=64 --size=4G --rw=randrw --rwmixread=75 --gtod_reduce=1

Может есть предложения, на счёт правильных значений в «/etc/modprobe.d/zfs.conf»

Marshy
() автор топика

Добрый!

Злой!

На данный момент использую такую команду

Один раз использовал и хватит. То что у тебя через -O рулится с помощью zfs set, то что через -ozpool set (но есть r/o, ashift — один из таких).

Ваши рекомендации по оптимизации?

Крутить (не бездумно!) sysctl vfs.zfs.l2arc.*.

mord0d ★★★★★
()
Ответ на: комментарий от Minona

Нет, именно метаданные от плекса, Они много не весят, используются для первой прогрузки видеофайла в плексе. Так называемый кэш(используется rclone+gdrive).

Marshy
() автор топика
Ответ на: комментарий от Marshy

В любом случае, чтобы вы порекомендавали?

Купить четыре 2TB NVMe SSD, сделать пул raid-z на 6TB, все файлы разместить на нём. )))

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)