Страница 1 из 1

NFS в гигабитных сегментах

Добавлено: 2008-02-17 13:02:16
lostar
Кто-нибудь использует NFS на гигабитных линках?
Есть такая проблема, что с jumbo фреймами все как-то криво работает. В логах непонятные ошибки, отваливается запись на NFS шару...

NFS server (FreeBSD 6.3)
          |
          | 1 Gb link
          |
NFS client (Mac OS X 10.5.1)

Конфигурация сервера
-----------------------------

Код: Выделить всё

nfe0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 8000
	options=48<VLAN_MTU,POLLING>
Конфигурация клиента
------------------------

Код: Выделить всё

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 8000
Ключи монтирования на клиенте: tcp vers=3 rsize=40960 wsize=40960 readahead=16 rdirplus nolocks intr noatime

Лог при копировании 3 Гб файла с сервера:

Код: Выделить всё

07:11:08.350744 IP (tos 0x0, ttl 64, id 51461, offset 0, flags [DF], proto TCP (6), length 176) 192.168.254.249.nfs > 192.168.254.254.2468561782: reply ok 124 access attr: REG 660 ids 1001/1006 sz 3958224896 nlink 1 rdev 133/134414584 fsid 5e fileid 2013005 a/m/ctime 1199479211.000000 1199479280.000000 1201346449.000000 c 001f
07:11:08.350793 IP (tos 0x0, ttl 64, id 46719, offset 0, flags [DF], proto TCP (6), length 52) 192.168.254.254.49158 > 192.168.254.249.nfsd: ., cksum 0x7f70 (incorrect (-> 0xd9e5), 22844:22844(0) ack 27581 win 65535 <nop,nop,timestamp 67511239 30749984>
07:11:08.350988 IP (tos 0x0, ttl 64, id 9526, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561783 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 0
07:11:08.351069 IP (tos 0x0, ttl 64, id 8470, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561784 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 32768
07:11:08.351145 IP (tos 0x0, ttl 64, id 65343, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561785 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 65536
07:11:08.351242 IP (tos 0x0, ttl 64, id 11022, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561786 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 98304
07:11:08.351314 IP (tos 0x0, ttl 64, id 59209, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561787 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 131072
07:11:08.351383 IP (tos 0x0, ttl 64, id 39733, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561788 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 163840
07:11:08.351450 IP (tos 0x0, ttl 64, id 33325, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561789 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 196608
07:11:08.351516 IP (tos 0x0, ttl 64, id 50481, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561790 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 229376
07:11:08.351582 IP (tos 0x0, ttl 64, id 50464, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561791 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 262144
07:11:08.351658 IP (tos 0x0, ttl 64, id 37215, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561792 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 294912
07:11:08.351739 IP (tos 0x0, ttl 64, id 6496, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561793 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 327680
07:11:08.351750 IP (tos 0x0, ttl 64, id 49495, offset 0, flags [DF], proto TCP (6), length 52) 192.168.254.249.nfsd > 192.168.254.254.49158: ., cksum 0x15e5 (correct), 27581:27581(0) ack 23076 win 49943 <nop,nop,timestamp 30749985 67511239>
07:11:08.351754 IP (tos 0x0, ttl 64, id 36632, offset 0, flags [DF], proto TCP (6), length 52) 192.168.254.249.nfsd > 192.168.254.254.49158: ., cksum 0x1501 (correct), 27581:27581(0) ack 23308 win 49939 <nop,nop,timestamp 30749985 67511239>
07:11:08.351758 IP (tos 0x0, ttl 64, id 21313, offset 0, flags [DF], proto TCP (6), length 52) 192.168.254.249.nfsd > 192.168.254.254.49158: ., cksum 0x141c (correct), 27581:27581(0) ack 23540 win 49936 <nop,nop,timestamp 30749985 67511239>
07:11:08.351783 IP (tos 0x0, ttl 64, id 50759, offset 0, flags [DF], proto TCP (6), length 52) 192.168.254.249.nfsd > 192.168.254.254.49158: ., cksum 0x1338 (correct), 27581:27581(0) ack 23772 win 49932 <nop,nop,timestamp 30749985 67511239>
07:11:08.351801 IP (tos 0x0, ttl 64, id 56942, offset 0, flags [DF], proto TCP (6), length 52) 192.168.254.249.nfsd > 192.168.254.254.49158: ., cksum 0x1254 (correct), 27581:27581(0) ack 24004 win 49928 <nop,nop,timestamp 30749985 67511239>
07:11:08.351818 IP (tos 0x0, ttl 64, id 13319, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561794 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 360448
07:11:08.351904 IP (tos 0x0, ttl 64, id 17022, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561795 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 393216
07:11:08.351981 IP (tos 0x0, ttl 64, id 45600, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561796 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 425984
07:11:08.351999 IP (tos 0x0, ttl 64, id 31024, offset 0, flags [DF], proto TCP (6), length 6196) 192.168.254.249.nfs > 192.168.254.254.2468561783: reply ok 6144 read REG 660 ids 1001/1006 sz 3958224896 nlink 1 rdev 133/134414584 fsid 5e fileid 2013005 a/m/ctime 1199479211.000000 1199479280.000000 1201346449.000000 32768 bytes
07:11:08.352014 IP (tos 0x0, ttl 64, id 13078, offset 0, flags [DF], proto TCP (6), length 6196) 192.168.254.249.nfs > 192.168.254.254.0: reply ok 6144
07:11:08.352074 IP (tos 0x0, ttl 64, id 9792, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561797 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 458752
07:11:08.352085 IP (tos 0x0, ttl 64, id 61207, offset 0, flags [DF], proto TCP (6), length 6196) 192.168.254.249.nfs > 192.168.254.254.0: reply ok 6144
07:11:08.352143 IP (tos 0x0, ttl 64, id 63816, offset 0, flags [DF], proto TCP (6), length 52) 192.168.254.254.49158 > 192.168.254.249.nfsd: ., cksum 0x7f70 (incorrect (-> 0x8b18), 24584:24584(0) ack 46013 win 65535 <nop,nop,timestamp 67511239 30749985>
07:11:08.352162 IP (tos 0x0, ttl 64, id 60945, offset 0, flags [DF], proto TCP (6), length 52) 192.168.254.254.49158 > 192.168.254.249.nfsd: ., cksum 0x7f70 (incorrect (-> 0x8b18), 24584:24584(0) ack 46013 win 65535 <nop,nop,timestamp 67511239 30749985>
07:11:08.352177 IP (tos 0x0, ttl 64, id 3701, offset 0, flags [DF], proto TCP (6), length 168) 192.168.254.254.2468561798 > 192.168.254.249.nfs: 116 read fh 1143,951878/33632261 32768 bytes @ 491520
07:11:08.352198 IP (tos 0x0, ttl 64, id 3073, offset 0, flags [DF], proto TCP (6), length 6196) 192.168.254.249.nfs > 192.168.254.254.3681401976: reply Unknown rpc response code=3722304989 6144
07:11:08.352203 IP (tos 0x0, ttl 64, id 2122, offset 0, flags [DF], proto TCP (6), length 6196) 192.168.254.249.nfs > 192.168.254.254.3067833788: reply Unknown rpc response code=3722304989 6144
07:11:08.352207 IP (tos 0x0, ttl 64, id 61294, offset 0, flags [DF], proto TCP (6), length 2232) 192.168.254.249.nfs > 192.168.254.254.3067833788: reply Unknown rpc response code=3722304989 2180
Наиболее интересная вырезка лога:

Код: Выделить всё

192.168.254.254.3681401976: reply Unknown rpc response
Похоже на то, что первая часть данных отправляется нормально
07:11:08.351999...length 6196) 192.168.254.249.nfs > 192.168.254.254.2468561783: reply ok 6144...32768 bytes
после чего сыплются ошибки (а затем и повторно пересылаются эти пакеты):
length 6196) 192.168.254.249.nfs > 192.168.254.254.3681401976: reply Unknown rpc response code=3722304989 6144
length 6196) 192.168.254.249.nfs > 192.168.254.254.3067833788: reply Unknown rpc response code=3722304989 6144
length 2232) 192.168.254.249.nfs > 192.168.254.254.3067833788: reply Unknown rpc response code=3722304989 2180
Еще непонятно, почему сервер ограничивает размер данных для чтения/записи 32760 байтами (судя по логу)?

Re: NFS в гигабитных сегментах

Добавлено: 2008-02-17 13:09:01
Alex Keda
udp не юзал?

Re: NFS в гигабитных сегментах

Добавлено: 2008-02-17 13:30:03
lostar
Сейчас юзаю UDP, кроме того пришлось отключить jumbo frames и выставить стандартный mtu 1500.
В принципе, этого пока хватает, перестанет хватать когда когда скорость чтения с винтов (например в рейде) будет выше 70 Мб/с :)
Конечно, пока это вопрос скорее академический чем практический - все ограничивается скоростью чтения\записи винтов, но все равно интересно как же затюнить НФС, что бы он работал но максимуму.

UDP вроде не позволяет ставить буфер передачи больше 16К (для tcp по дефолту 32), а от размера этого буфера весьма сильно зависит скорость передачи.
Да и вроде jumbo frames помогают немного разгрузить систему приема/передачи.

Re: NFS в гигабитных сегментах

Добавлено: 2008-02-17 14:24:10
Raven2000
Попробуй
-mapall=юзер - Закрепляет все значений UID за определенным пользователем; это удобно
при работе с персональными компьютерами и ненадежными однопользовательскими станциями.

Re: NFS в гигабитных сегментах

Добавлено: 2008-02-17 14:40:16
lostar
Именно так и экспортирую.
Права на директориях и файлах выставил.

Меня просто смутила та ошибка, о которой я упоминал изначально. Видимо нужно копать сорцы NFS (или может подождать NFS v4 :) ).

Re: NFS в гигабитных сегментах

Добавлено: 2008-02-17 15:19:53
Raven2000
Покажи свой export
и клиенский конфиг маунта

Re: NFS в гигабитных сегментах

Добавлено: 2008-02-17 18:59:25
lostar
Сервер:

Код: Выделить всё

/etc/exports 

/mnt/ext/video -mapall=somebody
/mnt/ext/documents -mapall=somebody
/mnt/ext/music -mapall=somebody
/mnt/ext/distrib -mapall=somebody
Клиент:
Там шарится через GUI (MacOS X automount).
В параметрах задаю:

Код: Выделить всё

tcp vers=3 rsize=40960 wsize=40960 readahead=16 rdirplus nolocks intr noatime
пробовал разные варианты (с tcp) - результат тот же самый, даже без дополнительных параметров.

Re: NFS в гигабитных сегментах

Добавлено: 2008-02-17 20:25:50
Raven2000
Стоп а какая сетевуха если встроенная нвидия марвел али реалтек то нах.

Re: NFS в гигабитных сегментах

Добавлено: 2008-02-18 21:18:23
lostar
Ну зачем же так сразу? :lol:
Встроенный nforce, драйвер nfe.
Кстати, все отлично работает в тестах - iperf показывает вполне адекватные результаты. Так что думаю косяк все-таки скорее всего внутри NFS, по логам то однозначно видно, что он отсылает ответ с кодом ошибки. Только вот этот код ошибки в стандарте не описан и видимо клиент тоже не знает что он означает.