我正在使用cset shield创建一组cpus的用户屏蔽。
cset shield --cpu 1,3,5,7 --kthread on这背后的想法是为我的应用程序代码保留这些cpus,并将所有其他任务加上可移动的内核线程推到其他cpus上。
在我的应用程序中,我创建了4个线程,在每个线程的上下文中,尝试使用sched_setaffinity将每个线程固定在一个保留的cpus上。
int cpuNum = 1; // each thread gets one of the cpus
pid_t threadId = static_cast<pid_t>(syscall(SYS_gettid));
cpu_set_t cpuSet;
CPU_ZERO(&cpuSet);
CPU_SET(cpuNum, &cpuSet);
if (sched_setaffinity(threadId, sizeof(cpu_set_t), &cpuSet) == -1)
perror("sched_setaffinity");然而,sched_setaffinity在Invalid argument上失败了
如果我使用cset shield --exec ./TestApp运行我的应用程序,那么钉扎就能工作。
为什么裸露的sched_setaffinity调用失败?
发布于 2012-06-21 05:29:38
您的应用程序代码看起来是正确的。快速地,在创建CPU屏蔽时,在没有--kthread on的情况下尝试这一点。查看是否有相同的“无效参数”错误。我想知道内核线程是否有问题。
这是RHEL吗?硬件设置(核的#)是什么?我看到了sched_setaffinity调用从Gentoo到Red系统的问题。
https://serverfault.com/questions/400807
复制相似问题