- Вопрос или проблема
- Ответ или решение
- Как настроить cgroup v2 для ограничения использования оперативной памяти и неограниченного использования swap
- Проблема
- Настройки cgroup v2
- 1. Проверьте доступные параметры cgroup
- 2. Создайте cgroup
- 3. Установите ограничения для RAM и swap
- 4. Запустите ваш процесс в cgroup
- 5. Проверьте использование памяти
- Заключение
Вопрос или проблема
Поскольку Ubuntu 21.10 поставляется с Cgroup V2, и моему проекту, похоже, нужны ограничения по памяти, я решил его использовать, но у меня возникли некоторые проблемы. Мне нужно много ОЗУ для тестирования идеи, поэтому, поскольку мой процессор не может принять более 128 ГБ ОЗУ, я решил взять немного ОЗУ с другого сервера в качестве SWAP.
Я смонтировал раздел с 512 ГБ ОЗУ на втором сервере и использовал NFS-сервер, чтобы позволить моему первому серверу получить к нему доступ в качестве клиента. У этих двух серверов есть соединение 40 Гбит/с между ними, так что этого достаточно для теста. На первом сервере я смонтировал NFS-раздел со второго сервера и создал файл подкачки на нем, и я был готов к тестированию с 128 ГБ ОЗУ и 512 ГБ SWAP.
После того как я начал тест и превышал 128 ГБ ОЗУ, мой сервер завис, потому что работающим утилитам не хватало места для работы в ОЗУ, и я решил ограничить использование памяти с помощью cgroup.
Проблема: Когда я устанавливаю ограничение MemoryHigh, оно работает хорошо, после ограничения идет заполнение SWAP, но останавливается на том же лимите, что и ОЗУ. Как-то cgroup ограничивает использование SWAP именно такой же емкостью, как и память ОЗУ. Поэтому, если я устанавливаю MemoryHigh=110G, я могу использовать 110 ГБ ОЗУ и 110 ГБ SWAP, кто-нибудь знает, как настроить cgroup, чтобы разрешить SWAP без ограничений?
изображение описания рисования
Вероятно, это уже не актуально для автора, но судя по комментариям, люди все еще ищут это.
Существует настройка MemorySwapMax
, решает ли это проблему? Файлы управления cgroup в /sys/fs/cgroup/path/to/your/services/cgroup/
также имеют memory.swap.max
, memory.swap.high
и memory.swap.current
. Содержащиеся в них ограничения или установка любого из этих параметров решает проблему?
Если нет, возможно, существует ограничение в одной из родительских cgroups, поэтому проверьте и их.
Ответ или решение
Как настроить cgroup v2 для ограничения использования оперативной памяти и неограниченного использования swap
В последних версиях Ubuntu, включая 21.10, используется cgroup v2 (control groups version 2), который предоставляет расширенные функции управления ресурсами для процессов в Linux. Если вы хотите ограничить использование оперативной памяти (RAM), но при этом обеспечить неограниченный доступ к swap, необходимо выполнить несколько шагов. Рассмотрим проблему и способы её решения.
Проблема
Ваша задача состоит в том, чтобы ограничить использование RAM до определённого предела (например, 110 ГБ), но разрешить использование swap без ограничений. При использовании cgroup v2 с настройкой MemoryHigh
вы заметили, что процесс не может использовать swap за пределами лимита, установленного для RAM. При достижении установленного ограничения RAM, ошибки и проблемы с производительностью могут возникнуть, если система достигает этого лимита.
Настройки cgroup v2
Чтобы достичь вашей цели, выполните следующие шаги:
1. Проверьте доступные параметры cgroup
В cgroup v2 доступны различные параметры, которые могут помочь вам в управлении ресурсами:
memory.max
: Ограничивает максимальный объем используемой памяти.memory.high
: Устанавливает верхний предел для использования памяти, но позволяет системе использовать swap в исключительных ситуациях.memory.swap.max
: Этот параметр отвечает за ограничение максимального использования swap и может помочь в вашей ситуации.
2. Создайте cgroup
Создайте новую cgroup для вашего процесса:
sudo mkdir /sys/fs/cgroup/my_cgroup
echo "+memory" > /sys/fs/cgroup/my_cgroup/cgroup.subtree_control
3. Установите ограничения для RAM и swap
Следующие команды покажут, как настроить memory.high
для ограничения RAM и memory.swap.max
для неограниченного доступа к swap:
- Установите лимит для оперативной памяти:
echo 110G > /sys/fs/cgroup/my_cgroup/memory.high
- Настройте неограниченное использование swap, если это соответствует вашей задаче:
echo infinity > /sys/fs/cgroup/my_cgroup/memory.swap.max
4. Запустите ваш процесс в cgroup
Запустите ваш процесс в созданной cgroup. Это можно сделать с помощью команды cgexec
, которая позволяет вам исполнять процессы в контексте cgroup:
sudo cgexec -g memory:my_cgroup your_process_command
5. Проверьте использование памяти
Для мониторинга использования памяти и swap вы можете использовать следующие команды:
cat /sys/fs/cgroup/my_cgroup/memory.current # Получить текущее использование RAM
cat /sys/fs/cgroup/my_cgroup/memory.swap.current # Получить текущее использование swap
Заключение
Настройка cgroup v2 для ограничения RAM и свободного использования swap требует корректной настройки параметров cgroup. Убедитесь, что вы используете правильные значения для memory.high
и memory.swap.max
, чтобы добиться желаемого поведения вашей системы. Этот подход поможет вам оптимально распределять ресурсы между процессами, не допуская зависания или перехода в состояние отсутствия памяти.
Если после выполнения всех этих шагов возникли какие-либо сложности, возможно, потребуется проверить родительские cgroups на предмет запретов или ограничений.