Согласно этому бумага в Стоге сена Facebook:
"Из-за того, как устройства NAS управляют метаданными каталогов, размещение тысяч файлов в каталоге было крайне неэффективным, поскольку блок-карта каталога была слишком большой для эффективного кэширования устройством. Следовательно, для получения одного образа обычно требовалось более 10 дисковых операций. После уменьшения размеров каталогов до сотен изображений на каталог, результирующая система по-прежнему будет выполнять 3 дисковые операции для извлечения изображения: одна для чтения метаданных каталога в память, вторая для загрузки inode в память и третья для чтения содержимое файла."
Я предполагал, что метаданные и индексный дескриптор файловой системы всегда будут кэшироваться в ОЗУ операционной системой, а для чтения файла обычно требуется только 1 дисковый ввод-вывод.
Является ли эта проблема «несколько дисковых операций ввода-вывода для чтения одного файла», описанная в этом документе, уникальной для устройств NAS, или у Linux такая же проблема?
Я планирую запустить Linux-сервер для обслуживания изображений. В любом случае я могу минимизировать количество операций ввода-вывода на диск - в идеале, чтобы ОС кэшировала все данные каталога и индексного дескриптора в ОЗУ, и для каждого чтения файла потребуется не более 1 ввода-вывода на диск?
Это зависит от используемой файловой системы. Некоторые файловые системы лучше справляются с проблемой больших каталогов, чем другие, и да, кеширование влияет на использование.
В старых версиях EXT3 была очень серьезная проблема с каталогами с тысячами файлов в них, которая была исправлена, когда были введены dir_indexes. Если dir_index не используется, получение файла из каталога с тысячами файлов может быть довольно дорогостоящим. Не зная подробностей, я подозреваю, что это то, что использовало устройство NAS в статье.
Современные файловые системы (последние версии ext3, ext4, xfs) справляются с проблемой большого каталога намного лучше, чем в былые времена. Некоторые inodes могут стать большими, но b-деревья, обычно используемые для индексации каталогов, делают очень быстрые fopen
раз.
Я предполагал, что метаданные каталога файловой системы и индекс всегда будут кэшироваться в ОЗУ.
Да, но вы не научились правильно читать. В абзаце, который вы сами процитировали, ясно сказано:
Из-за того, как устройства NAS управляют метаданными каталогов, размещение тысяч файлов в каталоге было крайне неэффективным, поскольку блок-карта каталога была слишком большой для эффективного кэширования устройством.
Бытовая техника - это оборудование низкого уровня. Слишком много метаданных + слишком мало ОЗУ = НЕВОЗМОЖНО КЭШИТЬ.
Если у вас большой файловый сервер, покупайте именно его, а не низкое устройство.
Если вы можете жить без обновленного времени доступа к файлам и каталогам, вы можете сэкономить много запросов ввода-вывода, если монтируете файловую систему с опцией noatime.
В Linux это делается по умолчанию. Если у вас хороший объем оперативной памяти, вы получите хорошее кеширование.
Речь идет о тщательном измерении. Если ваша основная цель - обслуживание изображений, то я думаю, что они будут доминировать в вашем сетевом трафике. Кроме того, если вы не выполняете кэширование, скорость диска должна приблизительно соответствовать скорости сети. Наконец, если вы делаете идеальное кэширование, скорость сети останется прежней, а скорость диска упадет до 0.
Другими словами, измерьте все! Я использую collectl исключительно для этого, как и многие пользователи крупнейших кластеров в мире.
Просто скачайте / установите и запустите. Он будет записывать массу вещей, которые вы можете воспроизвести или даже построить. Затем посмотрите на цифры и выясните, насколько эффективно работает ваше кеширование.
-отметка