SoftIRQs e processamento rápido de pacotes em rede Linux

SoftIRQs e processamento rápido de pacotes em rede Linux

Tenho lido sobre o ajuste de desempenho do Linux para obter tempos de processamento de pacotes mais rápidos ao receber dados do mercado financeiro. Vejo que quando a NIC recebe um pacote, ela o coloca na memória via DMA e, em seguida, gera um HardIRQ - que por sua vez define algumas configurações de NAPI e gera um SoftIRQ. O SoftIRQ então usa drivers NAPI/de dispositivo para ler dados dos buffers RX por meio de polling, mas isso só é executado por um tempo limitado (net.core.netdev_budget, padrão para 300 pacotes). Estas são uma referência a um servidor real rodando Ubuntu, com uma NIC solarflare. Minhas perguntas estão abaixo:

  1. Se cada HardIRQ levanta um SoftIRQ, e o driver de dispositivo lê vários pacotes de uma só vez (netdev_budget), o que acontece com os SoftIRQs levantados por cada um dos pacotes que foram drenados do buffer RX de uma só vez (cada pacote recebido levantará um disco rígido). e então irq suave)? Eles estão na fila?

  2. Por que o NAPI usa polling para drenar o RX_buffer? O sistema acabou de gerar um SoftIRQ e está lendo o buffer RX, então por que a votação?

  3. Presumivelmente, a drenagem do RX_Buffer por meio do softirq só acontecerá a partir de 1 RX_Buffer específico e não em vários RX_Buffers? Em caso afirmativo, aumentar o netdev_budget pode atrasar o processamento/drenagem de outros RX_buffers? Ou isso pode ser mitigado atribuindo diferentes RX_buffers a diferentes núcleos?

  4. Existem configurações para garantir que HardIRQs sejam gerados e manipulados imediatamente. No entanto, os SoftIRQs podem ser processados ​​posteriormente. Existem configurações/configurações para garantir que os SoftIRQs relacionados ao RX da rede também sejam tratados com prioridade máxima e sem atrasos?

Responder1

Em relação à resposta à 4ª pergunta,

Sim, as placas NIC de rede são os periféricos associados ao softirq. Como o softirq é a prioridade mais alta em todos os mecanismos da metade inferior.

Portanto, para proibir o atraso que pode levar à queda do pacote posteriormente, são usados ​​​​softirqs.

Basicamente, o mecanismo NAPI também se destina a manipular os pacotes que chegam com uma velocidade que o kernel não consegue manipular com o mecanismo de interrupção por alguns motivos.

Eu sugeriria apenas ir para o capítulo de drivers de rede no LDD3.Aquié o link que pode ser útil para o mesmo.

informação relacionada