Fargate的vCPU究竟是什么意思?

Pet*_*val 10 amazon-web-services aws-ecs aws-fargate

我试图在这里这里得到我的问题的答案,但我明白我需要特别知道远程控制器的vCPU实现.所以我的问题是:

  1. 如果我为我的任务分配了4个vCPU,这意味着我 在此任务中运行在容器上的单线程应用程序将能够完全使用所有这些vCPU,因为它们基本上只是我可以使用的处理器核心的一部分时间?
  2. 比方说,我为我的任务分配了4vCPU,但在技术层面上,我将4vCPU分配给可以自由处理一个线程的物理核心(甚至更多的超线程处理).我的逻辑是否适用于Fargate案件?

ps这是一个node.js应用程序,它运行会话,多个玩家互相交互,所以我确实希望提供一个具有最大容量的单个 node.js进程.

npe*_*npe 12

/proc/cpuinfo您可以通过检查for字段来检查 ECS 运行的物理 CPU model name。您可以仅在/脚本cat中添加此文件,或使用ECS Exec打开与容器的终端会话。ENTRYPOINTCMD

实际上我最近已经这样做了,因为我们一直在观察我们的一些 ECS 服务出现一些奇怪的性能下降。在我们运行的 84 个 ECS 任务中,分布如下:

Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz      (10 tasks)
Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz  (22 tasks)
Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz  (10 tasks)
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz (25 tasks)
Intel(R) Xeon(R) Platinum 8275CL CPU @ 3.00GHz (17 tasks)
Run Code Online (Sandbox Code Playgroud)

有趣的是,现在已经是 2022 年了,AWS 仍在运行 2016 年的 CPU(下E5-2686 v4)。所有这些任务都是全额付费的按需 ECS Fargate。当在 SPOT 上运行一些任务时,我什至得到了E5-2666 v32015 年的结果,我想。

虽然为我们的 ECS 任务分配随机 CPU 在某种程度上是预料之中的,但这些差异非常显着,以至于我观察到我的一项服务报告空闲时的 CPU 利用率为 25% 或 45%,具体取决于它在“ECS 实例类型”上命中的 CPU彩票”。


moe*_*ius 5

Fargate在后台使用ECS(弹性容器服务)来编排Fargate容器。反过来,ECS依靠EC2提供给主机容器的计算资源。根据AWS Fargate 常见问题解答

Amazon Elastic Container Service(ECS)是一种高度可扩展的高性能容器管理服务,支持Docker容器,使您可以轻松地在Amazon EC2实例的托管集群上运行应用程序...

ECS使用Fargate提供的容器来自动扩展,平衡负载并管理容器的调度

这意味着vCPU本质上与EC2实例vCPU相同。从文档

Amazon EC2实例支持Intel超线程技术,该技术使多个线程可以在单个Intel Xeon CPU内核上同时运行。除T2实例外,每个vCPU都是Intel Xeon CPU内核的超线程。

因此,回答您的问题:

  1. 如果将4个vCPU分配给单个线程应用程序-它只会使用一个vCPU,因为vCPU只是单个内核的超线程。

  2. 当选择4个vCPU时,实际上是将4个超线程分配给单个物理核心。因此,您的单线程应用程序仍将仅使用单个内核。

如果要对CPU资源进行更细粒度的控制(例如分配多个内核(可以由单个线程的应用程序使用)),则可能必须使用EC2启动类型(并管理自己的服务器),而不是使用Fargate。

  • 我不确定这是否正确 - 在我看来,每个 CPU 核心都分为 2 个超线程,而不是 4 个。`lscpu` 倾向于在 EC2 中显示这一点。这意味着具有 4 个 vCPU 的 Fargate 应让您可以访问 2 个完整的 CPU 核心。 (4认同)