Потери\ошибки на интерфейсах есть?

Wed, 21 Mar 2012 06:20:05 +0400 от Владимир Друзенко<[email protected]>:
  
  
 
 
 Приветствую всех.
 
 (Заранее прошу прощение за простыню.)
 
 Системы:
 * клиент: i386 Core 2 Duo [email protected] 4Gb DDR2 800MHz;
 * сервер: amd64 Xeon [email protected] 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.
 Отсюда стандартные вопросы: "кто виноват?" и "что делать?".
 Может есть ещё какие хитрые клиентские опции/настройки?
 
 
 Спасибо, что дочитали! :-]
 
 
      

Ответить