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 усугубляет вашу проблему; но он не несет ответственности за проблему, а только за то, что делает ее достаточно большой, чтобы причинить вам горе.