Назад | Перейти на главную страницу

медленное чтение в openzfs / Linux через NFSv3 в Debian 10

из-за моего вопроса без ответа: qemu снимок исключить устройство Я решил использовать NFSv3 для виртуальной машины для обработки пользовательских данных. Из-за низкой производительности BTRFS после задач обслуживания я теперь использую zfs Raid1 Version: buster-backports 0.8.3-1 на хосте Debian.

Когда я копирую данные на хост, проблем с производительностью нет.

НО: производительность через NFS запредельно низкая; вначале для записи и чтения со скоростью 10 и 40 МБ / с. После некоторой настройки (я думаю, это была NFS с асинхронным режимом) я получил скорость записи ~ 80 МБ / с. Мне этого достаточно. Чтения пока оставались на уровне 20 МБ / с на устройство.

Есть идеи, что тестировать? Я новичок в zfs и NFS.

Хост: Debian 10
ВМ: Debian 10

NFS: Хост: / exports / ordner 192.168.4.0/24(rw,no_subtree_check)
клиент: .....nfs local_lock=all,vers=3,rw,user,intr,retry=1,async,nodev,auto,nosuid,noexec,retrans=1,noatime,nodiratime

Набор данных ZFS:

Объем с:
.... создать -o ashift = 12 zfs-pool .... зеркало
sync = по умолчанию

zfs set compression=off zfs-pool
zfs set xattr=sa zfs-pool
zfs set dnodesize=auto zfs-pool/vol
zfs set recordsize=1M zfs-pool/vol
zfs set atime=off zfs-pool/vol

zfs-mod-tune:

options zfs zfs_prefetch_disable=1
options zfs_vdev_async_read_max_active=1
options zfs_vdev_sync_read_max_active=128 (also 1 tested)
options zfs_vdev_sync_read_min_active=1

Вы можете дать совет?

Некоторые обновления:

  • Я провожу тест с набором данных как ext4 или xfs -> те же результаты
  • я использую не том, а zpool direct, как nfs share -> те же результаты
  • Я тестирую ganesha как службу nfs -> скорость записи до 30 МБ / с, но после отступления она осталась, поэтому я не думаю, что это была настоящая причина повышения

  • Я изменил свою конфигурацию с сетевого трафика через маршрутизатор на конструкцию, в которой связь между хостом и виртуальной машиной должна осуществляться только в ОЗУ, и протестировать ее с помощью iperf
    -> к моему удивлению, пропускная способность не превышает 60 МБ / с для чтения и записи, хотя процессор в последний раз был на 40%
    -> wtf - как ужасно - только в ОЗУ больше нет - не понимаю почему - это ужасно медленно
    - я не верю, что это типичная производительность реальной системы debian kvm / qemu

    Может у кого-нибудь есть ответ.

  • интересно: я не мог испортить производительность udp сравнением, потому что я получаю только 1 Мбит / с - nfs с udp работает, но не без ошибок с большими данными

Статус: скорости при записи 30МБ / с и чтении 50МБ / с мне хватает, но разочаровывает

Вы можете повысить производительность, если отключите синхронные запросы: zfs set sync=disabled tank/nfs_share.

  • Из zfs страница руководства: disabled отключает синхронные запросы. Транзакции файловой системы фиксируются в стабильном хранилище только периодически. Этот вариант даст максимальную производительность. Однако это очень опасно, поскольку ZFS будет игнорировать требования синхронных транзакций таких приложений, как базы данных или NFS. Администраторы должны использовать эту опцию только тогда, когда осознаются риски.

Имейте в виду, что отключение sync может привести к повреждению данных.

Другой вариант:

  • Используйте SLOG [1] (вторичный журнал) на действительно быстрых и отдельных устройствах, таких как SSD-диски (идеально подходит NVMe, приемлемо SATA).

В ваших тестах я заметил, что максимальное количество активных потоков для асинхронных операций было установлено равным 1. Это слишком мало и, следовательно, может привести к плохой производительности чтения.

Мне нужны некоторые сведения о вашей системе (информация о диске для пула ZFS, системной памяти и ЦП).

Вот предложение, которое вы могли бы использовать и настроить для своей системы. Он отлично работает на моей 12-ядерной системе (на /etc/modprobe.d/zfs.conf):

options zfs zfs_vdev_async_read_max_active=30
options zfs zfs_vdev_async_read_min_active=10
options zfs zfs_vdev_async_write_min_active=30
options zfs zfs_vdev_async_write_max_active=10
options zfs zfs_vdev_scrub_min_active=10
options zfs zfs_vdev_scrub_max_active=20

[1] https://jrs-s.net/2019/05/02/zfs-sync-async-zil-slog/