Несколько дней назад я заметил кое-что довольно странное (по крайней мере, для меня). Я запустил rsync, скопировав те же данные и впоследствии удалив их в NFS mount, под названием /nfs_mount/TEST
. Это /nfs_mount/TEST
размещено / экспортировано из nfs_server-eth1
. MTU на обоих сетевых интерфейсах - 9000, коммутатор между ними также поддерживает большие кадры. Если я это сделаю, rsync -av dir /nfs_mount/TEST/
я получу скорость передачи по сети X Мбит / с. Если я это сделаю, rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
я получу скорость передачи по крайней мере 2X Мбит / с. У меня есть варианты монтирования NFS nfs rw,nodev,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountvers=3,mountproto=tcp
.
Итог: обе передачи проходят через одну и ту же сетевую подсеть, одни и те же провода, одни и те же интерфейсы, считывают одни и те же данные, записывают в один и тот же каталог и т. Д. Разница только в одном - через NFSv3, а другая - в rsync.
Клиент Ubuntu 10.04, сервер Ubuntu 9.10.
Почему rsync намного быстрее? Как заставить NFS соответствовать этой скорости?
Благодарность
Изменить: обратите внимание, я использую rsync для записи в общий ресурс NFS или SSH на сервер NFS и записи там локально. Оба раза я делаю rsync -av
, начиная с чистого каталога назначения. Завтра попробую с обычной копией.
Edit2 (дополнительная информация): Размер файла варьируется от 1 КБ до 15 МБ. Файлы уже сжаты, я пытался сжать их дальше, но безуспешно. Я сделал tar.gz
файл из этого dir
. Вот образец:
rsync -av dir /nfs_mount/TEST/
= самая медленная передача;rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
= самая быстрая rsync с включенными большими кадрами; без больших кадров это немного медленнее, но все же значительно быстрее, чем непосредственно в NFS;rsync -av dir.tar.gz nfs_server-eth1:/nfs_mount/TEST/
= примерно так же, как его эквивалент не tar.gz;
Тесты с cp
и scp
:
cp -r dir /nfs_mount/TEST/
= немного быстрее чем,rsync -av dir /nfs_mount/TEST/
но все еще значительно медленнее чемrsync -av dir nfs_server-eth1:/nfs_mount/TEST/
.scp -r dir /nfs_mount/TEST/
= самый быстрый в целом, немного преодолеваетrsync -av dir nfs_server-eth1:/nfs_mount/TEST/
;scp -r dir.tar.gz /nfs_mount/TEST/
= примерно так же, как его эквивалент не tar.gz;
Вывод, основанный на этих результатах: Для этого теста нет существенной разницы, если использовать большой файл tar.gz или много маленьких. Jumbo-кадры также не имеют большого значения. cp
и scp
быстрее, чем их соответствующие rsync -av
эквиваленты. Запись непосредственно в экспортированный общий ресурс NFS значительно медленнее (как минимум в 2 раза), чем запись в тот же каталог по SSH, независимо от используемого метода.
Различия между ними cp
и rsync
не актуальны в этом случае. Я решил попробовать cp
и scp
просто посмотреть, показывают ли они одинаковую картину, и они делают - разница в 2 раза.
Поскольку я использую rsync
или cp
в обоих случаях, я не могу понять, что мешает NFS достичь скорости передачи тех же команд через SSH.
Почему запись в общий ресурс NFS в 2 раза медленнее, чем запись в то же место по SSH?
Edit3 (NFS - сервер / и т.д. / экспорта вариантов): rw,no_root_squash,no_subtree_check,sync
. Клиент / Proc / монтирует показывает: nfs rw,nodev,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountvers=3,mountproto=tcp
.
Спасибо вам всем!