Eu tenho uma placa personalizada executando um Marvell 3700 com o SMP ativado. Devido a customizações de drivers, eu tive que implementar um spinlock na função ndo_start_xmit (função TX) do driver para evitar que os 2 núcleos competissem. (A personalização do meu driver usa algumas variáveis compartilhadas que não podem ser evitadas).
Ao testar com iperf3 e TCP, muitas vezes vejo que uma interface trava e não xmit mais. Isso não acontece sempre, mas somente depois de iperfs sustentados. A statstics ifconfig TX da interface não aumenta quando tento fazer ping de um host nessa interface. Eu acho que o que está acontecendo é que os skbs não estão sendo liberados em uma condição de corrida entre dois núcleos, o que está causando o esgotamento dos skbs eventualmente.
Eu tentei fazer o XPS configurando o echo 1 > / sys / class / net / ethX / filas / txN / xps_cpus para todas as interfaces e TX-Qs. Meu entendimento era que cada um desses TX-Qs seria atendido pela CPU # 1, o que deveria impedir a condição de corrida. Isso está correto? Quaisquer outras sugestões / ponteiros seriam úteis.
Obrigado.