Смешивание cpuset.cpus и cpuset.mems cgroups с cpu.shares с memory.limit_in_bytes

Я немного не понимаю, как работают cgroups. Вот мое понимание этих ограничений cgroup ...

  • cpuset.cpus привязывается к определенному ядру
  • cpuset.mems привязывается к определенному узлу NUMA
  • cpu.shares сообщает планировщику, что нужно выделить определенный процент вычислительной мощности процессора.
  • memory.limit_in_bytes ограничивает объем памяти, доступной процессу

Итак, что происходит, когда вы привязываете процесс к определенному процессору, процессору и памяти? Некоторые примеры...

  1. Что произойдет, если количество узлов NUMA, которые я привязываю, составляет 8 ГБ, но я установил ограничение памяти на 12 ГБ?
  2. Что произойдет, если я привяжусь к ядрам 0 и 1, но установлю общие ресурсы процессора на 2 из 1024?

Кроме того, как мне узнать подробности / характеристики ядер / узлов NUMA, на которые я ссылаюсь в cpuset?


person offbynull    schedule 03.03.2018    source источник


Ответы (1)


такая же путаница. Но, судя по моему тесту, если cpuset.cpu_exclusive = 0 (ядра используются совместно), работают как cpu.shares, так и cpuset.cpus. Тест выглядит следующим образом.

  1. создать две контрольные группы: cputest1 и cputest2 (та же иерархия под корнем)

  2. для cputest1 и cputest2 выполните:

    эхо 0,2> cpuset.cpus echo 0> cpuset.mems

  3. новый терминал а

    cd / sys / fs / cgroup / cpuset / cputest1 echo $$ >> cgroup.proc while:; выполнить эхо-тест> / dev / null; сделано

новый терминал b

cd /sys/fs/cgroup/cpuset/cputest1
echo $$ >> cgroup.proc
while :; do echo test > /dev/null; done

новый терминал c

cd /sys/fs/cgroup/cpuset/cputest2
echo $$ >> cgroup.proc
while :; do echo test > /dev/null; done

запустить верхнюю часть, есть три задачи bash, и использование процессора для каждой задачи почти одинаково (60% -70%), всего 200%

4. клемма а

echo $$ >> /sys/fs/cgroup/cpu/cputest1/cgroup.proc
while :; do echo test > /dev/null; done

терминал b

echo $$ >> /sys/fs/cgroup/cpu/cputest1/cgroup.proc
while :; do echo test > /dev/null; done

терминал c

echo $$ >> /sys/fs/cgroup/cpu/cputest2/cgroup.proc
while :; do echo test > /dev/null; done

echo 2/2048/1024 > /sys/fs/cgroup/cpu/cputest1/cpu.shares
echo 2048/2/1024 > /sys/fs/cgroup/cpu/cputest2/cpu.shares

запустите верх, чтобы посмотреть использование процессора среди трех задач bash

person chestack    schedule 27.03.2018