我正在使用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
调用有问题。