我有两台“相同”的物理 Linux RedHat 服务器。我在他们两个上运行了一个小程序。我的问题:我的程序的 CPU 使用率在两台服务器之间有所不同。我不是 Linux 专家。我想知道是什么导致了这种性能差异?
我用 C++ 和 Java 编写程序,看看不一致是否来自所选的编程语言。程序本身会随着时间的推移进行一些整数计算,以消耗恒定数量的 CPU 时间。两个程序版本具有相同的 CPU 使用百分比差异。
我已经想到可以排除的环境变量:
- 相同的服务器类型
- 相同的处理器(都有两个插槽,单核)
- 都启用了 Intel 超线程技术
- 相同的时钟速度
- 相同的操作系统版本(Red Hat Enterprise Linux Server 5.9 版)
- 相同的 Java 版本、Java RE、JVM
- Intel Demand based Switching 可以忽略,因为测量工具对 CPU 容量使用时钟速度的默认值
- 我认为也可以排除处理器关联。我运行了多个测量系列,并且总是检索到完全相同的 CPU 使用率值。
是否有 C 库或类似的东西对 C++ 和 Java 程序的 CPU 使用率有影响,需要与实际操作系统版本分开更新?还是可以有不同的线程调度程序?
最佳答案
即使对于“相同”的系统,也有很多不同之处。不同的编译器被用来构建各种库,以及不同版本的编译器。例如,英特尔编译器的优化能力在一代又一代的不断提升。由于气流差异导致一台机器比另一台机器运行更热,导致频率偶尔下降,因此可能会出现其他差异。还有许多其他问题会导致相同的系统以不同的方式运行。
这是我的建议:创建操作系统镜像并为两个系统使用相同的镜像。断开两者与任何网络的连接。运行计算绑定(bind)(你是)。将您的应用程序绑定(bind)到某个核心。确认导出空气温度完全在规范范围内。禁用任何 Turbo 功能。如果仍然存在差异,请检查内存速度。
此外,使用更复杂的分析和分析工具,例如 Intel Vtune。您可以深入研究实际周期、测量缓存未命中、分支预测错误等。它们也应该相同。如果不是,分析应该可以让您了解问题出在哪里。
关于linux - Linux 上应用程序的环境性能参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30871097/