J'ai un tableau personnalisé exécutant un Marvell 3700 avec SMP activé. En raison de la personnalisation du pilote, j'ai dû implémenter un spinlock dans la fonction ndo_start_xmit (fonction TX) du pilote pour éviter la concurrence entre les deux cœurs. (La personnalisation de mon pilote utilise des variables partagées qui ne peuvent pas être évitées).

Lors des tests avec iperf3 et TCP, je constate souvent qu’une interface se bloque et ne transmet plus. Cela n'arrive pas toujours, mais seulement après des iperfs soutenus. La statistique ifconfig TX de l'interface n'augmente pas lorsque j'essaie d'envoyer une requête ping à un hôte sur cette interface. Je pense que ce qui se passe, c’est que les skbs ne sont pas relâchés dans une situation de compétition entre deux noyaux, ce qui les a finalement épuisés.

J'ai essayé de faire XPS en définissant echo 1 & gt; / sys / class / net / ethX / queues / txN / xps_cpus pour toutes les interfaces et les TX-Q. D'après ce que j'avais compris, chacun de ces TX-Q serait desservi par la CPU n ° 1, ce qui devrait éviter la situation de concurrence critique. Est-ce exact? Toute autre suggestion / pointeur serait utile.

Je vous remercie.

fastforward
la source