Intereting Posts
как сказать firefox отключиться от tty1? XKB: назначить несколько кодов клавиш для одного поведения (<ESC>) Могу ли я захватить и отправить запросы GET с помощью wget? Смонтируйте внешний защищенный от записи диск с неверной геометрией на Ubuntu Server 16.04 Случайные сбои на XFCE – как диагностировать, что происходит? Удаленный рабочий стол, такой как screen / tmux (из окон) Fedora 22, кодовая фраза для шифрования диска, POST не работает, обрезается gst123 не воспроизводит файлы в правильном порядке при воспроизведении папок / Копирование / вставка не всегда работает с Firefox на терминал Сценарий оболочки пакета как RPM Partclone: ​​ошибка при попытке копирования разделенных блоков-блоков Цепочные команды конфигурации tmux с помощью команды «run» «Постоянно добавлен ключ хоста RSA», что это значит? Byobu / Tmux копирует всю строку переупорядочить GRUB для отображения Windows сверху

Как сделать файлы внутри TMPFS более вероятными для обмена

Я использую tmpfs для каталога my /tmp . Как я могу заставить компьютер решить поменять файлы внутри /tmp прежде чем заменять все, что используется приложениями?

В основном файлы внутри /tmp должны иметь более высокую swappiness по сравнению с памятью, используемой процессами.

Кажется, этот ответ https://unix.stackexchange.com/a/90337/56970 имеет большой смысл, но вы не можете изменить swappiness для одного каталога. Однако я знаю о группах, но я не вижу способа сделать tmp в cgroup?

Если все пойдет хорошо, ваше ядро ​​должно решить «сделать все правильно» само по себе. Он использует много причудливых эвристик, чтобы решить, что менять и что нужно делать, когда есть давление памяти. Эти эвристики были тщательно построены действительно умными людьми с большим опытом управления памятью и уже достаточно хороши, что их довольно сложно улучшить.

Ядро использует комбинацию таких вещей, чтобы решить, что менять:

  • Как недавно использовалась память.
  • Изменена ли память с момента ее сопоставления. Так, например, разделяемая библиотека будет вытеснена из памяти кучи, поскольку память кучи грязная и ее необходимо записать для обмена, тогда как память с отображением разделяемой библиотеки может быть загружена снова из исходного файла на диске, если она понадобится снова , поэтому нет необходимости писать эти страницы для обмена. Здесь вы должны понимать, что память tmpfs всегда грязная (если только это не новая страница, заполненная нулями), потому что она ничем не подкреплена.
  • Подсказки из mprotect() .
  • Скорее всего, еще много.

Короткий ответ: нет, вы не можете напрямую переопределять решения ядра о том, как управлять памятью.

cgroup предназначены для управления приложениями, а не файловыми системами. То, что вам нужно, должно быть либо параметром sysctl, либо mount, поскольку это для всей файловой системы. К сожалению, это не похоже на то, что одна из этих двух функций была создана для этой проблемы. Вероятно, это связано с тем, насколько уникальна такая проблема.

Чтобы обойти это, вы можете попробовать написать cronjob, например:

 */5 * * * * find /tmp -type f -exec cat {} \; >/dev/null 2>&1 

Это должно заставить ядро ​​прочитать все файлы, в результате чего страницы будут заменены обратно в память.

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

Какова реальная цель здесь?