запись через RAM-диск или массовое кеширование файловой системы?

10832
Will

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

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

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

5

7 ответов на вопрос

5
Anon

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

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

хм ... последний ответ перед моим был 3 месяца назад, ОП не видели с момента публикации вопроса, никаких других очевидных действий, но он появился на первой странице ... Я думаю, система пытается получить ответы на вопросы Anon 14 лет назад 0
Это как раз то, для чего нужен аккаунт Сообщества - натыкаясь на оставшиеся без ответа вопросы. http://stackoverflow.com/users/-1/community Corey 14 лет назад 0
: shrug: ОП уже давно нет, а больше никому нет дела Anon 14 лет назад 0
Мне все равно, и я вернулся; у меня уйдет время, чтобы переварить ваш вопрос и ответить на него честно, наберитесь терпения Will 14 лет назад 0
5
RolKau

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

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

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

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

Значение параметров: http://www.mjmwired.net/kernel/Documentation/filesystems/ext3.txt netvope 13 лет назад 3
1
Hamish Downer

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

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

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

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

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

1
gthomas

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

1
Bytemain

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

0
nik

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

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

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

Я не думаю, что речь идет о Linux, эффективно использующей оперативную память, а скорее о кэшировании диска, как о Linux, эквивалентном FlashFire: http://flashfire.org/xe/ 14 лет назад 0
0
Martin

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