Как заставить функцию cpuset.cpu_exclusive cpuset работать правильно

Я пытаюсь использовать ядро cpuset изолировать мой процесс. Чтобы получить это, я следую инструкциям (2.1 Основное использование) из ядра doc cpusets, однако в моей среде это не сработало.

Я пробовал как на моем сервере centos7, так и на моем рабочем компьютере ubuntu16.04, но ни один из них не работал.

  1. версия ядра Centos:
[root@node ~]# uname -r
3.10.0-327.el7.x86_64
  1. Версия ядра Ubuntu:
4.15.0-46-generic

Я попробовал следующее.

root@Latitude:/sys/fs/cgroup/cpuset# pwd
/sys/fs/cgroup/cpuset
root@Latitude:/sys/fs/cgroup/cpuset# cat cpuset.cpus
0-3
root@Latitude:/sys/fs/cgroup/cpuset# cat cpuset.mems
0
root@Latitude:/sys/fs/cgroup/cpuset# cat cpuset.cpu_exclusive
1
root@Latitude:/sys/fs/cgroup/cpuset# cat cpuset.mem_exclusive
1
root@Latitude:/sys/fs/cgroup/cpuset# find . -name cpuset.cpu_excl
usive | xargs cat
0
0
0
0
0
1
root@Latitude:/sys/fs/cgroup/cpuset# mkdir my_cpuset
root@Latitude:/sys/fs/cgroup/cpuset# echo 1 > my_cpuset/cpuset.cpus
root@Latitude:/sys/fs/cgroup/cpuset# echo 0 > my_cpuset/cpuset.mems
root@Latitude:/sys/fs/cgroup/cpuset# echo 1 > my_cpuset/cpuset.cpu_exclusive
bash: echo: write error: Invalid argument
root@Latitude:/sys/fs/cgroup/cpuset#

Он просто напечатал ошибку bash: echo: write error: Invalid argument, Google это, однако, я не могу получить правильные ответы.

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

Используя ps -o pid,psr,comm -p $PIDЯ могу подтвердить, что процессор может быть назначен на какой-то процесс, если мне все равно cpu_exclusive, Но я также доказал, что если cpu_exclusive не установлен, тот же процессор может быть также назначен другим процессам.

Я не знаю, так ли это, потому что некоторые предварительные настройки пропущены.

То, что я ожидал, это "использование cpuset для эксклюзивного использования cpus". Может ли кто-нибудь дать какие-либо подсказки?

Спасибо большое.

1 ответ

Решение

Я считаю, что это неправильное понимание флага cpu_exclusive, как я и сделал. Вот документ https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt, цитата:

If a cpuset is cpu or mem exclusive, no other cpuset, other than
a direct ancestor or descendant, may share any of the same CPUs or
Memory Nodes.

так что одна из возможных причин у вас есть bash: echo: write error: Invalid argumentявляется то, что у вас включен какой-либо другой cpuset cgroup, и это конфликтует с вашими операциями echo 1 > my_cpuset/cpuset.cpu_exclusive

пожалуйста, беги find . -name cpuset.cpus | xargs cat перечислить все целевые процессоры вашей группы.

Предположим, у вас есть 12 процессоров, если вы хотите установить cpu_exclusive из my_cpusetВам необходимо тщательно изменить все остальные группы, чтобы использовать cpus, например. 0-7, затем установите процессор my_cpuset быть 8-11. После всех этих конфигураций cpus вы можете установить cpu_exclusive равным 1.

Но все же, другой процесс все еще может использовать процессор 8-11. Только задачи, которые принадлежат другим группам, не будут использовать процессор 8-11

для меня у меня был запущен какой-то докер-контейнер, который мешает мне установить мой процессор cpu_exclusive

с ядром doc, я не думаю, что можно использовать cpus исключительно самой cgroup. Один из подходов (я знаю, что этот подход работает в рабочей среде) заключается в том, что мы изолируем процессор и сами управляем сродством / процессором процессора.

Другие вопросы по тегам