在 24 核中增加线程数超过 4 会导致性能下降 CPU

Performance Decrease by Increasing Threads Number More Than 4 in 24 Core CPU

我有一个 Intel Xeon E5-2620,它有 24 on 2 CPU。我写了一个应用程序,它创建 24 个线程来使用 openssl 解密 AES。当我在 100 万数据解密时将线程数从 1 增加到 24 时,我得到如下图所示的结果。

问题是当我增加线程数时,我确定的所有核心都变成 100%,并且由于系统的 32GB ram 总是至少有一半的 ram 是空闲的,这表明问题不是核心使用或 ram限制。 我想知道我应该设置一个特殊参数来提高 OS 级别的性能还是进程限制不能达到最大性能超过 4 个线程。 我不得不提一下,当我执行 "openssl evp ..." 来测试 aes 加密解密时,因为进程分叉,它比一个核心性能提高了大约 20 倍。 有谁知道吗?

如果多处理提供 20 倍的加速,而等效的多线程仅提供 2.5 倍,则多线程代码中显然存在瓶颈。此外,这个瓶颈与硬件架构无​​关。

它可能在您的代码中或在底层库中。如果不详细研究两者,真的是不可能分辨的。

我将从查看多线程应用程序中的锁争用开始。

终于找到原因了。多个 CPU 在具有不同距离的服务器上具有不同的内存。当我创建线程时,直到在一个 cpu 上创建了 4 个线程,但是第五个线程将被放置在第二个 cpu 上,这会降低性能,因为在 os 中没有使用 NUMA。 所以当我禁用第二个 cpu 的核心时,6 个线程的性能如预期的那样提高。 您可以使用以下命令禁用第 7 个核心:

cd /sys/devices/system/cpu/
echo 0 > cpu6/online