gpt4 book ai didi

performance - CPU负载与流量处理工作人员的数量不成线性关系的原因是什么?

转载 作者:行者123 更新时间:2023-12-04 02:41:42 24 4
gpt4 key购买 nike

我们正在编写一个应该处理大量流量的前端(在我们的例子中是直径流量,但这可能与问题无关)。当客户端连接时,服务器套接字被分配给执行所有实际流量处理的工作进程之一。换句话说,Worker 做了所有的工作,当更多的客户端连接时,应该添加更多的 Worker。

人们会期望每条消息的 CPU 负载对于不同数量的 Workers 是相同的,因为 Workers 是完全独立的,并且服务于不同的客户端连接集。然而我们的测试表明,随着 worker 数量的增加,每条消息需要更多的 CPU 时间。

更准确地说,CPU 负载取决于 TPS(每秒事务数或请求响应数),如下所示。

对于 1 名 worker :
60K TPS - 16%, 65K TPS - 17%...即每 KTPS 约 0.26% CPU

对于 2 名 worker :
80K TPS - 29%, 85K TPS - 30%... 即每 KTPS 约 0.35% CPU

对于 4 名 worker :
85K TPS - 33%, 90K TPS - 37%...即每 KTPS 约 0.41% CPU

对此有何解释? Worker 是独立的进程,它们之间没有进程间通信。每个 Worker 也是单线程的。

编程语言是 C++
在任何硬件上都可以观察到这种效果,它接近于这个:2 Intel Xeon CPU,4-6 cores,2-3 GHz
操作系统:RedHat Linux (RHEL) 5.8、6.4
CPU 负载测量是使用 mpstat 和 top 完成的。

最佳答案

如果 worker 使用的程序代码的大小或 worker 处理的数据的大小(或两者)都不小,原因可能是各种缓存的效率降低 :单个工作人员如何访问其程序代码和/或其数据的位置随时间受到其他工作人员干预的干扰。

效果可能很难理解,因为:

  • 它很大程度上取决于代码计算的结构,
  • 现代 CPU 有 about three levels of cache ,
  • 每个缓存都有不同的大小,
  • 一些缓存是一个内核的本地缓存,而其他缓存则不是,
  • 工作人员干预的频率取决于您的操作系统的调度策略
  • 如果有多个内核,这将变得更加复杂,
  • 除非你的编程语言的运行时系统也介入,
    在这种情况下,它仍然更复杂,
  • 你的网络接口(interface)是一台自己的计算机,也有缓存,
  • 可能还有更多。

  • 警告:鉴于进程调度的粒度相对较粗,我认为这样做的影响不应该那么大。

    但是然后:您是否查看过“CPU百分比”是如何定义的?
    直到达到 CPU 饱和度在您的机器上,您无法确定效果实际上与看起来一样大。当你确实达到饱和时,这里的瓶颈可能根本不是 CPU,所以你确定你需要关心 CPU 负载吗?

    关于performance - CPU负载与流量处理工作人员的数量不成线性关系的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27986273/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com