Приветствую всех.

(Заранее прошу прощение за простыню.)

Системы:
* клиент: i386 Core 2 Duo E7300@3.4GHz 4Gb DDR2 800MHz;
* сервер: amd64 Xeon E5030@2.66GHz 2Gb DDR2 FB-DIMM 667MHz;
* на обеих машинках RELENG_9 начала февраля 2012;
* обе на гигабите: модели мам, сетевух и свитчей запощу, если есть необходимость в этом;
* NFS на сервере на ZFS (по хэндбуку), ZFS RAIDZ на 4x2Tb WD RE4;
* все тесты проводил в 4-5 msk - загрузка сети и серверов практически нулевая.

Собственно в чём причина написания сего сообщения: непонятки со скоростью копирования по NFS.
Всё началось с банального копирования файлов по NFS - ну очень медленно.
При этом по самбе такое не наблюдается.

Начал тестить:
# grep documents /etc/fstab
server.ip:/datastorage/documents /mnt/documents nfs rw,intr,soft,bg 0 0

# dd if=/dev/zero of=/usr/test.zero count=256 bs=1024k
256+0 records in
256+0 records out
268435456 bytes transferred in 2.950790 secs (90970710 bytes/sec)

# time cp /usr/test.zero /mnt/documents/
real    2m1.657s
user    0m0.000s
sys     0m0.599s
# echo $((268435456/(2*60+2)))
2200290
Это всего-то 2.2Mbytes/s! Мало даже для 100Mbit/s сети.

Вот самба (тот же каталог на сервере, что и по NFS, samba 3.6.3):
# time cp /usr/test.zero /mnt/smb0/
real    0m6.197s
user    0m0.000s
sys     0m0.286s
# echo $((268435456/6))
44739242

44.7Mbytes/s - не идеал, но уже неплохо.


Решил потестить dd:
(строки вида "256+0 records in" и "256+0 records out" убрал, чтобы не мешали)

# dd if=/dev/zero of=/mnt/documents/test.zero count=512k bs=512
268435456 bytes transferred in 5.776159 secs (46473003 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256k bs=1024
268435456 bytes transferred in 5.275812 secs (50880407 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=128k bs=2048
268435456 bytes transferred in 5.009737 secs (53582744 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=64k bs=4096
268435456 bytes transferred in 4.465294 secs (60115963 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=32k bs=8192
268435456 bytes transferred in 4.616121 secs (58151737 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=16k bs=16384
268435456 bytes transferred in 4.792773 secs (56008381 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=8k bs=32k
268435456 bytes transferred in 4.698532 secs (57131773 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=4k bs=64k
268435456 bytes transferred in 4.558262 secs (58889872 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=2k bs=128k
268435456 bytes transferred in 4.987123 secs (53825714 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=1k bs=256k
268435456 bytes transferred in 4.925698 secs (54496937 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=512 bs=512k
268435456 bytes transferred in 4.954061 secs (54184931 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=*1024k*
268435456 bytes transferred in 119.418152 secs (*2247861* bytes/sec)
??????????????????????????????????????????????????????????????????

Начал экспериментировать:
# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=800k
209715200 bytes transferred in 3.649696 secs (57461007 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=810k
212336640 bytes transferred in 5.292056 secs (40123658 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=820k
214958080 bytes transferred in 4.571811 secs (47018145 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=830k
217579520 bytes transferred in 5.237694 secs (41541090 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=840k
220200960 bytes transferred in 7.006737 secs (31427033 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=850k
222822400 bytes transferred in 5.609241 secs (39724162 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=860k
225443840 bytes transferred in 4.649138 secs (48491536 bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=*870k*
228065280 bytes transferred in 102.918602 secs (*2215977* bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=*880k*
230686720 bytes transferred in 103.500444 secs (*2228848* bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=*890k*
233308160 bytes transferred in 109.924715 secs (*2122436* bytes/sec)

# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=*900k*
235929600 bytes transferred in 113.634523 secs (*2076214* bytes/sec)


Для сравнения проверил на двух системах с Linux (тотже /datastorage/documents):
- машинка на том же свитче, что и клиент:
# dd if=/dev/zero of=/mnt/test.zero count=256 bs=1M
скопировано 268435456 байт (268 MB), 4,12729 c, 65,0 MB/c

- машинка на том же свитче, что и сервер:
# dd if=/dev/zero of=/mnt/test.zero count=256 bs=1M
268435456 bytes (268 MB) copied, 4,59726 s, 58,4 MB/s

А вот ещё интересный результат:
# dd if=/dev/zero of=/mnt/test.zero count=64 bs=4M
268435456 bytes transferred in 6.616688 secs (40569459 bytes/sec)
Это amd64 RELENG_8 августа 2011, подключена к тому же свитчу, что и сервер.
40+Mbytes/s выдаёт на всех размерах блоков начиная с 512bytes и до 4Mbytes.

Даже виртуалка (i386 RELENG_9 той же даты, что и клиент, и сервер) выдаёт под 40Mbytes/s блоками 1Mb:
# dd if=/dev/zero of=/mnt/test.zero count=256 bs=1M
268435456 bytes transferred in 7.061516 secs (38013858 bytes/sec)


Гуглить пробовал http://lists.freebsd.org/pipermail/freebsd-performance/2007-June/002710.html
nfsv3,readahead=4,wsize=32768,rsize=32768 помогло слабо:
# dd if=/dev/zero of=/mnt/documents/test.zero count=256 bs=1M
268435456 bytes transferred in 74.214095 secs (3617041 bytes/sec)
Или вот от туда же:
# dd if=/dev/zero bs=1M count=256 | dd of=/mnt/documents/test.zero bs=1M
*256*+0 records in
*256*+0 records out
268435456 bytes transferred in 7.489181 secs (35843099 bytes/sec)
0+*4096* records in
0+*4096* records out
268435456 bytes transferred in 7.485994 secs (35858359 bytes/sec)
С какого перепугу он размер блока меняет? Ну да ладно - это не относится к теме.


Итог: хочу копировать по NFS с нормальной скоростью, без использования dd.
Отсюда стандартные вопросы: "кто виноват?" и "что делать?".
Может есть ещё какие хитрые клиентские опции/настройки?


Спасибо, что дочитали! :-]


Ответить