Назад | Перейти на главную страницу

CentOS: как улучшить производительность листинга NFS

NFS отлично работал у меня в последние годы, но теперь я столкнулся с проблемой производительности, решения которой я не могу найти.

Моя проблема в том, что на сервере NFS у меня есть около 5 ГБ небольших файлов, и когда с клиента я ввожу «ls» или «du» в смонтированный каталог, может потребоваться более 2 минут, чтобы перечислить все файлы.

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

Теперь я попытался найти решение этой проблемы, но мне не удалось его найти, поэтому я решил открыть эту тему.

Кто-нибудь из вас знает, как я могу решить проблему с производительностью?

Большое спасибо от падавана системного администратора linux.

Мне кажется, что эта проблема не специфична для NFS. Исторически сложилось так, что файловые системы UNIX обычно имеют проблемы с плоскими каталогами, содержащими большое количество файлов. Конечно, много лет назад мне говорили, что производительность снижается пропорционально квадрату размера файла каталога. Как вы указываете, выполняя ls -la средства statкаждый индексный дескриптор, а это занимает много времени после того, как файл каталога начинает расти; задержка, добавленная NFS, усугубит это, но это только привлекает ваше внимание к основной проблеме, а не вызывает ее.

Решение, как я постоянно говорю своим разработчикам, состоит не в том, чтобы хранить большое количество файлов в неглубоких широких структурах, а в узких и глубоких.

Посмотрите, как существующие утилиты хранят файлы, когда их много для хранения: yum делает много файлов под /var/lib/yum/yumdb, поэтому он хранит их в подкаталогах с начальным начальным значением:

drwxr-xr-x.   4 root root  4096 Sep  9  2011 C
drwxr-xr-x.   3 root root  4096 Sep  9  2011 M
drwxr-xr-x.   3 root root  4096 Jul 13 10:05 S
drwxr-xr-x.  24 root root  4096 Jul 13 10:05 a
drwxr-xr-x.  18 root root  4096 Nov  7 11:10 b
[c through y omitted to save space]
drwxr-xr-x.   5 root root  4096 Dec 28  2011 z

Кеш Squid при инициализации с помощью squid -z, делает /var/spool/squid/0[0-F], и под каждым из них создает подкаталоги ./[0-F][0-F]. innd выполняет аналогичный трюк, если память не изменяет, когда он не использует файловую структуру типа кольцевого буфера. Все эти и многие другие подобные демоны знают, что если им нужно хранить много маленьких файлов, наличие глубокого набора подкаталогов для их хранения - это существенный к эффективной работе.

редактировать: 1s - очень много времени, чтобы выполнить ls для одного локального каталога. Как я уже сказал, я думаю, что задержка NFS усугубляет вашу проблему; но он не несет ответственности за проблему, а только за то, что делает ее достаточно большой, чтобы причинить вам горе.