Как называется пространство имен в Linux, связанное с ограничением и учетом ресурсов?

Ответ

Это cgroups (control groups) — механизм ядра Linux для организации процессов в иерархические группы с целью ограничения, учета и изоляции ресурсов (CPU, память, диск I/O, сеть).

Основные подсистемы (controllers):

  • cpu, cpuset: Ограничение и привязка к CPU.
  • memory: Ограничение использования памяти.
  • blkio: Ограничение ввода-вывода на блочных устройствах.
  • pids: Ограничение количества процессов.

Практический пример (v2):

# Создание cgroup для ограничения памяти сервиса
sudo mkdir /sys/fs/cgroup/mycgroup
# Установка лимита в 512 МБ
echo 536870912 > /sys/fs/cgroup/mycgroup/memory.max
# Помещение текущего shell-процесса в группу
echo $$ > /sys/fs/cgroup/mycgroup/cgroup.procs
# Теперь все процессы, запущенные из этого shell, будут ограничены 512 МБ

Cgroups являются фундаментальной технологией для контейнеризации (Docker, Kubernetes), обеспечивая изоляцию ресурсов между контейнерами.

Ответ 18+ 🔞

А, блядь, cgroups! Ну это же, ёпта, основа основ, на которой весь этот ваш Docker и Kubernetes стоит, как слон на трёх ногах. Если без мата — это такие группы управления в Линуксе, которые процессы по стойке «смирно» строят и говорят: «Ты, падла, больше столько памяти не получишь, а ты — на эти ядра процессора, и ни шага в сторону!».

Основные пакостники, которые ресурсы делят:

  • cpu, cpuset: Это чтоб процессором командовать. Одному — все ядра, другому — одно, и сиди там, не высовывайся.
  • memory: А вот это — святое. Чтоб какой-нибудь жадный до памяти процесс всю систему не положил, ему тут лимит ставят. «Больше 512 мегов — ни-ни!».
  • blkio: Чтоб диск не угробить. Чтоб один контейнер весь SSD в хлам не износил своими запросами.
  • pids: А это чтоб плодиться без меры не начали. Ограничение на количество потомков, а то размножатся как тараканы — и всё, система встала.

Смотри, как это на практике выглядит (вторая версия, она сейчас модная):

# Создаём свою собственную тюрьму для процессов
sudo mkdir /sys/fs/cgroup/mycgroup
# Ставим лимит на память — 512 МБ, и ни байтом больше!
echo 536870912 > /sys/fs/cgroup/mycgroup/memory.max
# А теперь ловим текущую оболочку и сажаем её в эту тюрьму
echo $$ > /sys/fs/cgroup/mycgroup/cgroup.procs
# Всё. Теперь всё, что отсюда запустится, будет сидеть на пайке в полгигабайта. Попробуй вылезти!

Вот эта вся, блядь, магия и позволяет запускать кучу контейнеров на одной машине, чтобы они друг другу не мешали и ресурсы не отжирали. Без cgroups был бы пиздец и бардак, а с ними — хоть какое-то подобие порядка. Фундамент, ёбана!