Как получить возможный CPUS в Ubuntu 14.04 или 16.04 - PullRequest
0 голосов
/ 16 января 2019

У меня есть процесс, закрепленный на ядре 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
...