Можно ли выборочно очистить контент из определенной файловой системы или файла / каталога в файловой системе под Linux.
Это можно сделать глобально с помощью sync; echo 3 > /proc/sys/vm/drop_caches
и для всей файловой системы путем временного размонтирования и повторного монтирования, но я не встречал более детального варианта.
Зачем мне это нужно? Если была кэширована группа блоков из-за ввода-вывода из процесса, который будет повторяться позже, а затем выполняется одноразовая (или регулярная, но не частая) задача, которая приводит к кэшированию фрагмента данных ( но недостаточно, чтобы вытолкнуть первую партию), я мог бы сказать ядру, что меня больше не волнует вторая партия блоков, так что, если происходит третий фрагмент ввода-вывода, он будет удален, а не первая загруженная партия с диска - так что задача, которая скоро будет повторяться, не замедлится при следующем запуске из-за одноразовой задачи.
В качестве альтернативы, есть ли способ запустить процесс таким образом, чтобы сообщить ядру: «Это один раз, не старайтесь изо всех сил кэшировать то, чего оно касается после завершения».
Конечно, это могло быть связано с тем, что я хочу тратить время на мелкое управление чем-то, что я должен оставить, и позволить ядру работать без помех ...
Зачем тебе это делать? Скорее всего, вы захотите, чтобы данные кэшировались во время выполнения. После завершения выполнения кэшированные данные будут устаревать из памяти по мере поступления новых запросов. Между тем, они будут оставаться в неиспользуемой в противном случае памяти.
Выполнение необработанного ввода-вывода, скорее всего, сохранит буферизацию во внутреннем кэше накопителя. Это может привести к снижению производительности приложения, так как вы потеряете кэширование операционной системы и последующее ускорение. Когда я впервые начал беспокоиться об относительной скорости доступа, она была порядка 100/1 в пользу памяти. С тех пор преимущество кэширования по сравнению с вводом-выводом неуклонно растет.
Любые соображения безопасности - спорный вопрос, поскольку образ диска, скорее всего, будет доступен.
Системный вызов для этого в Linux: фантазия где вы можете предложить кэшировать или не кэшировать разные файлы, а также предложить тип шаблона чтения (то есть последовательное или случайное). Кто-то написал для этого оболочку командной строки на perl Вот. Я думаю, что вас интересуют два варианта:
-dontneed
Announces the expectation that file content won't be needed in
the near future.
Under Linux 2.6.9, this is known to cause the file content to be
evicted from the buffer-cache immediately.
Note that this option first causes an fsync of the file.
-noreuse
Announces the expectation that file content won't be reused in
the near future.