У меня есть сервер NFS3 с несколькими клиентами. Каждый клиент последовательно читает разные большие файлы, и производительность очень низкая.
Вот что я наблюдаю в iostat
на сервере для диска, на котором находятся файлы:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util sdX 24.33 0.00 712.67 0.00 18.41 0.00 52.91 11.95 16.91 1.40 100.00
Как вы видете, %util
составляет 100%. В то же время совокупная пропускная способность ввода-вывода (rMB/s+wMB/s
) составляет около 18 МБ / с, что в 10-20 раз медленнее, чем у диска.
Это и соотношение rMB/s
к r/s
, привели меня к выводу, что вместо того, чтобы читать большие куски каждого файла за раз, NFS в конечном итоге читает файлы небольшими кусками с большим чередованием кусков между разными файлами. Это, в свою очередь, приводит к большому количеству обращений к диску, что снижает производительность.
Вы бы сказали, что вывод оправдан доказательствами?
Что вы порекомендуете для решения этой проблемы? Я могу изменить приложение для чтения и настроить параметры NFS как на сервере, так и на клиенте. Я использую RedHat 5.6 с ядром 2.6.18, которое Я считаю пределы rsize
до 32 КБ (я был бы счастлив, если бы ошибся).
редактировать: Вот как все выглядит, когда только один клиент читает один файл:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util sdX 343.33 0.33 1803.33 0.67 105.78 0.00 120.09 0.91 0.50 0.31 56.47
Как видите, пропускная способность намного лучше, и %util
также намного ниже.
Более быстрые диски, больше памяти в коробке. Думаю, ваш вывод верен - вы обязаны искать.
Сколько памяти у вашего сервера NFS по сравнению с вашим рабочим набором? Ваш рабочий набор поместится в кеш?
Что такое внутреннее хранилище? Вы говорите, что он обеспечивает пропускную способность ~ 180-360 МБ / с, но как он работает для случайного ввода-вывода? Я бы предложил использовать что-то вроде фио чтобы получить представление. поисковик также интересно визуализировать ввод / вывод. Но если вы сможете избежать удара по дискам, тем лучше.