On 21.03.2012 08:56, Sergey Rudenko wrote:
Wed, 21 Mar 2012 06:20:05 +0400 от Владимир Друзенко<v...@unislabs.com>:


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

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

    Системы:
    * клиент: i386 Core 2 Duo E7300@3.4GHz
    <sentmsg?compose&To=E7300@3.4GHz> 4Gb DDR2 800MHz;
    * сервер: amd64 Xeon E5030@2.66GHz
    <sentmsg?compose&To=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.
    Отсюда стандартные вопросы: "кто виноват?" и "что делать?".
    Может есть ещё какие хитрые клиентские опции/настройки?


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



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

netstat -i ?

На клиенте:
Ierrs Idrop Oerrs Coll - все нули.
Ipkts Opkts на msk0 - большие числа (десятки миллионов).

На сервере:
Ierrs Idrop Oerrs Coll - не 0 только Oerrs на lagg0 - 55:
# grep lagg /etc/rc.conf
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto lacp laggport em0 laggport em1 x.x.x.x netmask 255.255.0.0"
Ipkts Opkts на em0, em1 и lagg0 числа ещё больше - от 60 до 300 миллионов.


Ответить