我正在尝试在一组隔离的CPU上运行多线程基准测试。长话短说,我最初尝试使用isolcpus
和taskset
,但遇到了问题。现在我在玩cgroups / csets。
我认为“简单” cset shield
用例应该可以很好地工作。我有4个核心,因此我想使用1-3核心进行基准测试(我还将这些核心配置为处于自适应刻度模式),然后将0核心用于其他所有功能。
遵循此处的教程,它应该很简单:
$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running
因此,现在我们有了一个“屏蔽”,它是隔离的(用户cset),核心0用于其他所有东西(系统cset)。
好吧,到目前为止看起来还不错。现在让我们看一下htop
。所有进程都应已迁移到CPU 0:
??一些过程显示为在屏蔽磁芯上运行。为了排除htop出现错误的情况,我还尝试使用taskset
来检查显示为处于屏蔽状态的进程的相似性掩码。
也许这些任务是无法移动的?让我们选择一个显示为在CPU3上运行的任意进程(应该在屏蔽中),htop
然后根据以下命令查看它是否出现在系统cgroup中cset
:
$ cset shield -u -v | grep 864
root 864 1 Soth [gmain]
vext01 2412 2274 Soth grep 864
是的,根据,该命令正在系统cgroup上运行cset
。因此htop
,cset
不同意。
那么这是怎么回事?我可以信任谁:CPU亲和力(htop
/ taskset
)或cset
?
我怀疑您不应该一起使用cset
和联系。也许屏蔽罩工作正常,我应该忽略亲和力掩码和htop
输出。无论哪种方式,我都感到困惑。有人可以照亮吗?