У меня возникли некоторые проблемы с менее ожидаемой пропускной способностью NFS. Изучив несколько вариантов (бесконечный поиск в Google), включая настройку рейда, сетевые интерфейсы и т. Д., Я хотел протестировать базовую настройку, экспортируя ramdisk, установленный на / media / ramdisk, и получая доступ к нему через localhost.
Тесты с RAM-диском показывают ту же картину проблем с производительностью, что и мой экспорт SSD RAID0 NFS, с огромным падением производительности при доступе через NFS, и как SSD-рейд, так и RAM-диск достигают максимума прибл. 13K IOPS при чтении и 4K IOPS при записи.
Сервер:
Ubuntu 18.04, полностью обновленный. ВМ с оперативной памятью 5 ГБ и 8 процессорами. (Главный процессор: Intel (R) Core (TM) i7-4800)
Содержание / etc / exports:
/media/ramdisk *(rw,async,no_subtree_check,fsid=1)
Установлено через:
sudo mount 127.0.0.1:/media/ramdisk /mnt/ramdisk -o async
Вывод команды монтирования:
127.0.0.1:/media/ramdisk on /mnt/ramdisk type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1)
Используйте fio для проверки скорости ramdisk без NFS с помощью следующей команды:
sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test1 --filename=/media/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
Я получил:
read: IOPS=283k, BW=1107MiB/s (1160MB/s)(3070MiB/2774msec)
write: IOPS=94.7k, BW=370MiB/s (388MB/s)(1026MiB/2774msec)
cpu : usr=21.89%, sys=78.07%, ctx=5, majf=0, minf=7
Очень быстро, как и ожидалось
Тестирование через NFS с помощью следующей команды:
sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test2 --filename=/mnt/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
Я получил:
read: IOPS=12.7k, BW=49.6MiB/s (51.0MB/s)(3070MiB/61951msec)
write: IOPS=4239, BW=16.6MiB/s (17.4MB/s)(1026MiB/61951msec)
cpu : usr=5.24%, sys=21.16%, ctx=786004, majf=0, minf=5
Я слежу за системой во время теста, и ни процессор, ни сеть не испытывают особой нагрузки во время теста.
Использование dd непосредственно на ramdisk с:
sudo dd if=/media/ramdisk/test of=/dev/null bs=1M iflag=nocache status=progress
Я получил:
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 0.691044 s, 6.2 GB/s
Проделав то же самое через NFS (/ mnt / ramdisk / test), я получаю:
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 2.58302 s, 1.7 GB/s
Я увеличил RPCNFSDCOUNT до 64
Запустив iperf на localhost, я получаю
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 64.6 GBytes 55.5 Gbits/sec
Таким образом, очевидно, что пропускная способность сети хорошая.
Так что же может сдерживать производительность NFS?
sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test1 --filename=/media/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
О нет :-(, вы используете --iodepth=64
с libaio
ioengine и direct=0
поэтому эта команда, скорее всего, не будет вести себя так, как вы ожидаете! Увидеть предупреждение в fio
справка / руководство о неиспользовании direct=1
когда используешь libaio
ioengine:
libaio
Собственный асинхронный ввод-вывод Linux. Обратите внимание, что Linux может поддерживать поведение в очереди только с небуферизованным вводом-выводом (установите direct = 1 или buffered = 0). Этот движок определяет специфические параметры двигателя. [курсив мой]
так libaio
скорее всего действует так, как будто iodepth=1
... (видеть https://github.com/axboe/fio/issues/512#issuecomment-356604533 для более подробного объяснения)
Так что же может сдерживать производительность NFS?
Боюсь, что созданное вами задание команды fio сдерживает вас - может быть, вам нужно использовать другие параметры и / или другой механизм ввода-вывода?
PS: очень маловероятно, что вы будете использовать достаточно операций ввода-вывода, чтобы --gtod_reduce=1
будет иметь значение для вас ...