Как мне настроить ядро ​​для полной подкачки?

Как мне настроить ядро ​​для полной подкачки?

Я хотел бы внедрить следующую политику обмена:

  • По умолчанию все страницы в памяти также должны находиться в пространстве подкачки.
  • Если страница в памяти изменена (т.е. загрязнена), ее следует записать как можно скорее, но с более низким приоритетом, чем у других процессов.
  • Если достигнут определенный настраиваемый уровень (например, 80% страниц «грязные»), приоритет будет таким же, как и у других процессов.

Возможна ли такая политика подкачки с ядром Linux? Если да, то как мне установить настройки ядра, чтобы добиться этого?

Редактировать:

Очевидно, что причина этого в том, чтобы уменьшить количество страниц, которые необходимо выгрузить. На диск нужно записывать только грязные страницы, и это происходит в фоновом режиме с течением времени. Поэтому, когда происходит промах страницы (т. е. страница отсутствует в памяти), нет необходимости записывать какие-либо страницы из памяти на диск, а только с диска в память. Поэтому это снижает вероятность узких мест ввода-вывода, поскольку и выгрузка, и загрузка пытаются получить доступ к диску одновременно.

решение1

Вы можете задать значение для /proc/sys/vm/swappinessуправления соотношением сегментов данных, подлежащих свопингу, к сегментам данных, хранящимся в памяти. Значение 0 полностью исключает свопинг любой ценой.

Это можно сделать с помощью одного из следующих способов:

  • echo 0 > /proc/sys/vm/swappiness
  • sysctl -w vm.swappiness=0
  • Сохранение этой настройки в/etc/sysctl.conf

В общем, использование небольшого свопа не является чем-то плохим. Свободная память может использоваться для кэширования данных, считываемых с диска, и система может заранее планировать внезапную потребность приложения в большом количестве памяти.

Однако, когда слишком много программ переставлено, во время каждого переключения программ происходит много дисковых операций, что действительно все замедляет. Прежде чем что-то можно будет использовать, его нужно загрузить обратно в память.

Чтение с дисков ужасно медленное по сравнению с доступом к памяти, так как данные приходят значительно дольше. Системе приходится планировать чтение между другими запросами на чтение/запись, привод начинает пытаться найти нужный цилиндр и, наконец, начинает медленно выдавать данные.

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

Старые компьютеры содержали меньше памяти и в результате страдали от проблем с подкачкой. Когда одновременно открывалось много программ, система замедлялась, и можно было услышать, как диск считывается и записывается в файл подкачки.

решение2

То, что ваша система использует подкачку, не означает, что у вас проблема. Существуют приложения, которые тонко настроены, чтобы извлечь большую пользу из подкачки, не снижая производительности системы. Большинство систем реляционных баз данных настроены таким образом: IE: Oracle и Cache, вероятно, самые большие две.

Если вы используете спящий режим, он использует пространство подкачки для хранения оперативной памяти. При загрузке системы в режиме резервного копирования все, что находится в подкачке, добавляется обратно в оперативную память. Таким образом, вы можете выключить систему, не разряжая батарею, как в режиме ожидания, и все равно вернуться к тому месту, на котором остановились перед выключением. В результате ваша батарея прослужит гораздо дольше.

Своппинг может быть отличной вещью, поскольку он освобождает больше вашей активной оперативной памяти, чтобы поддерживать высокую производительность вашей системы. Когда ваша активная оперативная память заполнена И ваш своп заполнен, и вам все еще нужно больше места, тогда и только тогда у вас есть проблема. До этого момента своп здесь, чтобы помочь вам, а не навредить вам.

решение3

Добавляя к ответу vdboor, я думаю, что для достижения желаемого вам нужно будет изменить больше, чем swappiness. Есть больше доступных настроек ядра, которые управляют тем, как используется swap. Пользователь может получить к ним доступ во время выполнения через /proc/sys/vm/*файлы или установить их постоянно /etc/sysctl.conf(для этого может потребоваться добавление sysctlсценария init в последовательность загрузки, чтобы это имело эффект)

Настройки подробно описаны в документации ядра Linux. Вы можете найти ее в разделе <your_kernel_sources_path>/Documentation/sysctl/vm.txt. Вы также можете ознакомиться с онлайн-документациейтакой как этот.

Связанный контент