Я запускаю пакетные задания на экземплярах Ubuntu 14.04 n1-highcpu-32 , которые имеют 16 физических (32 виртуализированных) ядер. Это должно быть тривиальным случаем (по сравнению с MPI), но загрузка ЦП повсеместна, о чем сообщает top .

Некоторые задания выполняются с нагрузкой на процессор 300%, а другие - только на 10%. Следовательно, время завершения всей партии в 10 раз больше, чем должно быть. Каждое из заданий выполняется с одинаковым кодом, который не является многопоточным.

Есть ли способ предотвратить такое поведение? Может быть, ограничить загрузку процессора до 100% или что-то?

1 ответ1

0

Вы можете запустить каждый процесс в отдельном контейнере Docker. По умолчанию --cpu-quota имеет значение 0, что обеспечивает 100% одного процессора, поэтому вы должны быть полностью настроены. Если вы хотите выбрать значение вручную, используйте:

docker run -it --cpu-quota="..." [container] [command] [args]

В качестве альтернативы вы можете назначить определенные процессоры данному процессу Docker с помощью --cpu-setcpus , например:

docker run -it --cpuset-cpus="1,3" [container] [command] [args]

Для получения подробной информации смотрите docker run docs:

Ограничение квоты процессора

Флаг --cpu-quota ограничивает загрузку ЦП контейнера. Значение по умолчанию 0 позволяет контейнеру использовать 100% ресурсов ЦП (1 ЦП). CFS (полностью честный планировщик) обрабатывает распределение ресурсов для выполняющихся процессов и является планировщиком Linux по умолчанию, используемым ядром. Установите это значение на 50000, чтобы ограничить контейнер до 50% ресурсов ЦП. Для нескольких процессоров отрегулируйте --cpu-quota по необходимости. Для получения дополнительной информации см. Документацию CFS по ограничению пропускной способности.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .