Как Linux CFS распределяет нагрузку cgroups в мультипроцессорной системе?
Пытаюсь разобраться как будет вести себя CFS при наличии 2х cgroups с эквивалентными cpu.shares например 8-ми ядерной системе. Интересует только идеальная теоретическая сторона вопроса.
Будет ли каждая cgroups получать 50% от каждого из 8 ядер, или она может быть распределена как угодно но чтобы процесс получил эквивалент 4CPU вычислительных ресурсов?
Пример:
Если представить что у нас есть 8-ми ядерная система и мы запустим 2 контейнера, без квот ограничения, каждый из которых будет находиться в своей cgroup и для каждой будет установлено по умолчанию 1024 shares то, учитывая что cgroups не предоставляют полную изоляцию, то оба контейнера будут видеть все 8 ядер системы и по умолчанию могут использовать суммарно 4 ядра
Я почему-то считал что это будут не 4 выделенных ядра, а по умолчанию это будет 50% от каждого из 8 ядер.
Наверное стоит сделать оговорку что я интересуюсь в рамках особенностей работы Kubernetes.
И вопрос вытекает после прочтения вот этого поста в котором указано
When you specify the CPU limits of a container, you’re actually limiting its CPU time across all of the node’s CPUs, not setting the affinity of the container to a specific CPU or set of CPUs. This means that even if you specify a limit less than the total number of CPUs on a node, your container will still see (and use) all of the node’s CPUs — it’s just the time that’s limited.
For example, specifying a CPU limits of 4 on a node with 8 CPUs means the container will use the equivalent of 4 CPUs, but spread across all CPUs. For a single container running on a dedicated node, the maximum permissible CPU usage across all node CPUs will be 50% in this example.
Эквивалент 4CPU вычислительных ресурсов при возможной 100% загрузке.
RedHat docs
Note that shares of CPU time are distributed per all CPU cores on multi-core systems. Even if a cgroup is limited to less than 100% of CPU on a multi-core system, it may use 100% of each individual CPU core.