Linux gestion des interruptions dans l'Espace Utilisateur
Dans Linux, quelles sont les options pour l'appareil de manutention des interruptions dans l'espace utilisateur de code plutôt que dans l'espace du noyau?
OriginalL'auteur Brandon E Taylor | 2011-11-02
Vous devez vous connecter pour publier un commentaire.
L'expérience montre qu'il est possible d'écrire de bons et stable de l'espace utilisateur pilotes pour presque n'importe quelle carte PCI. Il nécessite juste quelques sophistication et un petit proxy couche dans le noyau. UIO est un pas dans cette direction, mais Si vous voulez gérer correctement les interruptions dans l'espace utilisateur, puis UIO pourrait ne pas être suffisante, par exemple si l'appareil ne prend pas en charge le PCI-spec interrompre disable bit qui UIO repose sur.
Avis que le processus de réactivation de latences sont quelques microsecs donc, si votre application nécessite une très faible latence, puis l'utilisateur de l'espace peut être glisser sur elle.
Si je devais mettre en œuvre un espace utilisateur pilote, je voudrais réduire le noyau rapport de recherche internationale juste un "désactiver & ack & reveil userpace" opération, de la poignée de l'interruption à l'intérieur de l'éveillé, et puis de le ré-activer l'interruption (bien sûr, en écrivant à mappé PCI mémoire à partir de l'espace utilisateur).
OriginalL'auteur Dan Aloni
Il est UIO, mais manipulation doit encore être fait dans kernelspace. Otoh, que, si vous avez juste besoin de l'avis de l'interruption, vous n'avez pas besoin de la partie noyau.
OriginalL'auteur ninjalj
Vous aimeriez peut-être prendre un coup d'oeil à CHAPITRE 10: la gestion des interruptions de Linux Pilotes De Périphérique, Troisième Édition livre.
OriginalL'auteur Maxim Egorushkin
Ont pour déclencher un système de base de code indirecte.
Noyau ISR indique l'interruption par l'écriture du fichier de réglage /s'inscrire /de signalisation. De l'espace utilisateur de l'application urnes cette et va sur le code approprié.
Les cas limites: plus ou moins d'interruptions que prévu (temps /trop d'interruptions par intervalle de temps)
Linux abstraction du fichier est utilisé pour connecter le noyau et l'espace utilisateur. Ceci est effectué par le personnage de dispositifs et
ioctl()
appels. Certains peuvent préférer sysfs les entrées pour ce but.Cela peut paraître bizarre parce que l'événement a déclenché l'appareil notifications (interruptions) sont crochetés avec "le temps déclenché" l'interrogation, mais il est en fait un système de blocage (lire/sélectionner). De toute façon, certaines questions se posent en fonction des performances.
Interruptions ne peuvent pas être pris en charge directement à l'extérieur du noyau.
E. g. la mémoire partagée peut être dans l'espace utilisateur et avec quelques I/O paramètres d'autorisation d'adresses peut être mappé, donc U-I/O fonctionne, mais pas pour direct la gestion des interruptions.
Je n'ai trouvé qu'un "rapport minoritaire" dans la rubrique vfio (http://lxr.free-electrons.com/source/Documentation/vfio.txt):
https://stackoverflow.com/a/21197797/5349798
Des questions similaires:
Utilisateur en cours d'exécution filetage dans le cadre d'une interruption dans linux
Est-il possible sous linux pour enregistrer un gestionnaire d'interruption à partir de l'espace utilisateur du programme?
Noyau Linux: invoquer le retour d'appel de la fonction dans l'espace utilisateur de l'espace noyau
Linux Interrompre vs d'Interrogation
Utilisateur de Linux de l'espace PCI pilote
Comment puis-je informer l'utilisateur de l'espace de l'application que le pilote a reçu une interruption dans linux?
OriginalL'auteur renonsz