Можно ли в Linux отключить кеширование файловой системы для определенных файлов?

Я протестировал все предоставленные вами решения, но ни одно из них не работает ... я заметил, что когда я пытался запустить apache2, выскакивает ошибка, он создает новый каталог с расширением diff /var/lock/apache2.uEM, /var/lock/apache2.gpk и т. д.

1
21.06.2018, 02:50
2 ответа

Вы ищете Java-эквивалент флага O_DIRECTдля open(2). См.http://man7.org/linux/man-pages/man2/open.2.html

1
27.01.2020, 23:23

Это можно сделать для открытого экземпляра файла, но не для самого файла постоянно. Вы делаете это для каждого экземпляра открытого файла, используя прямой ввод-вывод. Я не знаю, как это сделать в Java, но в C и C++ вы передаете флаг O_DIRECTвызову open().

Обратите внимание, однако, что это имеет пару потенциально проблематичных последствий, а именно:

  • В некоторых файловых системах это просто опасно. В частности, текущие версии BTRFS имеют серьезные проблемы с прямым вводом-выводом при записи в файл.
  • Вы не можете смешивать прямой ввод-вывод с обычным кэшированным вводом-выводом, если не используете какую-либо форму синхронизации. Кэшированные записи не будут отображаться для прямого чтения ввода-вывода до тех пор, пока вы не вызовете fsync()или fdatasync(), а прямая запись ввода-вывода может вообще не отображаться для кэшированного чтения ввода-вывода .

Однако существует альтернативный метод, если вы можете допустить временное хранение данных в кэше.Вы можете использовать интерфейс POSIX fadvise (через системный вызов posix_fadviseв Linux ), чтобы сообщить ядру, что вам не нужны данные из файла, когда вы закончите его чтение. С помощью флага POSIX_FADV_DONTNEEDвы можете указать ядру удалить определенную область определенного файла из кеша. На самом деле вы можете сделать это, когда вы обрабатываете файл (, читая фрагмент, а затем сразу после чтения вызывая posix_fadviseв этой области файла ), хотя области, которые вы вызываете, должны быть выровнены. к размеру страницы системы. Как правило, это предпочтительный переносимый метод обработки вещей, поскольку он работает на любой POSIX-совместимой системе с реальными -расширениями времени (, что практически соответствует любой POSIX-совместимой системе ).

3
27.01.2020, 23:23

Теги

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