Question

Vous avez des doutes half.Here bas, je considère tasklets seulement. De plus, je considère que le noyau non préemptible seulement.

Supposons envisager un pilote ethernet dans lequel rx interruption du traitement fait des 10 fonctions appels. (Mauvaise programmation :))

Maintenant, regardant la perspective de la performance si 9 appels de fonction peuvent être déplacés vers un tasklet et seulement 1 doit être appelée dans la gestion des interruptions, je peux vraiment obtenir une bonne performance dans un tcp lecture application.

Ou autrement dit, quand il y a passage à l'application de l'espace utilisateur toutes les fonctions 9 appelle les tasklets programmés seront appelés, en effet l'application de l'espace utilisateur sera en mesure d'obtenir les données cum paquet seulement après « tous les taskets prévue » sont terminés? correct?

Je comprends qu'en ayant la moitié inférieure, nous permettons à toutes les interruptions .. mais je doute que l'application qui repose sur l'interruption gagner quoi que ce soit en ayant les 10 fonctions entières dans le gestionnaire d'interruption lui-même ou dans la moitié inférieure.

En bref, en ayant tasklet que je gagne l'amélioration des performances dans l'application de l'espace utilisateur, ici?

Était-ce utile?

La solution

Depuis tasklets ne sont pas mises en attente, mais programmés, soit plusieurs interruptions matérielles affichant la même tasklet pourrait se traduire par une seule invocation de fonction tasklet, vous seriez en mesure de sauver jusqu'à 90% du traitement dans l'extrême cas.

D'autre part, il y a déjà une IRQ douce de haute priorité pour les net-rx.

Autres conseils

Dans mon expérience sur des machines rapides, le travail en mouvement du gestionnaire à l'tasklet ne rend pas plus le fonctionnement de la machine. J'ai ajouté des macros dans le gestionnaire qui peut tourner schedule_tasklet () appeler dans un appel à la fonction tasklet lui-même, et il est facile de comparer les deux sens et voir la différence.

Mais il est important que les gestionnaires d'interruption terminent rapidement. Comme Nikolai mentionné, vous pourriez bénéficier si votre appareil aime interrompre beaucoup, mais la plupart des appareils à haut débit ont du matériel d'atténuation d'interruption qui rend ce un problème moins grave.

à l'aide tasklets est la façon que les gens du noyau de base vont faire des choses, si toutes choses étant égales, il est probablement préférable de suivre leur exemple, surtout si vous voulez jamais voir votre pilote a accepté dans le noyau principal.

Je note également que l'appel de nombreuses fonctions ne sont pas nécessairement mauvaises pratiques; prédicteurs branche modernes peuvent faire courir de code branche lourde aussi vite que le code non-branche lourde. Beaucoup plus important à mon avis sont les effets potentiels du cache d'avoir à faire la moitié du travail maintenant, puis la moitié du travail plus tard.

A tasklet ne fonctionne pas dans le contexte du processus utilisateur. Si vos horaires ISR un tasklet, il fonctionnera immédiatement après votre isr est fait, mais avec des interruptions activées. L'avantage est que votre traitement de paquets n'empêche pas d'interruptions supplémentaires.

Dans votre exemple TCP, les mains matérielles hors du paquet à la pile réseau et votre pilote se fait - la pile nette poignées se réveiller le processus, etc. donc il n'y a vraiment aucun moyen pour le conducteur du hw à exécuter dans le contexte de processus des récipiendaire de données, car le hw ne sait même pas qui est.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top