我如何约束我所有的基准测试运行在一个单一的CPU(例如C0)?我正在运行基准测试,并希望将我的测试公开到与目标类似的环境中。我还想要一个建议,我如何才能确保有最小的其他进程运行,因为我运行基准。
import std.datetime;
import std.stdio;
void algorithm() {
writeln("Hello!");
}
void main() {
StopWatch stopWatch;
stopWatch.start();
algorithm();
stopWatch.stop();
auto duration = stopWatch.peek();
writeln("Hello Duration ==> ", duration);
}
您尝试过使用numactl
吗?它对内存和进程绑定非常有用,这里有一个指向手册页的链接。
numactl --physcpubind=0 myapp args
将进程myapp
绑定到核心0。
根据您想要做的具体操作,可能会有不同的语法。例如,在CPU或内存绑定上指定特定的内核。应用程序的参数格式也可能影响numactl
语法。
至于减少其他进程的数量,有几个选项,但具体情况多少取决于操作系统。如果您真的想要在一个背景噪音最小的环境中测试系统,您可以设计一个定制的OS映像,其中只包含启动节点和运行基准测试所需的最小包。这种方法类似于许多现代HPC集群中使用的方法。如果您有多个可用的服务器,那么使用像Warewulf这样的集群管理工具可能会很有用,网上有许多用于构建小型集群的参考设计和食谱。
其他选项包括关闭任何后台和不必要的程序和应用程序。您还可以关闭不必要的服务并卸载未使用的内核模块。
BIOS中的一些电源和性能设置也可能有影响。与功耗相关的设置可能会影响诸如频率缩放和节流之类的事情,这有时会在性能测试期间产生不可预测的结果。这些因素通常会影响产生大量浮点操作的工作负载,但可以扩展到任何CPU密集型操作。
在分析代码时,理解问题的约束是非常重要的。了解代码是否受CPU限制、内存限制或IO限制,可以在用于分析的工具以及可以使用的优化技术方面产生很大的不同。为主线程设置亲和度掩码:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686247(v=vs.85).aspx