sched_setaffinity의 최대 CPU 수에 대한 올바른 값은 무엇입니까?

sched_setaffinity의 최대 CPU 수에 대한 올바른 값은 무엇입니까?

내 시스템에서 호출을 수행하는 데 사용할 수 있는 CPU_SETCPU 수의 올바른 값이 무엇인지 약간 혼란스럽습니다 .sched_setaffinity

/proc/cpuinfo파일:

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
model name  : Intel(R) Core(TM) i5 CPU       M 460  @ 2.53GHz
stepping    : 5
microcode   : 0x2
cpu MHz     : 1199.000
cache size  : 3072 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fdiv_bug    : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 11
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt lahf_lm ida arat dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips    : 5056.34
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
model name  : Intel(R) Core(TM) i5 CPU       M 460  @ 2.53GHz
stepping    : 5
microcode   : 0x2
cpu MHz     : 1199.000
cache size  : 3072 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2
apicid      : 1
initial apicid  : 1
fdiv_bug    : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 11
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt lahf_lm ida arat dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips    : 5056.34
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor   : 2
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
model name  : Intel(R) Core(TM) i5 CPU       M 460  @ 2.53GHz
stepping    : 5
microcode   : 0x2
cpu MHz     : 1199.000
cache size  : 3072 KB
physical id : 0
siblings    : 4
core id     : 2
cpu cores   : 2
apicid      : 4
initial apicid  : 4
fdiv_bug    : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 11
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt lahf_lm ida arat dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips    : 5056.34
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
model name  : Intel(R) Core(TM) i5 CPU       M 460  @ 2.53GHz
stepping    : 5
microcode   : 0x2
cpu MHz     : 1199.000
cache size  : 3072 KB
physical id : 0
siblings    : 4
core id     : 2
cpu cores   : 2
apicid      : 5
initial apicid  : 5
fdiv_bug    : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 11
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt lahf_lm ida arat dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips    : 5056.34
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor이 파일에는 "물리적" 프로세서(총 4개의 프로세서)에 대한 0-3번 줄이 있습니다 . 여기에서 이 값을 얻을 수 있지만 프로세서당 2개의 sysconf(_SC_NPROCESSORS_ONLN)라인도 있습니다 . cpu cores나는 이것이 고려 중인 "논리적" 프로세서, 즉 하이퍼스레딩을 나타낸다고 믿습니다. "물리적" 값만 사용해야 합니까, 아니면 "논리적" 개수를 사용할 수 있습니까?

/proc/PID/status거기에 가면 Cpus_allowed_list범위가 0-7(총 8개 프로세서)이 될 수 있기 때문에 이에 대해 명확하지 않습니다. 그러나 실행 중인 각 "PID"를 호출하는 스크립트도 작성했는데 taskset -c -p PID이는 최대 0임을 보여줍니다. -3개의 연관 목록.

답변1

CPU가 하이퍼스레딩 기능이 있는 듀얼 코어 CPU입니다.인텔® 코어™ i5-460M 프로세서

  • 이는 물리적 CPU인 2개의 코어가 있음을 의미합니다.
  • 하이퍼스레딩도 있으므로 논리적 CPU가 4개 있습니다.

taskset이러한 설계의 이유는 멀티 코어 CPU의 작업 균형 조정으로 인해 성능 저하가 발생할 수 있기 때문입니다. 이러한 작업은 일반적으로 하이퍼스레딩을 사용하지 않으며 CPU에는 별도의 캐시가 있습니다. 하이퍼 스레드 CPU가 있으므로 어떤 물리적 CPU가 사용되고 있는지 알 수 없으며 작업 균형 조정은 동일한 캐시를 사용하기 때문에 일반적으로 성능 저하가 발생하지 않습니다. Intel의 스마트(통합) 캐시는 작업 세트를 쓸모없게 만드는 것 같습니다. 그러나 NUMA 시스템에서는 여전히 사용하는 것이 좋습니다 taskset.

벤치마크를 통해 이를 사용하여 taskset성능을 향상할 수 있는지 여부에 대해 답할 수 있습니다.

관련 정보