我有一个固定在核心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