Проблемы производительности NFS в Debian

9

У меня очень непоследовательная работа с NFS между двумя хриплыми машинами, и я не могу этого объяснить.

Настроить:

Машина 1 'video1': двойной 5506 Вт / 12 ГБ оперативной памяти, XFS на 8x3 ТБ RAID6, экспортированный как 'video1' из '/ mnt / storage'

Машина 2 «storage1»: Phenom X2 @ 3,2 ГГц с оперативной памятью 8 ГБ, ZFS на 5x2 ТБ экспортируется как «storage1» из / mnt / storage1-storage

Локальная производительность записи:

mackek2@video1:/mnt/storage/testing$ dd if=/dev/zero of=localwrite10GB bs=5000k count=2000
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 16.7657 s, 611 MB/s

Локальная производительность чтения:

Оба подключены к одному и тому же гигабитному коммутатору HP, а iperf обеспечивает невероятную скорость 940 Мбит / с в обоих направлениях.

Моя проблема в том, что когда я пишу в экспорт видео1 из хранилища1, производительность повсюду. Кажется, что для первых нескольких (5-7) концертов передачи файлов (я надеюсь переместить файлы AVCHD или MJPEG объемом 30-120 ГБ как можно быстрее) производительность снижается с 900 Мбит / с до 150-180 Мбит / с, так что время медленно, как 30 Мбит / с. Если я перезагружаю сервер ядра NFS, производительность поднимается еще на несколько концертов.

mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite10GB count=2000 bs=5000K
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 223.794 s, 45.8 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite10GBTest2 count=2000 bs=5000K
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 198.462 s, 51.6 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=bigfile776 count=7000 bs=2000K
7000+0 records in
7000+0 records out
14336000000 bytes (14 GB) copied, 683.78 s, 21.0 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite15GB count=3000 bs=5000K
3000+0 records in
3000+0 records out
15360000000 bytes (15 GB) copied, 521.834 s, 29.4 MB/s

Когда дела идут быстро, nfsiostat на клиенте выдает средние значения RTT в несколько мс, но при снижении производительности он достигает RTT более 1,5 секунды. Кроме того, глубина записи в CPU увеличивается до 8 во время записи.

Теперь, когда я читаю из того же экспорта, я получаю красивые 890 Мбит / с или несколько мегабит в секунду за все чтение.

mackek2@storage1:/mnt/video1/testing$ dd if=remoteWrite10GBTest2 of=/dev/null
20000000+0 records in
20000000+0 records out
10240000000 bytes (10 GB) copied, 89.82 s, 114 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=remoteWrite15GB of=/dev/null
30000000+0 records in
30000000+0 records out
15360000000 bytes (15 GB) copied, 138.94 s, 111 MB/s

То же самое происходит с хранилищем1 в качестве сервера NFS. Очередь ЦП подпрыгивает, скорость падает до дерьма, и я вырываю волосы.

Я попытался увеличить число демонов NFS до 64, и оно все еще выплескивается после нескольких концертов.

Кайл М
источник
... асинхронная опция при экспорте исправила это. Теперь, чтобы посмотреть, смогу ли я получить еще несколько Мбит / с с большими кадрами.
Кайл М,
1
Пожалуйста, опубликуйте это как ответ и примите его, когда сможете, чтобы другие знали, что проблема решена.
Mgorven

Ответы:

4

Вы не включаете параметры монтирования или экспорта, поэтому в NFS есть ряд факторов, которые могут повлиять на производительность. Я бы порекомендовал попробовать следующие варианты для максимальной производительности и надежности NFS (исходя из моего опыта):

  • Варианты монтирования: tcp,hard,intr,nfsvers=3,rsize=32768,wsize=32768

  • Параметры экспорта: async

Кристофер Кашелл
источник
Отметим также, что приведенные выше параметры монтирования также рекомендованы Oracle для запуска Oracle через NFS.
Кристофер Кашелл
я также смог значительно улучшить производительность с помощью приведенного выше совета, однако nfsvers=3это не было необходимо.
Анаркат
@anarcat - Для современных выпусков вы правы, nfsvers=3это не так важно. В Linux при монтировании NFS по умолчанию использовалась NFS версии 2, если вы не указали версию 3. В этих случаях было очень полезно явно установить версию. В современных выпусках mount будет согласовывать, начиная с v4, затем пробуя v3, затем возвращаясь к v2.
Кристофер Кашелл