我正在尝试在我的新 HP Proliant 服务器上对多线程应用程序进行基准测试,该服务器具有 2x Opteron 6272 和 64GB 内存。
当我在台式机(一系列 i7 和 Xeon X5675 处理器)上运行该应用程序时,该应用程序将导致所有核心的利用率达到接近 100%。
当我在服务器上运行该应用程序时,无论运行多少线程,应用程序的总 CPU 利用率都会徘徊在 20-25% 左右。也就是说,如果我运行 32 个线程,所有 32 个内核都会挂在 20% 左右,如果我运行 16 个线程,它们会挂在 40% 左右,依此类推。
- 起初我怀疑这与操作系统有关,因此我在服务器上安装了 Windows 7,以便桌面和服务器具有相同的操作系统。
- 然后我怀疑是硬件的问题,我将 BIOS 中的电源管理改为高性能。尽管这确实增加了基准测试时间,但同样的 20% 利用率问题仍然存在。
- 使用 y-cruncher 基准测试,我可以将 32 个核心全部调到 100%。我的自定义基准测试是用 .NET 编写的,这可能与它有关吗?
我对这个问题感到困惑。有人知道是什么原因造成的吗?
答案1
如果您的应用正在处理大量数据,请尝试跟踪数据的路径 - 如果输入数据来自网络,请检查可能的延迟、带宽限制或传输错误。您已经检查过磁盘 I/O,否则它很可能成为瓶颈。
最后但同样重要的是,由于它是一个高度多线程的 .NET 应用程序,因此您应该确保服务器垃圾回收否则,您可能会看到如下描述的奇怪的负载特性在 Stack Overflow 的这篇文章中。