Код: Выделить всё
[Container]
Image=...
CPUs=4
CPusetCpus=0-3
CPUShares=1024
Например:
Код: Выделить всё
[Container]
Image=docker.io/library/nginx:latest
ContainerName=nginx
CPUs=2
CPusetCpus=4-5Код: Выделить всё
[Container]
Image=...
PodmanArgs=--cpus=2 --cpuset-cpus=4-5Если твоя задача — закрепить контейнер за определёнными ядрами, то достаточно:
Код: Выделить всё
[Container]
CPusetCpus=0-7Код: Выделить всё
[Container]
CPUs=2Код: Выделить всё
[Container]
CPUs=2
CPusetCpus=4-7Ошибка
OCI runtime error: crun: controller `cpuset` is not available
означает, что в твоей cgroup-конфигурации контроллер cpuset не доступен контейнеру. Обычно это встречается при:
rootless Podman;
systemd не делегирует cpuset;
cgroup v2 без включенного контроллера cpuset в родительской cgroup.
Проверь:
Код: Выделить всё
cat /sys/fs/cgroup/cgroup.controllersЕсли cpuset есть:
Код: Выделить всё
cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/cgroup.controllersНа современных systemd нужно добавить в сервис пользователя:
Код: Выделить всё
[Service]
Delegate=cpu cpuset memory pidsКод: Выделить всё
cat /sys/fs/cgroup/cgroup.subtree_control+cpuset
Но это уже настройка хоста и не всегда возможна.
Покажи вывод:
Код: Выделить всё
podman info | grep -A20 cgroup
cat /sys/fs/cgroup/cgroup.controllers
cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/cgroup.controllerspodman info | grep -A20 cgroup
cat /sys/fs/cgroup/cgroup.controllers
cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/cgroup.controllers
cgroupControllers:
- cpu
- memory
- pids
cgroupManager: systemd
cgroupVersion: v2
conmon:
package: conmon-2.2.1-3.el10.x86_64
path: /usr/bin/conmon
version: 'conmon version 2.2.1, commit: '
cpuUtilization:
idlePercent: 76.35
systemPercent: 2.62
userPercent: 21.03
cpus: 8
databaseBackend: sqlite
distribution:
distribution: centos
version: "10"
eventLogger: journald
freeLocks: 2046
hostname: localhost.localdomain
idMappings:
gidmap:
- container_id: 0
host_id: 1000
cpuset cpu io memory hugetlb pids rdma misc dmem
cpu memory pids
По выводу видно, в чём проблема.
На хосте есть:
Но в пользовательской cgroup (user.slice) доступны только:cpuset cpu io memory hugetlb pids rdma misc dmem
То есть systemd не делегировал контроллер cpuset пользовательскому менеджеру, поэтому rootless Podman не может использовать --cpuset-cpus.cpu memory pids
Это не проблема Podman или crun — это ограничение конфигурации systemd.
Если нужен rootless
Проверь:
Скорее всего увидишь, что cpuset отсутствует.systemctl --user show -p Delegate
systemctl --user show -p DelegateControllers
На системах с systemd 252+ можно включить делегирование через drop-in для user@.service.
Создай:
Код: Выделить всё
/etc/systemd/system/user@.service.d/delegate.confЗатем:[Service]
Delegate=cpu cpuset io memory pids
Код: Выделить всё
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo loginctl terminate-user $USERПосле этого проверь:
Код: Выделить всё
cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/cgroup.controllersто CPusetCpus= в Quadlet заработает.cpuset cpu memory pids