Por que o / proc / irq / * / smp_affinity está mostrando uma máscara muito grande para o número de CPUs no meu computador?

2

Estou executando o X86_64 Ubuntu Desktop 15.04 com o kernel mais recente (ou seja, 3.19.0-22-genérico). Eu estava inspecionando as interrupções e IRQs e notei que a máscara de bits para smp_affinity era duas vezes maior do que deveria ser e estou me perguntando por que isso acontece?

Mas, mais explicitamente:

$ cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3       
  0:         21          0          0          0  IR-IO-APIC-edge      timer
  1:        113       1780        107         90  IR-IO-APIC-edge      i8042
  8:          0          1          0          0  IR-IO-APIC-edge      rtc0
  9:        455       1106         71         57  IR-IO-APIC-fasteoi   acpi
 12:      10768     131886       9077       7920  IR-IO-APIC-edge      i8042
...

E, por exemplo, por exemplo:

$ cat /proc/irq/0/smp_affinity
ff
$ cat /proc/irq/8/smp_affinity
0f
$ cat /proc/irq/47/smp_affinity
04

Esperei ver apenas 1 dígito em vez de 2 . Por exemplo, em IRQ 0 , esperava ver ' f ' em vez de ' ff '. A razão disso é que eu tenho apenas 4 CPUs pela primeira listagem de código e uma máscara de 4 bits seria suficiente para cobri-los. Ou seja, ' 1111 ' cobriria todos os 4 CPUs e, portanto, IRQ 0 seria ' f '. Alguém saberia se isso é um bug ou se ' ff ' faz sentido e, então, alguém poderia me explicar?

Além disso, observe como em IRQ 8 é ' 0f ', que no contexto dos meus 4 CPUs significa que todos os 4 deles seriam segmentados por essa interrupção. Se for esse o caso, então é exatamente como com IRQ 0 , que também cobre todas as CPUs ( 4 no total). Em outros termos, ' 0f ' é equivalente a ' ff ', o que não faz sentido para mim: (

Qualquer tipo de explicação ou orientação para onde olhar mais seria muito apreciado.

Obrigado antecipadamente.

    
por Pieru Poika 18.07.2015 / 11:55

1 resposta

2

O tamanho do bitmask de afinidade depende do número de CPUs suportadas no seu kernel, não do número de CPUs presentes no seu sistema; no tempo de execução, apenas os bits correspondentes a uma CPU presente são levados em conta. Veja IRQ-affinity.txt e cpumask.h no código fonte do kernel para detalhes.

    
por 18.07.2015 / 13:46

Tags