Estou usando cset shield
para criar um escudo usuário com um conjunto de CPUs
cset shield --cpu 1,3,5,7 --kthread on
A idéia por trás disso é reservar esses processadores para o código do meu aplicativo, e empurrar todas as outras tarefas, além dos tópicos de kernel móveis para os outros processadores.
No meu aplicativo, eu crio 4 threads e, no contexto de cada thread, tento usar sched_setaffinity
para fixar cada thread em um dos cpus reservados.
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");
No entanto, sched_setaffinity
falha com Invalid argument
Se eu executar meu aplicativo usando cset shield --exec ./TestApp
, então, a fixação funciona
Como a chamada sched_setaffinity
nua falha?