2017-06-02 12 views
0

J'ai une machine Linux avec deux cartes PCIe RS-485 (XR17V354 & XR17V352). J'ai un port sur l'une des cartes câblé à un port sur l'autre carte. Ces cartes sont pilotées par le pilote série générique (serial8250). Je fais un test et mesure la latence. J'ai un processus Linux envoyant deux octets sur le port, puis écoute deux octets entrants. L'autre processus reçoit deux octets et renvoie immédiatement deux octets.Comment mesurer la latence entre une interruption de matériel et un appel système associé?

Je mesure cette latence d'aller-retour à environ 1500 microsecondes avec un écart-type d'environ 40 microsecondes. J'essaie de comprendre la source de cette latence. Spécifiquement, je voudrais comprendre la différence de temps à partir de laquelle un IRQ dur se déclenche pour signaler que les données sont prêtes à lire et le temps que les octets sont rendus disponibles pour le processus d'espace utilisateur.

Je suis conscient de la fonction ftrace, mais je ne suis pas sûr de la meilleure façon de l'utiliser, ou s'il y a d'autres outils plus appropriés. Merci.

Répondre

0

Quel type de pilote est-ce? Je suppose que c'est un pilote dans l'espace noyau et non UIO. Indépendant de votre problème, vous pouvez commencer à regarder combien de temps cela prend d'une interruption matérielle au pilote du noyau et de là à l'espace utilisateur. Ici, [1] est un ancien cas de test qui peut être piraté un peu afin que vous puissiez comparer les latences d'interruption avec Linux "standard", préinstallé Linux corrigé et peut-être quelque chose comme Xenomai (bien que la solution Xenomai que vous réécrivez votre pilote). Vous voudrez peut-être jeter un oeil à [2], cyclictest et amis et peut-être essayer d'explorer avec perf dans votre système pour voir plus de détails sur le système.

Enfin, jetez un coup d'œil à LTTng [3] qui vous permet de coder un instrument et qui possède déjà de nombreux points d'instrumentation.

[1] http://www.denx.de/wiki/DULG/AN2008_03_Xenomai_gpioirqbench

[2] http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-rt/rt-tests/

[3] http://lttng.org/