我使用 cset shield 后 sched_setaffinity 失败

我使用 cset shield 后 sched_setaffinity 失败

我正在使用cset shield创建一个用户带有一组 CPU 的屏蔽

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

其背后的想法是将这些 CPU 保留给我的应用程序代码,并将所有其他任务以及可移动内核线程推送到其他 CPU 上。

在我的应用程序中,我创建了 4 个线程,并在每个线程的上下文中尝试将sched_setaffinity每个线程固定到其中一个保留的 CPU 上。

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会失败?

答案1

--kthread on您的应用程序代码看起来正确。快速地,在创建 CPU 屏蔽时尝试一下。看看您是否收到相同的“无效参数”错误。我想知道内核线程是否存在问题。

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

相关内容