#process #particular #hardware #numa #smt #cores #subset

app curb

在特定的硬件子集上运行进程

7 个版本

0.1.6 2020年1月27日
0.1.5 2019年3月16日

#547 in 硬件支持

MIT 许可证

12KB
142

Crates.io Build Status

一个命令行工具,可以限制进程使用特定的硬件资源。它特别适用于性能敏感的多核实验,你可能想避免或测量CPU特性(如SMT(例如,Intel Hyper-ThreadingNUMA 内存)的影响。虽然这可以通过现有的工具(如hwloc-bindnumactl)实现,但通常很难得到你想要的结果。另一方面,使用curb

$ curb --no-smt --no-numa mycommand

您还可以使用类似的方法来限制核心数量

$ curb --no-smt -n 3 mycommand

默认情况下,curb以确定性的方式选择核心、节点和其他内容(通常倾向于0)。如果你想随机选择,请使用--randomize(或-r)。

传递参数

将仅在单个NUMA节点上的每个物理核心上运行mycommand(第一个具体来说)。请注意,如果你想要将额外的参数传递给测试中的命令,你可以使用--来这样做。

$ curb --no-smt mycommand -- --no-crash --performance better

可视化核心分配

要使用lstopo可视化正在使用的CPU,请执行以下操作:

$ curb --no-smt --no-numa lstopo -- --pid 0

这应该会以绿色显示所有活动的核心。如果你没有运行窗口管理器,请添加-到末尾,并查找带有(运行中)标记的PU。

依赖关系

Curb 依赖于hwloc crate,它反过来依赖于hwloc C库

操作系统支持

当前Curb仅适用于cfg(unix)系统,因为它为当前进程设置了CPU绑定,然后调用exec。可以通过代替启动进程、获取其标识符、调用set_cpubind_for_process,然后等待进程退出来实现这一点。然而,这有一些缺点,如进程最初不受限制,并且需要代理诸如stdin、stdout、信号和退出代码等事物。欢迎提出如何支持非UNIX平台的支持建议!

依赖关系

~3.5MB
~67K SLoC