Экземпляр 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/