Cette requête concerne le traitement des paquets dans les processeurs multicœurs. Le traitement des paquets peut être sous Linux ou dans un datapath pur. Est-il vrai que si l'application de traitement de paquets est sous Linux, alors le traitement des paquets doit être interrompu pour des performances élevées, mais si le traitement des paquets est en pur datapath (sans linux), l'interrogation doit-elle être plus performante? Si oui, pourquoi/comment?Méthodes d'interrogation et d'interruption pour le traitement des paquets dans un processeur multicœur
Répondre
Polling
Sommes-nous encore là? Sommes-nous déjà là? Sommes-nous déjà là? Sommes-nous déjà là? Sommes-nous déjà là? ...Interruptions
Ping me quand c'est fait.
Ainsi, les interruptions permettent à l'unité centrale de traitement à effectuer d'autres tâches, alors que l'interrogation évite la surcharge des interruptions (importantes si vous obtenez interrompu des dizaines de milliers de fois par seconde). Différents types de haute performance. Notez qu'il existe des aproches hybrides, c'est-à-dire: interroger après des interruptions pendant quelques ms, avant de revenir aux interruptions.
Si vous utilisez un système d'exploitation multitâche, l'interrogation viendra avec une pénalité de latence (si le paquet arrive alors qu'une autre tâche est en cours d'exécution). Par conséquent, vous pouvez obtenir un meilleur débit en utilisant une approche par interruption sur de tels systèmes. En effet, le mécanisme d'interruption peut élever la priorité du chemin de données au-dessus de autres processus sans les bloquer (car l'interrogation dans une tâche de priorité supérieure bloquerait toutes les tâches de priorité inférieure).
Si vous utilisez un système embarqué en métal nu sans OS vous devriez être en mesure d'obtenir le meilleur débit utilisant sondage depuis CPU peut passer tout son temps à vérifier les nouveaux paquets ou faire du traitement comme résultat des paquets reçus. Cela minimise la latence et alloue un maximum de cycles au traitement des paquets. L'appel d'une interruption entraîne le gaspillage des cycles et introduit une complexité supplémentaire dans ce cas; étant donné que rien d'autre ne s'exécute sur la CPU, tout cycle que vous effectuez est un cycle non utilisé qui tend au chemin de données.
Notez que cela ne pas signifie que la performance de l'application totale est mieux ou que toute mise en œuvre particulière est plus rapide avec sondages. Cela signifie seulement que le débit maximal possible est atteint par l'interrogation . Par exemple, si votre application a besoin de beaucoup de traitement , vous pouvez obtenir de meilleures performances en utilisant DMA avec des interruptions. Savoir si l'interrogation est plus rapide dans un cas particulier dépend fortement des caractéristiques de l'application de ce cas.
Je ne suis pas sûr de ce que l'aspect de cette question est, mais il peut être judicieux de consacrer un CPU à vote I/O pour obtenir mimimum latence « multicore » dans un système multicoeur embarqué bien que cela aussi serait hautement spécifique à l'application. En tant que notes ninjalj, des approches hybrides peuvent être utilisées pour optimiser la performance totale dans des scénarios plus complexes.Ce qui précède ne vaut que pour le cas simple .
Veuillez reformuler votre question - ce n'est pas clair. –
... en fait, je ne suis même pas sûr que ça appartienne à SO (est-ce une question de programmation?). – Lucero