Как заставить функцию cpuset.cpu_exclusive cpuset работать правильно - PullRequest
0 голосов
/ 04 апреля 2019

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

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

  1. версия ядра centos:
[root@node ~]# uname -r
3.10.0-327.el7.x86_64
версия ядра 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 Ответ

1 голос
/ 29 апреля 2019

Я считаю, что это неправильное понимание флага 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, вам необходимо тщательно изменить все остальные группы для использования процессоров, например. 0-7, затем установите для процессора my_cpuset значение 8-11. После всех этих конфигураций процессора вы можете установить cpu_exclusive равным 1.

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

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

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

...