freeBSD 上的系统 CPU 使用率

freeBSD 上的系统 CPU 使用率

我需要运行大量小型作业。如果我在 6 核 Xeon Broadwell 上运行它们,它至少会使用 80-90% 的用户空间 CPU

如果我在具有 2X16 核 CPU Broadwell 的盒子上运行相同的任务,如果我扩展作业数量,我最终会得到 80% 的系统 CPU 使用率,并且吞吐量只有单个 6 核 CPU 的 3 倍,尽管拥有 5 倍的核心和更快的时钟速度。

有什么建议可以改进这一点吗?

编辑

如果作业低于某个大小,问题似乎会变得特别严重,如果它们在稍大的数据集上运行,系统 CPU 使用率就不会那么高 - 这让我怀疑 BSD 产生进程的速率存在某种限制。

如下建议

/usr/share/dtrace/toolkit/procsystime

为我们提供了 2x16 核心机器上的顶级条目

    readlink        80898169570
      select       128032327883
      execve       215209078214
       wait4      2127022159693
        read      2545974471446

在 6 台核心机器上

    _umtx_op         5997915963
      select         8746697465
        read        59777849114
       wait4        61693132566

这似乎不足以解释这种非线性缩放的差异。

编辑

当系统处于这种负载下时,uname每次循环运行需要半秒,而机器空闲时则需要几毫秒。这里似乎存在某种内核问题

答案1

分析将显示哪些内容占用了 CPU 时间。如果在系统中花费了大量时间,则关注系统调用可能会发现它。

Dtrace 对此很有帮助。 /usr/share/dtrace/toolkit/procsystime 它将通过系统调用显示 CPU 时间。如果您需要更多详细信息,作者有火焰图可视化工具

答案2

在尝试追踪这个问题的根源并发现很多不一致之处后,我发现如果 CPU 负载超过 50%,系统时间就会开始快速增加。因此,我尝试在 BIOS 中禁用超线程,问题消失了,机器的吞吐量也大大提高了。

显然,BSD 和超线程不能很好地配合,至少对于这种类型的工作负载来说是这样。禁用超线程后,吞吐量增加了约 120%

相关内容