Qual é o valor correto para basear o número máximo de CPUs em sched_setaffinity?

3

Eu tenho alguma confusão sobre qual é o valor correto a ser usado para o número de CPUs que posso usar para fazer uma CPU_SET para uma chamada de sched_setaffinity no meu sistema.

Meu arquivo /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:

Neste arquivo existem processor linhas numeradas 0-3, para processadores "físicos" (total de 4 processadores). Eu posso obter esse valor de sysconf(_SC_NPROCESSORS_ONLN) , mas também há uma linha para cpu cores e cada processador tem 2. Acredito que isso represente os processadores "lógicos" ou hyperthreading que são contabilizados. Devo estar usando apenas o valor "físico" ou posso usar a contagem "lógica"?

Não estou claro sobre isso, porque se eu for para /proc/PID/status há a linha Cpus_allowed_list e isso pode variar de 0 a 7 (8 processadores no total), mas também escrevi um script para chamar taskset -c -p PID para cada "PID" em execução e isso mostra todo o processo de ter uma lista de afinidades de 0 a 3 máx.

    
por tijko 22.03.2014 / 23:01

1 resposta

3

O seu CPU é um CPU dual core com hyperthreading Processador Intel® Core ™ i5-460M

  • Isso significa que você tem 2 núcleos e eles são da CPU física.
  • Você também tem hyperthreading e tem 4 CPUs lógicas.

taskset foi projetado porque o balanceamento de tarefas em uma CPU multicore foi uma perda de desempenho. As tarefas normalmente não usavam hyperthreading e as CPUs tinham apenas caches separados. Você tem uma CPU hyperthreading, então você nunca saberá qual CPU física está em uso e o balanceamento de tarefas normalmente não resulta em um desempenho perdido porque eles usam o mesmo cache. O cache inteligente (unificado) da Intel parece tornar as tarefas obsoletas. No entanto, usar taskset em um Sistema NUMA ainda faz sentido.

Um benchmark pode responder se você pode aumentar o desempenho usando taskset aqui.

    
por 24.03.2014 / 16:50