Différence entre SoftIRQs et Tasklets
Bien que l'étude de Linux, la gestion des interruptions, j'ai trouvé que les Tasklets et SoftIRQs sont deux méthodes différentes de l'exécution de "la moitié du bas" (le moindre travail de priorité). Je comprends ce (tout à fait réel besoin).
Différence étant, SoftIRQs sont re-entarant tandis qu'une Tasklet ne l'est PAS. Même SoftIRQ peut fonctionner sur des Processeurs différents alors que ce n'est PAS le cas avec les Tasklets.
Si je comprends bien ce à partir de la surface mais je n'arrive pas à comprendre les exigences de ces deux fonctionnalités. Dans ce cas, le(s) nous pouvons utiliser ces installations ? Comment reconnaître que je devrais utiliser Tasklets maintenant et SoftIRQs ensuite.
Aussi qu'entendons-nous par Tasklets sont faites sur SoftIRQs ? Dans un des livres que j'ai lu dans la LKML il y avait des débats sur la suppression Tasklets. Je suis complètement confus pourquoi proposer une telle fonctionnalité ? Certains cas de myopie (N'en déplaise signifié) ?
Tous les pointeurs sur cela aidera beaucoup.
Vous devez vous connecter pour publier un commentaire.
include/linux/interruption.h
Les principales différences entre
softirq
ettasklet
sont:DECLARE_TASKLET(name, func, data)
ou peut également être attribuée de façon dynamique et initialisé au moment de l'exécution à l'aide detasklet_init(name, func, data)
reentrant
fonctions et doit explicitement la protection de leurs structures de données avec des spinlocks.non-reentrant
et tasklets du même type sont toujours activé: en d'autres termes, le même type de tasklet ne peut être exécutée par deux Processeurs en même temps. Cependant, tasklets de différents types peuvent être exécutées simultanément sur plusieurs Processeurs.raise_softirq()
. Dans l'attente de l'softirqs sont traitées pardo_softirq()
etksoftirqd
thread du noyau après avoir été activé parlocal_bh_enable()
ou parspin_unlock_bh()
HI_SOFTIRQ
etTASKLET_SOFTIRQ
. Tasklets sont exécutées à partir d'un softirq. La seule vraie différence entre ces types, c'est que leHI_SOFTIRQ
en fonction tasklets exécuter avant laTASKLET_SOFTIRQ
tasklets. Donc,tasklet_schedule()
essentiellement des appelsraise_softirq(TASKLET_SOFTIRQ)
softirq latency
.Sofirqs sont ré-entrant , c'est le PROCESSEUR différent peut prendre la même softirq et de l'exécuter pendant que les Tasklets sont sérialisés c'est le même PROCESSEUR qui exécute la tasklet a le droit de compléter , aucun autre PROCESSEUR peut prendre(dans le cas de la planification).
consultez cette excellent article.
Aussi, vous pouvez activer/désactiver le reporter de traitement à l'aide de la local_bh_enable() sur le PROCESSEUR local qui fait réellement l' _ _local_bh_count non nul.
Aussi lire ce livre (téléchargeable gratuitement) numéro de Page 131 - ce qui explique la différence en tant que bien comme explication à l'aide de l'exemple de code avec un faux/mannequin de périphérique du rouleau.
Softirqs sont alloués statiquement à la compilation. Contrairement à tasklets, vous ne pouvez pas enregistrer dynamiquement et de détruire softirqs.Tasklets sont similaires à softirqs (de travail) cependant, ils ont une interface plus simple.
Softirqs sont nécessaires que pour de très haute fréquence et très filetée utilise , alors que , tasklets faire tout aussi bien dans les autres cas.
Tasklets sont mis en œuvre sur le dessus de softirq, de sorte qu'ils sont softirq de l'. ils sont représentés par deux softirq du "HI_SOFTIRQ & TASKLET_SOFTIRQ" la différence est la priorité.
Même si elles sont mises en œuvre sur le dessus de softirq ils diffèrent dans:
Tasklets peuvent être créés et détruits dynamiquement ou statiquement mais softirq sont seulement par manière statique.
Deux tasklets peuvent s'exécuter simultanément sur le même processeur. Mais deux du même type de tasklets ne peut pas s'exécuter sur le même processeur. Alors que les softirq sont dans l'autre sens.
Softirq sont réservés pour la plupart des critiques de temps & important en bas de la moitié de la transformation sur le système.