Il existe de nombreuses manières de planifier le travail dans le kernel Linux: timers, tasklets, files de travail et threads du kernel. Quelles sont les directives pour savoir quand utiliser l’un contre l’autre?
Il y a des facteurs évidents: les fonctions de timer et les tâches ne peuvent pas dormir, elles ne peuvent donc pas attendre les mutex, les variables de condition, etc.
Quels sont les autres facteurs dans le choix du mécanisme à nous dans un conducteur?
Quels sont les mécanismes préférés?
Comme vous l’avez dit, cela dépend de la tâche à accomplir:
Les files d’attente de travail reportent le travail dans un thread de kernel – votre travail s’exécutera toujours dans un contexte de processus. Ils sont programmables et peuvent donc dormir.
Normalement, il n’ya pas de débat entre les files d’attente ou les tâches / tâches; Si le travail différé doit être interrompu, des files d’attente de travail sont utilisées, sinon les softirqs ou les tasklets sont utilisés. Les tâches sont également plus adaptées à la gestion des interruptions (certaines garanties leur sont données: une tâche n’est jamais exécutée plus tard que la suivante, elle est toujours sérialisée par rapport à elle-même, etc.).
Les minuteurs du kernel sont bons lorsque vous savez exactement quand vous voulez que quelque chose se produise et que vous ne voulez pas interrompre / bloquer un processus entre-temps. Ils s’exécutent en dehors du contexte du processus et sont également asynchrones par rapport aux autres codes. Ils sont donc la source des conditions de concurrence si vous ne faites pas attention.
J’espère que cela t’aides.
softirqs: le travail différé s'exécute dans un contexte d'interruption tasklets: le travail différé s'exécute dans un contexte d'interruption files d'attente de travail: le travail différé s'exécute dans un contexte de processus softirqs: ne peut pas s'exécuter simultanément sur différents processeurs tâches: ne peuvent pas s'exécuter simultanément sur différents processeurs files d'attente de travail: peuvent s'exécuter simultanément sur différents processeurs softirqs: ne peut pas aller dormir tâches: ne peut pas aller dormir files d'attente: peut aller dormir softirqs: ne peut pas être préempté / planification tâches: ne peuvent pas être préemptées / planification files d'attente de travail: peut-être être préempté / planification softirqs: pas facile à utiliser tasklets: facile à utiliser files d'attente: faciles à utiliser
Les threads du kernel constituent la base des files d’attente de travail. Ce sont les seuls types de routines d’assistance du kernel qui s’exécutent dans le contexte du processus.