我正在启用超线程的四核 Xenon E5520 上运行大量模拟。我的软件自动检测 8 个(虚拟)内核并启动 8 个模拟以并行运行。然而 htop 和系统监视器只显示 8 个内核中的每一个都加载到 ~50%。
这是有意的行为吗?在某种程度上,这是有道理的,因为每个物理核心的总负载为 400% 或 100%,但我不应该得到更多吗?我的意思是这就是 HT 的目的,对吗?使用 SMT 使用其他未使用的执行单元来运行另一个线程。所以吞吐量应该更高吧?
我应该提到负载非常一致,每个核心始终为 50%。模拟由 Java 运行,在单个 JVM 中,GC 不是问题,我远低于 JVM 堆限制。模拟不受内存限制,有很多东西可以使用,没有交换。模拟正在向磁盘写入大量数据,但有大缓冲区(每个线程 128MB 写入缓冲区)并且 gkrellm 显示的磁盘活动频繁爆发 ~90MB/s 但它不是一致的负载,我可以相信这可能是一个瓶颈。
任何人都可以对此有所了解吗?