6

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

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

Или есть способ создать RAM-диск с возможностью записи на реальный диск?

7 ответов7

6

Подумайте об использовании файловой системы ext4 с использованием параметров быстрого и свободного подключения:

noatime,data=writeback,nobh,barrier=0,commit=300

отложить запись данных из кеша обратно на физический диск.

Кроме этого, вы можете использовать aufs для монтирования объединенной файловой системы tmpfs поверх вашей обычной файловой системы, выполнять всю запись и затем объединять tmpfs обратно с реальной файловой системой.

6

Вы видите большое количество ожиданий ввода-вывода, указывающих на то, что запросы на чтение и запись не выполняются через существующие буферы? Как уже отмечали другие, Linux очень хорош в предоставлении резервной оперативной памяти для буферов, поэтому вы должны сначала проверить это.

Если вы не видите, что IO ждет, возможно, у вас проблемы с производительностью (у вас вообще есть проблемы? Ваш вопрос не отвечает) из-за переключений контекста ядра из-за множества небольших операций ввода-вывода, инициируемых программой. В этом случае вы можете значительно повысить производительность, переписав свое приложение для использования отображенных в памяти файлов. Но это больше вопрос для StackOverflow.

1

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

Вы можете рассмотреть возможность использования ext4 в качестве файловой системы. Он использует целый ряд методов для ускорения доступа к диску, включая отложенное распределение, которое:

Это имеет эффект группирования распределений в более крупные серии. Такая задержанная обработка уменьшает использование ЦП и имеет тенденцию уменьшать фрагментацию диска, особенно для файлов, которые растут медленно. Это также может помочь сохранить непрерывность выделения, когда несколько файлов растут одновременно.

Потеря данных довольно редко из-за использования журналирования.

Ext4 теперь является файловой системой по умолчанию в последних выпусках Linux, хотя вы, вероятно, захотите убедиться, что ядро, которое вы используете, по крайней мере, 2.6.30

1

Вы можете увидеть мой ответ здесь: зарезервируйте RAM для кеша и буфера. Если вы хотите зарезервировать память для кеша и буфера: echo 10> /proc /sys /vm /vfs_cache_pressure, когда 100 является значением по умолчанию. Затем вы можете ограничить максимальную оперативную память, используемую каждым приложением: echo 8192> /proc /sys /vm /max_map_count.

1

Используйте mmap для этих файлов - он использует превосходное кэширование ядра, что делает его намного быстрее.

0

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

Дисковый кеш Linux очень ненавязчив. Он использует запасную память для значительного увеличения скорости доступа к диску и не отнимает память у приложений.

Проверьте, сколько оперативной памяти имеет ваша система и можете ли вы увеличить ее.
Для этого не нужен RAM-диск,
дисковый кеш будет хорошо работать со всем доступным объемом оперативной памяти.

0

RapidCache предоставляет RAM-диск с сквозной записью, но в настоящее время находится в стадии бета-тестирования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .