Что на самом деле означают виртуальные ЦП в Fargate?

Я пытался получить ответы на свой вопрос здесь и здесь, но я понял, что мне нужно знать, в частности, реализацию виртуальных ЦП в Fargate. Итак, мой вопрос:

  1. Если я выделю 4 виртуальных ЦП для своей задачи, означает ли это, что мое однопоточное приложение, работающее в контейнере в этой задаче, сможет полностью использовать все эти виртуальные ЦП, поскольку они, по сути, являются лишь частью времени ядро процессора, которое я могу использовать?
  2. Скажем, я назначил своей задаче 4 виртуальных ЦП, но на техническом уровне я назначил 4 виртуальных ЦП физическому ядру, которое может свободно обрабатывать один поток (или даже больше с гиперпоточностью). Верна ли моя логика для дела Фаргейта?

p.s. Это приложение node.js, которое запускает сеанс с несколькими игроками, взаимодействующими друг с другом, поэтому я хочу предоставить один процесс node.js с максимальной пропускной способностью.


person Ruslan Plastun    schedule 30.08.2018    source источник


Ответы (1)


Fargate использует ECS (Elastic Container Service) в фоновом режиме для организации контейнеров Fargate. ECS, в свою очередь, полагается на вычислительные ресурсы, предоставляемые EC2 для размещения контейнеров. Согласно FAQ AWS Fargate:

Amazon Elastic Container Service (ECS) - это высокомасштабируемая высокопроизводительная служба управления контейнерами, которая поддерживает контейнеры Docker и позволяет легко запускать приложения в управляемом кластере инстансов Amazon EC2.

ECS использует контейнеры, предоставленные Fargate, для автоматического масштабирования, балансировки нагрузки и управления расписанием ваших контейнеров.

Это означает, что vCPU по сути совпадает с vCPU экземпляра EC2. Из документации:

Инстансы Amazon EC2 поддерживают технологию Intel Hyper-Threading, которая позволяет одновременно запускать несколько потоков на одном ядре ЦП Intel Xeon. Каждый виртуальный ЦП - это гиперпоток ядра ЦП Intel Xeon, за исключением экземпляров T2.

Итак, чтобы ответить на ваши вопросы:

  1. Если вы выделяете 4 виртуальных ЦП для однопоточного приложения - оно всегда будет использовать только один виртуальный ЦП, поскольку виртуальный ЦП - это просто гиперпоток из одного ядра.

  2. Когда вы выбираете 4 виртуальных ЦП, вы, по сути, назначаете 4 гиперпотока одному физическому ядру. Таким образом, ваше однопоточное приложение по-прежнему будет использовать только одно ядро.

Если вам нужен более точный контроль ресурсов ЦП - например, выделение нескольких ядер (которые могут использоваться однопоточным приложением) - вам, вероятно, придется использовать тип запуска EC2 (и управлять своими собственными серверами), а не использовать Fargate.

person moebius    schedule 02.09.2018
comment
Большое вам спасибо за ваш ответ! Итак, если я отключу Hyper-threading для экземпляра EC2, это означает, что у меня будет 1vCPU = 1 ядро ​​ЦП, верно? А если я назначу своей задаче X количество виртуальных ЦП, то она будет использовать X ядер ЦП, верно? - person Ruslan Plastun; 02.09.2018
comment
И еще один, пожалуйста, я знаю, что однопоточное приложение может (каким-то образом) использовать несколько ядер, но знаете ли вы, насколько хорошо оно будет работать именно с node.js? - person Ruslan Plastun; 02.09.2018
comment
Да, верно, отключение гиперпоточности должно сработать. Я не слишком уверен насчет nodejs, извините. - person moebius; 03.09.2018
comment
Я не уверен, что это правильно - мне кажется, что каждое ядро ​​ЦП разделено на 2 гиперпотока, а не на 4. lscpu имеет тенденцию показывать это в EC2. Это означает, что Fargate с 4 виртуальными ЦП должен предоставить вам доступ к 2 полным ядрам ЦП. - person Marty; 09.11.2020
comment
Если у меня есть сценарий bash, который обертывает 4 команды, которые запускаются в процессах bg (через &), все они должны запускаться параллельно и с использованием 4vCPU, верно? - person Peter P.; 08.01.2021