我在AWS Elastic Container Service(ECS)上使用 16 CPU实例。我想在这里运行 8个容器,所有保留2个CPU 。
我在这个设置中获得的性能明显慢于(大约两倍),而不是在每个2个CPU的8个实例上运行 8个容器。
目前,似乎CPU分配不是“硬”,因为调度程序可以随时为容器提供2个以上的CPU。
有没有办法将CPU“硬分配”到容器?我的最终目标是使CPU尽可能专门用于单个任务,以便性能更好,即更接近我在不同实例上运行容器时获得的性能。如果我还有其他步骤,我也会很感激指点。
请注意,容器运行的任务完全独立。
答案 0 :(得分:1)
所以有几点意见:
" CPU" ECS配置的参数将"保留"给定容器的CPU。 CPU始终能够以最小的延迟使用那么多的CPU。但是 - 这不是最大CPU(并且无法在ECS中设置最大CPU);允许容器根据需要使用未分配的CPU。因此,如果你有一个运行2048个预留CPU单元的容器,它仍然可以使用所有16个CPU,直到其它需要它们为止。
您看到的性能下降可能是由于CPU崩溃导致容器需要的CPU多于您提供的CPU所导致的,因此他们会从其他容器中抓取它使用它。然后当其他容器需要它时,他们需要从更多地使用它的容器中抓取,导致其失去性能。您可能需要调整容器的大小。
在这两点之后,我不得不问:运行8个带有8个容器的小型服务器将解决此问题,因为您注意到(8个容器之间不再有资源共享)并且多更便宜。为什么一个大服务器而不是8个更小?