使用cset shield后,sched_setaffinity失败

我正在使用cset shield来创build一个用户屏蔽与一组cpus

  cset shield --cpu 1,3,5,7 --kthread on 

这个背后的想法是为我的应用程序代码保留这些cpus,并将所有其他任务加上可移动的内核线程推到另一个cpus上。

在我的应用程序中,我创build了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呼叫如何失败?

你的应用程序代码看起来正 快速地,当你创build你的CPU屏蔽时,不要使用--kthread on 。 看看你是否得到相同的“无效参数”错误。 我想知道是否有内核线程的问题。

另外,这是RHEL吗? 什么是硬件设置(核心数量)? 我发现在从Gentoo迁移到Red Hat系统的应用程序上sched_setaffinity调用有问题。