Как понять распределение ЦП в Mesos?

Я читаю Создание приложений на Mesos и нахожу следующие утверждения:


процессоры     Этот ресурс выражает, сколько ядер процессора доступно. Задачи могут использовать дробные части CPU - это возможно, потому что ведомые операторы Mesos используют доли CPU, а не резервировать определенные процессоры. Это означает, что если у вас есть 1.5 cpus зарезервировано, вашим процессам будет разрешено использовать в общей сложности 1,5 секунды времени процессора каждую секунду. Это может означать, что в рамках одного исполнителя два процесса получают 750 миллисекунд процессорного времени в секунду или один процесс получает 1 секунду Процессорное время, а другое - 500 миллисекунд времени процессора за каждую секунду. Преимущество использования общих ресурсов процессора заключается в том, что если какая-то задача сможет использовать больше, чем ее общий ресурс, и никакая другая задача не будет использовать другой процессор бездействия, первая задача может потенциально использовать больше, чем ее доля. В результате зарезервированный cpus обеспечивает гарантированный минимум времени процессора, доступного для задачи, если доступна дополнительная емкость, ему будет разрешено использовать больше.

Я не могу понять "if you have 1.5 cpus reserved, your processes will be allowed to use a total of 1.5 seconds of CPU time each second.". Как он может использовать 1.5 секунды CPU раз в секунду?

Ответ 1

Используя более одного процессора/ядра:-).

Обратите внимание, что фактическое поведение/соблюдение этих ограничений будет в значительной степени зависеть от используемого контейнера-контейнера/изолятора. К сожалению, я не нашел никакой хорошей/недавней документации (но я знаю, что есть люди, которые работают над улучшением этого:-)), но вы могли бы взглянуть на это сообщение в блоге: Сообщение в блоге о ресурсах CPU

Обновление На загрузке процессора имеется слишком много ограничений: см.   --[no]-cgroups_enable_cfs параметр конфигурации или Jira.

Ответ 2

cpu=1.5 должен стоять за половину ядра процессора. Вы можете видеть в веб-интерфейсе Mesos Web UI, сколько ядер каждого агента Mesos (slave). Это примерно то, что показывает nproc, если mesos-slave не настроен на предложение меньшего количества процессоров. Mesos подсчитывает ресурсы с точностью до 3 знаков после запятой.

Есть несколько флагов, которые влияют на то, как Мезос ограничивает ресурсы. Для CPU наиболее важно isolation (мы говорим о настройках mesos-slave/mesos-agent):

  • --isolation=posix/cpu,posix/mem Применяется ограничение ЦП mesos-executor - это просто процесс, выполняющий другой процесс. Вы можете использовать nice, например. nice -20 (для наивысшего приоритета) или cpulimit для влияния на планирование ядра, но Mesos, например. cpu=0.1 не будет приниматься во внимание.
  • --isolation=cgroups/cpu,cgroups/mem cgroups (часть ядра Linux начиная с версии 2.6.29) позволяет ограничить ресурсы, используемые каждым процессом или группой процессов. Некоторые дистрибутивы не позволяют ограничить память по умолчанию и cgroup_enable=memory необходимо передать в ядро. Но пусть сосредоточится на процессоре. По умолчанию cgroups принимает консервативный подход, когда cpu=1.0 означает, что для задачи будет зарезервировано хотя бы одно ядро ​​ЦП. Но в случае, если на хосте нет другой задачи, она может потреблять все процессоры. Предполагая, что у нас есть хост с 12 CPUs, и есть две задачи, выполняемые с cpu=2.0. Тогда каждая задача может доходить до 6 CPUs ядер! (предполагая, что на этом хосте не запущена другая задача Mesos). Это очень опасно, когда кластер находится на низкой нагрузке, все задачи будут выглядеть нормально, но как только будет много задач, производительность некоторых хостов будет уменьшаться.
    • --cgroups_enable_cfs CFS - это Полностью справедливый планировщик, который требует более строгого подхода. По умолчанию он отключен, также не все дистрибутивы поддерживают это (вы можете использовать, например, Docker check-script.sh, чтобы проверить поддержку своей системы). CFS гарантирует, что каждый процесс может использовать не более определенную часть (например, cpu=2.5). Это происходит за счет того, что ни один другой процесс не может использовать зарезервированные ядра, когда какая-либо задача неактивна. Поэтому убедитесь, что вы хорошо определите свое требование.

Последняя упомянутая проблема может быть решена путем переподписки процессора, описанной в документации Mesos.