Сколько потоков / процессов создать в задаче ECS - PullRequest
0 голосов
/ 15 октября 2018

Экземпляр c5.2xlarge имеет 8 vCPU.Если я запускаю os.cpu_count () (Python) или std :: thread :: hardware_concurrency () (C ++), каждый из них сообщает 8 об этом экземпляре.Я предполагаю, что базовое оборудование, вероятно, гораздо более крупная машина, но они говорят мне, что у меня есть, и это кажется полезным и правильным.

Однако, если моя задача ECS запрашивает только 2048 ЦП (2 vCPU)), тогда он все равно получит 8 из вышеупомянутых запросов на машине c5.2xlarge.Насколько я понимаю, Docker собирается ограничить мою задачу только использованием ЦП «2 vCPU», если выполняются другие загруженные задачи.Но он позволяет мне увидеть весь экземпляр.

Похоже, это приведет к тому, что задачи создадут слишком много потоков / процессов.Например, если я запускаю 2048 задач ЦП на экземпляре c5.18xlarge, каждая задача будет считать, что в ней доступно 72 ядра.Все они будут создавать слишком много потоков / процессов в целом;это будет работать, но будет неэффективно.

Какова лучшая практика здесь?Должны ли программы каким-то образом знать свое резервирование задачи ECS?И создавать потоки / процессы в соответствии с этим?Это кажется хорошим, за исключением того, что вы можете недоиспользовать экземпляр, если он не полон занятых задач.Так что я просто не уверен, что там оптимально.

Я предполагаю, что основная проблема заключается в том, что Docker будет регулировать общее количество используемого процессора.Но он не может регулировать количество потоков / процессов, которые вы используете.И использовать слишком много или слишком мало потоков / процессов неэффективно.

См. Обсуждение использования процессора в документации ECS .

См. Также этот длинный пост в блоге: https://goldmann.pl/blog/2014/09/11/resource-management-in-docker/

1 Ответ

0 голосов
/ 16 мая 2019

Существует огромная разница между технологиями виртуализации и контейнерами.Наличие ясного понимания этих технологий поможет.При этом приложение должно быть настраиваемым, если вы хотите развернуть его в разных средах.

Я бы предложил создать дополнительную конфигурацию, которая сообщает приложению, что оно может использовать только определенное количество ядер процессора.Если это значение не указано, тогда оно возвращается к автоматическому определению.

Если у вас есть эта опция при определении задачи ECS, вы можете предоставить эту дополнительную конфигурацию, которая устранит проблему, с которой вы столкнулись.

...