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

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

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

Или есть ли способ создать псевдодиск, который пишет - до реального диска?

20
задан Will 17 February 2010 в 16:12
поделиться

5 ответов

По умолчанию Linux использует свободную оперативную память (почти всю) для кэширования обращений к диску и задерживает запись. Эвристика, используемая ядром для выбора стратегии кэширования, не идеальна, но победить ее в конкретной ситуации непросто. Кроме того, в файловых системах с журналированием (т.е. во всех файловых системах по умолчанию в настоящее время), фактическая запись на диск будет выполняться таким образом, чтобы быть устойчивой к сбоям; это подразумевает некоторые накладные расходы. Вы можете попробовать поработать с опциями файловой системы. Например, для ext3 попробуйте монтировать с data=writeback или даже async (эти опции могут повысить производительность файловой системы за счет снижения устойчивости к сбоям). Также используйте noatime для снижения активности файловой системы.

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

23
ответ дан 29 November 2019 в 23:23
поделиться

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

/sbin/hdparm -W 0 /dev/hda 0 Disable write caching
/sbin/hdparm -W 1 /dev/hda 1 Enable write caching

Очевидно, что если кэширование записи включено, то существует вероятность потери или повреждения данных, если ваша система некорректно завершает работу (например, отключение питания).

С точки зрения программного обеспечения, ядро ​​Linux использует два основных числа для параметризации поведения записи.

/proc/sys/vm/dirty_ratio
/proc/sys/vm/dirty_background_ratio

Современные настройки по умолчанию - писать чаще, чтобы избежать резких скачков записи . Вы можете попробовать настроить их под свои нужды. Вот отличное обсуждение доступных параметров и способов их настройки.

17
ответ дан 29 November 2019 в 23:23
поделиться

Вы можете создать ramdisk и RAID-1 с физическим разделом. Посмотрите на параметры --write-most и --write-behind. Вы можете использовать их, чтобы сделать физический диск таким, с которого нельзя читать (только записывать), и установить количество невыполненных операций записи, соответственно.

Как вариант, посмотрите документацию по pdflush. Вот хорошая страница: http://www.westnet.com/~gsmith/content/linux-pdflush.htm (также ссылка на ire_and_curses) Помимо того, что я упомянул, вы » Возможно, вам захочется поднять swappiness до 100, чтобы предпочтение было отдано кешу диска, а не подкачке.

Но было бы неплохо узнать, как все это работает, и настроить его под свое конкретное приложение. Linux уже настроен для общего случая, и только вы знаете, чем отличается ваша конкретная ситуация. :)

12
ответ дан 29 November 2019 в 23:23
поделиться

Вопрос здесь в том, какая долговечность вам нужна?

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

Приложения, конечно, могут принудительно записывать данные обратно с помощью (например) fdatasync() и fsync().

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

1
ответ дан 29 November 2019 в 23:23
поделиться

Может быть, вам нужен SSD-диск с ОЗУ?

-5
ответ дан 29 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: