sched_setaffinity falha depois de usar o escudo cset

1

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?

    
por Steve Lorimer 21.06.2012 / 07:04

1 resposta

2

O código da sua aplicação parece correto. Rapidamente, tente isso sem --kthread on quando você criar seus escudos de CPU. Veja se você obtém o mesmo erro "Argumento inválido". Eu estou querendo saber se há um problema com os tópicos do kernel.

Além disso, este é o RHEL? Qual é a configuração de hardware (número de núcleos)? Eu vi problemas com a chamada sched_setaffinity em aplicativos movidos do Gentoo para sistemas Red Hat.

    
por 21.06.2012 / 07:29