NFS плохая производительность записи

У меня есть две машины, подключенные с 10Gbit Ethernet. Позвольте одному из них быть сервером NFS, и другой будет клиентом NFs.

Тестирование скорости сети по TCP с iperf выставочная пропускная способность ~9.8 Гбит в сек. в обоих направлениях, таким образом, сеть в порядке.

Тестирование производительности диска сервера NFS:

dd if=/dev/zero of=/mnt/test/rnd2 count=1000000

Результат составляет ~150 Мбайт/с, таким образом, диск хорошо работает для записи.

Сервер /etc/exports :

/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)

Клиент монтирует эту долю к, он локален /mnt/test со следующими опциями:

node02:~ # mount | grep nfs
192.168.1.101:/mnt/test on /mnt/test type nfs4 (rw,relatime,sync,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101)

Если я пытаюсь загрузить большой файл (~5Gb) на клиентской машине от доли NFS, я получаю производительность на ~130-140 Мбайт/с, которая является близко к производительности локального диска сервера, таким образом, это удовлетворительно.

Но когда я пробую, действительно загружают большой файл на долю NFS, загрузка запускается на уровне ~1.5 мегабайтов/с, медленно увеличивается на 18-20 мегабайтов/с и прекращает увеличиваться. Иногда доля "зависает" в течение нескольких минут, прежде чем загрузка на самом деле запустится, т.е. трафик между хостами становится близко к нулю и если я выполняюсь ls /mnt/test, это не возвращается в течение минуты или два. Затем ls управляйте возвратами, и загрузка запускается в, он - начальная 1.5Mbit/s скорость.

Когда скорость загрузки достигает, это максимально (18-20 мегабайтов/с), я работаю iptraf-ng и это показывает трафик на ~190 Мбит/с в сетевом интерфейсе, таким образом, сеть не является узким местом здесь, а также жестким диском сервера.

Что я попробовал:

1. Настройте сервер NFS на третьем хосте, который был соединен только с Ethernet на 100 Мбит NIC. Результаты аналогичны: DL показывает хорошую производительность и почти полное использование сети на 100 Мбит, загрузка не работает быстрее, чем сотни килобайт в секунду, оставляя использование сети очень низко (2,5 Мбит/с согласно iptraf-ng).

2. Я пытался настроить некоторые параметры NFS:

  • sync или async

  • noatime

  • нет hard

  • rsize и wsize максимальны в моих примерах, таким образом, я пытался уменьшить их в несколько этапов вниз к 8 192

3. Я пытался переключиться, машины клиента и сервера (настройте сервер NFS на бывшем клиенте и наоборот). Кроме того, существует еще шесть серверов с той же конфигурацией, таким образом, я пытался смонтировать их друг другу в различных изменениях. Тот же результат.

4. MTU=9000, MTU=9000 и 802.3ad агрегирование каналов, агрегирование каналов с MTU=1500.

5. настройка sysctl:

node01:~ # cat /etc/sysctl.conf 
net.core.wmem_max=16777216
net.core.rmem_max=16777216
net.ipv4.tcp_rmem= 10240 873800 16777216
net.ipv4.tcp_wmem= 10240 873800 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.netdev_max_backlog = 5000

Тот же результат.

6. Смонтируйтесь от localhost:

node01:~ # cat /etc/exports
/mnt/test *(rw,no_root_squash,insecure,sync,no_subtree_check)
node01:~ # mount -t nfs -o sync localhost:/mnt/test /mnt/testmount/

И здесь я получаю тот же результат: загрузите с /mnt/testmount/ быстро, загрузка на /mnt/testmount/ является очень медленным, не быстрее, чем 22 Мбайт/с и существует маленькая задержка, прежде чем передача на самом деле запустится. Это означает, что сетевой стек работает безупречно, и проблема находится в NFS?

Все это не помогло, результаты значительно не отличались от конфигурации по умолчанию. echo 3 > /proc/sys/vm/drop_caches выполнялся перед всеми тестами.

MTU всего NICS во всех 3 хостах является 1500, никакая нестандартная выполненная настройка сети. Ethernet-коммутатором является Dell MXL 10/40Gbe.

ОС является CentOS 7.

node01:/mnt/test # uname -a
Linux node01 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Какие настройки я пропускаю? Как сделать запись NFS быстро, и без зависает?

20
задан 11 April 2015 в 19:39
3 ответа

Это может быть проблема, связанная с размером пакета и задержкой. Попробуйте следующее:

сообщите о своих результатах.

2
ответ дан 2 December 2019 в 20:12

http://veerapen.blogspot.com/2011/09/tuning-redhat-enterprise-linux-rhel-54.html

Настройка планировщика Linux в системах с аппаратным RAID и изменение значения по умолчанию с [cfq] на [noop] дает улучшения ввода / вывода.

Используйте команду nfsstat для вычисления процента операций чтения / записи. Установите соответствующий коэффициент кэш-памяти RAID-контроллера.

Для тяжелых рабочих нагрузок вам потребуется увеличить количество потоков сервера NFS.

Сконфигурируйте потоки nfs для записи на диск без задержки с помощью параметра no_delay.

Сообщите ядро Linux должно быть очищено как можно быстрее, чтобы количество операций записи было минимальным. В ядре Linux частотой обратной записи грязных страниц можно управлять с помощью двух параметров.

Для более быстрой записи на диск используйте параметр файловой системы data = journal и предотвращайте обновление времени доступа к файлам, что само по себе приводит к записи дополнительных данных на диск.Этот режим является самым быстрым, когда данные необходимо читать и записывать на диск одновременно, он превосходит все другие режимы

2
ответ дан 2 December 2019 в 20:12

Вы используете синхронность в операторе экспорта. Это означает, что сервер подтверждает операции записи только после их фактической записи на диск. Учитывая, что у вас есть вращающийся диск (т.е. нет SSD), это требует в среднем не менее 1/2 оборота диска за операцию записи, что и является причиной замедления.

Используя настройку async, сервер сразу же подтверждает клиенту операцию записи, когда она обрабатывается, но еще не записывается на диск. Это немного более ненадежно, например, в случае отключения электричества, когда клиент получил сигнал на операцию, которая не состоялась. Однако, это дает огромный прирост производительности при записи.

(edit) Я только что видел, что вы уже протестировали опции async vs sync. Однако я почти уверен, что это и есть причина вашей проблемы с падением производительности - однажды у меня был точно такой же признак при идентичной настройке. Может быть, вы протестируете ее еще раз. Предоставили ли вы опцию async в экспортном заявлении сервера И в операции монтирования на клиенте одновременно?

3
ответ дан 2 December 2019 в 20:12

Теги

Похожие вопросы