Intereting Posts
Как работает система сборки пакетов портов? Почему разница в tar czf в Debian 8.5 и 8.7? Как перебирать список файлов с отсортированными пробелами (без учета регистра)? Состояние аккумулятора Lenovo T440s неизвестно, но зарядка? / tmp гарантированно существует? Как создаются системные команды, такие как ls? Как оценить качество сетевого подключения сервера с помощью traceroute? Ошибка установки Linux, связанная с файловой системой Получение текста от последнего маркера до EOF в POSIX.2 Как наложить аудиофайл на один файл изображения для видеоизображения, оптимизированного на YouTube, из командной строки? Использование кавычек в регулярных выражениях GNU grep Нужно ли монтировать / загружаться на отдельный первичный раздел? команда, которая работает как символ ~ (тильда) для представления некоторого каталога Некоторые символы UTF-8, которые не распознаются grep или sed Как использовать `which` в команде aliased?

Linux не бросает FS Caches. Вместо этого память начинает свопинг

Я довольно смущен этим поведением кэширования Linux-памяти.

total used free shared buffers cached Mem: 15953 14188 1765 64 37 11504 -/+ buffers/cache: 2645 13308 Swap: 2047 1332 715 

Не должен ли быть приоритет кэшированной памяти против кешей? Другими словами: почему машина переключается на диск, вместо того, чтобы отбрасывать кеши.

Могу ли я изменить это поведение? Если да, то как?

Алгоритм замены linux работает с концепцией «последних недавно использованных страниц». Каждая страница в виртуальной памяти имеет возраст, связанный с ней. Если страница часто обращается к ней, тогда эта страница должна быть довольно молодым по возрасту, а если страница недоступна, то эта страница становится старше. Чем старше страницы, тем вероятнее, что они могут быть заменены.

Так что, если ядро ​​меняет материал, то это потому, что возраст этих страниц (по сравнению с другими) старый. Если для всех страниц достаточно физической памяти, независимо от их возраста, ничто не будет заменено.

Ядро сконфигурировано таким образом, чтобы максимально эффективно использовать его ресурсы, такие как память и своп.

Я не думаю, что вы должны изменить это поведение. Но, если хотите, вы можете изменить системную swappiness. Значение swappiness of 0 означает, что диск будет устранен, если не будет абсолютно необходимо (у вас закончится нехватка памяти).

Из документации ядра о ценности swappiness :

Этот элемент управления используется для определения того, насколько агрессивно ядро ​​будет заменять страницы памяти. Более высокие значения увеличивают агрессивность, более низкие значения уменьшают количество свопов. Значение 0 указывает ядру не инициировать своп до тех пор, пока количество свободной и поддерживаемой файлами страниц будет меньше, чем знак высокой воды в зоне.

В исходном коде ядра Linux файл vmscan.c обрабатывает значение swappiness. Вот интересующая часть:

 2018 /* 2019 * With swappiness at 100, anonymous and file have the same priority. 2020 * This scanning priority is essentially the inverse of IO cost. 2021 */ 2022 anon_prio = swappiness; 2023 file_prio = 200 - anon_prio; 
  • Анонимные страницы – это сопоставления памяти без файла или устройства, поддерживающего его. Это то, как программы выделяют память из операционной системы для использования такими вещами, как стек и куча.
  • Страницы файлов отражают содержимое существующего файла.

Как видно из фрагмента исходного кода выше, приоритет для обмена файловыми страницами (со значением по умолчанию 60) выше, чем для обмена анонимными страницами. Но, если установлено значение 100, оба значения имеют одинаковый приоритет. Если установлено значение 0, разница приоритетов максимально велика.

Вы можете установить swappiness следующим образом:

 echo n >/proc/sys/vm/swappiness 

… где n – значение от 0 до 100.