Как удалить грязные страницы файлового кэша ОС на диски?

#linux #file #caching

#linux #файл #кэширование

Вопрос:

Linux использует оставшуюся память для своего файлового кэша

В моем приложении (написанном на C ) я хотел бы время от времени явно удалять грязные страницы на диски (использование O_DIRECT мне не подходит)

Я попробовал fflush(), но, похоже, это не то, что я хотел

Есть ли какой-либо способ удалить грязные страницы файлового кэша ОС на диски?

Спасибо

Ответ №1:

Вы можете использовать sync_file_range() для поощрения очистки в Linux, но, к сожалению, вы не можете использовать sync_file_range() для гарантии надежности файлов / целостности данных — это просто подсказка, которая может помочь начать очистку (смотрите Это Видео Linux Plumbers Conference 2019, в котором разработчик Postgres Андрес Фройнд жалуется на sync_file_range() manpage и ответ от разработчика файловой системы Яна Кары). Короче говоря: это может помочь вызвать очистку, но вам нужно будет добавить / использовать что-то еще, чтобы узнать долговечность.

Я полагаю, что все обычные sync вызовы стиля файлового дескриптора ( fsync() и fdatasync() т. Д.) Также намекают на то, что вы хотите, чтобы обратная запись начиналась, но более жестким способом по сравнению с sync_file_range() (потому что они также принудительно очищают энергонезависимые кэши устройств).)…