如何在Ubuntu 14.04或16.04中获得可能的CPUS

时间:2019-01-16 06:23:02

标签: ubuntu-14.04 ubuntu-16.04 cpu

我有一个固定在核心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中的数字,如下所示。我得到的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

0 个答案:

没有答案