У меня есть процесс, закрепленный на ядре 1. Я написал следующую функцию, чтобы получить сходство.
count_cpu_cores()
{
long int n_cores;
n_cores = sysconf(_SC_NPROCESSORS_CONF);
if (n_cores > 0) {
cpu_set_t *set = CPU_ALLOC(n_cores);
if (set) {
size_t size = CPU_ALLOC_SIZE(n_cores);
if (!sched_getaffinity(146244, size, set)) {
printf("enter sched affinity\n");
n_cores = CPU_COUNT_S(size, set);
}
CPU_FREE(set);
}
printf("n_cores-%d",n_cores);
}
}
Когда я печатаю ncores, это дает мне значение 32, что неверно. При дальнейшей отладке я обнаружил, что sched_getaffinity возвращает EINVAL, как и ожидалось, большего размера. Теперь, когда я жестко закодировал n_cores, чтобы быть 144, это число в возможном процессоре, как показано ниже. Я получаю правильное значение числа CPUS, равное 1. Как я могу исправить эту проблему в моей программе без жесткого кодирования?
sdn@dell33:~$ cd /sys/devices/system/cpu
sdn@dell33:/sys/devices/system/cpu$ ls
cpu0 cpu12 cpu16 cpu2 cpu23 cpu27 cpu30 cpu6 cpufreq kernel_max online uevent
cpu1 cpu13 cpu17 cpu20 cpu24 cpu28 cpu31 cpu7 cpuidle microcode possible vulnerabilities
cpu10 cpu14 cpu18 cpu21 cpu25 cpu29 cpu4 cpu8 intel_pstate modalias power
cpu11 cpu15 cpu19 cpu22 cpu26 cpu3 cpu5 cpu9 isolated offline present
sdn@dell33:/sys/devices/system/cpu$ cat possible
0-143
sdn@dell33:/sys/devices/system/cpu$ cat kernel_max
511