Bem, para o bit de afinidade de CPU, isso geralmente é destinado a resolver um conjunto diferente de problemas que pertencem às CPUs físicas que estão executando o programa. É por isso que você precisa especificar de qual CPU específica você está falando com a afinidade da CPU.
Do fato de você não se importar com qual CPU é usada, estou supondo que você está apenas tentando obter fatias de tempo reformuladas. cgroups realmente realizam o que você está querendo lá e são o mecanismo para ajustar o tempo da CPU, independentemente da execução da (s) CPU (s).
A diferença determinante basicamente se resume a isso: ou você se importa em quais núcleos físicos seu processo é executado ou não. Se você não tiver nenhum requisito de desempenho que exija que os processos sejam executados em determinadas CPUs (alguns caches da CPU permanecem aquecidos, assegure que os processos relacionados não sejam executados em nós NUMA externos, que interrupções específicas são tratadas por um conjunto específico de CPUs, etc) então tudo o que você provavelmente está tentando controlar a alocação de tempo da CPU. Nesse caso, é um erro pensar em "núcleos de CPU" quando o que você realmente quer dizer é "Tempo de CPU".
Quais partes dos cgroups você está tendo dificuldade em integrar? Posso atualizar minha resposta assim que souber o problema específico que você está enfrentando.