Низкая производительность диска KVM + NFS

Низкая производительность диска KVM + NFS

Ситуация: У нас есть сервер Ubuntu, на котором размещены три виртуальные машины с использованием KVM. Всем гостям, а также хосту необходимо получить доступ к одним и тем же файлам в определенной подпапке /var . Таким образом, подпапка экспортируется через NFS. Наша проблема в том, что гость может читать/писать в каталог только с половиной скорости хоста. Таблица экспорта выглядит следующим образом

alice@host:~$ cat /etc/exports
/home/videos 192.168.10.0/24(rw,sync,no_root_squash)

где хост имеет IP 192.168.10.2, а виртуальные машины — 192.168.10.1{1..3}. /home/videos — это символическая ссылка на определенную подпапку в /var. В частности, это /var/videos/genvids.

Вот соответствующая строка из fstab виртуальной машины:

192.168.10.2:/home/videos /mnt/nfs nfs auto,noatime,rsize=4096,wsize=4096  0 0

Жесткий диск имеет постоянную скорость передачи данных ~155 МБ/с, что подтверждается выводами hdparm -tT, а также dd:

alice@host:~$ dd if=/home/videos/4987_1359358478.mp4 of=/dev/null bs=1024k count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 2.04579 s, 154 MB/s

Изнутри виртуальной машины все выглядит иначе:

bob@guest:~$ dd if=/mnt/nfs/4959_3184629068.mp4 of=/dev/null bs=1024k count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 4.60858 s, 68.3 MB/

Подгонка размера блока под размер страницы файловой системы не дала удовлетворительного эффекта:

bob@guest:~$ dd if=/mnt/nfs/4925_1385624470.mp4 of=/dev/null bs=4096 count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 5.77247 s, 71.0 MB/s

Я просмотрел несколько страниц о производительности NFS, наиболее релевантными из которых являютсяЧасто задаваемые вопросы по NFSЧасть B и соответствующиеНастройка производительностиHowto. Большинство советов не применимы. Остальные не улучшили результаты.Там являются потоки здеськоторые касаются производительности дисков и KVM. Однако они не охватывают аспект NFS.Этотпоток есть, но скорость сети, похоже, не является ограничивающим фактором в нашем случае.

Чтобы дать полную картину, вот содержимое таблицы экспорта с разрешенными символическими ссылками и всеми показанными активными параметрами экспорта:

alice@host:~$ cat /var/lib/nfs/etab
/var/videos/genvids 192.168.10.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,
no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,
anonuid=65534,anongid=65534)

Что меня также беспокоит в этом контексте и чего я не понимаю, так это вывод procfile nfsd:

alice@host:~$ cat /proc/net/rpc/nfsd
...
th 8 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
...

Для третьего столбца и далее я бы ожидал значений, отличных от нулей, после чтения с диска в виртуальных машинах. Однако nfsstat сообщает мне, что операции чтения действительно были:

alice@host:~$ nfsstat
...
Server nfs v3:
null         getattr      ...
9     0%     15106     3% ...
read         write        ...
411971   95% 118       0% ...
...

Итак, тема довольно сложная, и мне хотелось бы узнать, куда еще обратиться и есть ли простое решение для этого.

решение1

Как оказалось, решить проблему оказалось проще, чем ожидалось. Настройкаrsizeиwsizeопция в fstab виртуальной машины сделала свое дело. Соответствующая строка теперь

192.168.10.2:/home/videos /mnt/nfs nfs auto,noatime,rsize=32768,wsize=32768  0 0

Для меня это не было очевидным, так как я ожидал наилучшей производительности, если значения дляrsizeиwsizeсоответствуют размеру блока диска (4096) и не превышают MTU сетевой карты (9000). По-видимому, это предположение было неверным.

Примечательно, что точная постоянная скорость передачи данных на диске зависит от самого файла: для двух похожих файлов размером 9 ГБ я наблюдал скорости между 155 МБ/с (файл 1) и 140 МБ/с (файл 2). Таким образом, пониженная скорость передачи данных с одним файлом может по-прежнему приводить к полной скорости передачи данных с другим файлом.

Связанный контент