Несколько дней назад я заметил кое-что довольно странное (по крайней мере, для меня). Я запустил 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.
Спасибо вам всем!