Afinidade de interrupção do Linux

1

Temos um HP DL980 executando o SuSE Linux Enterprise Server 11 sp2.

A máquina hospeda uma placa IO digital PCIe que é usada para enviar um sinal de relógio para sincronizar com outras máquinas.

Se fizermos um topo , um dos processos mostra com o 'comando' [irq / 28-pci7230] e topo mostra esse processo está sendo executado na CPU8. Sabemos que o pci7230 é o cartão digital IO. Se eu então cat / proc / interrompe , isso mostra todas as interrupções na CPU0.

Algum pode explicar o que está acontecendo aqui? Fiquei com a impressão de que a entrada em top estava mostrando que a interrupção está sendo tratada pela CPU8, mas / proc / interrupts parece sugerir o contrário.

    
por JRT 14.02.2014 / 09:19

1 resposta

3

Você está confundindo a metade superior da interrupção com a metade inferior. É perfeitamente normal que a metade superior da interrupção corra em um núcleo diferente da metade inferior. Quando ocorre uma interrupção de hardware, você está em qualquer contexto que esteja em execução. É fundamental que você libere esse contexto o mais rápido possível para que você não esteja seqüestrando um trabalho aleatório, possivelmente importante.

"Linux (along with many other systems) resolves this problem by splitting the interrupt handler into two halves. The so-called top half is the routine that actually responds to the interrupt—the one you register with request_irq. The bottom half is a routine that is scheduled by the top half to be executed later, at a safer time. The big difference between the top-half handler and the bottom half is that all interrupts are enabled during execution of the bottom half—that's why it runs at a safer time. In the typical scenario, the top half saves device data to a device-specific buffer, schedules its bottom half, and exits: this operation is very fast. The bottom half then performs whatever other work is required, such as awakening processes, starting up another I/O operation, and so on. This setup permits the top half to service a new interrupt while the bottom half is still working." -- Top and Bottom halves

As interrupções não são agendadas - uma interrupção chega quando chega. O encadeamento do kernel [irq/28-pci7230] está agendado para fazer o "trabalho real".

    
por 14.02.2014 / 10:11