{"id":2709,"date":"2012-07-09T07:00:58","date_gmt":"2012-07-09T06:00:58","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=2709"},"modified":"2012-11-30T13:35:31","modified_gmt":"2012-11-30T12:35:31","slug":"la-pandaboard-au-poteau-de-torture-4-timers-xenomai","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2012\/07\/09\/la-pandaboard-au-poteau-de-torture-4-timers-xenomai\/","title":{"rendered":"La Pandaboard au poteau de torture &#8211; 4 &#8211; Timers Xenomai"},"content":{"rendered":"<p style=\"text-align: justify;\"><a href=\"http:\/\/www.blaess.fr\/christophe\/2012\/07\/09\/la-pandaboard-au-poteau-de-torture-4-timers-xenomai\/\" rel=\"attachment wp-att-2742\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-thumbnail wp-image-2742\" title=\"La Pandaboard au poteau de torture - 4\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/07\/panda-poteau-150x150.png\" alt=\"La Pandaboard au poteau de torture - 4\" width=\"150\" height=\"150\" \/><\/a>Dans les pr\u00e9c\u00e9dents articles nous avons observ\u00e9 les limites de performance des <a title=\"La Pandaboard au poteau de torture \u2013 2 \u2013 Fluctuations de timers Linux\" href=\"http:\/\/www.blaess.fr\/christophe\/2012\/06\/18\/la-pandaboard-au-poteau-de-torture-2-fluctuations-de-timers-linux\/\">timers Linux<\/a> et <a title=\"La Pandaboard au porteau de torture \u2013 3 \u2013 Timers Linux et Linux-rt\" href=\"http:\/\/www.blaess.fr\/christophe\/2012\/07\/02\/la-pandaboard-au-porteau-de-torture-3-timers-linux-et-linux-rt\/\">Linux-rt<\/a> sur une Pandabaord. Cette fois nous allons comparer ces r\u00e9sultats avec ceux que nous obtenons sous Xenomai.<\/p>\n<p style=\"text-align: justify;\">Aurons-nous une meilleure stabilit\u00e9 des t\u00e2ches p\u00e9riodiques&nbsp;?<\/p>\n<p>\n<!--more-->\n<\/p>\n<h1>Environnement d&rsquo;exp\u00e9rimentation<\/h1>\n<p style=\"text-align: justify;\">Nous devons tout d&rsquo;abord compiler un noyau Linux pour la Pandaboard apr\u00e8s lui avoir appliqu\u00e9 le patch Xenomai. Ceci est relativement simple, je l&rsquo;avais d\u00e9j\u00e0 d\u00e9crit dans un <a title=\"Xenomai sur Pandaboard\" href=\"http:\/\/www.blaess.fr\/christophe\/2011\/11\/27\/xenomai-sur-pandaboard\/\">article pr\u00e9c\u00e9dent<\/a>.<\/p>\n<p style=\"text-align: justify;\">Voici bri\u00e8vement les \u00e9tapes \u00e0 suivre, nous consid\u00e9rons que la partition de boot de la Pandaboard est mont\u00e9e dans notre arborescence dans <code>\/media\/Boot<\/code> et sa partition racine dans <code>\/media\/Root<\/code>.<\/p>\n<pre>          <em>T\u00e9l\u00e9charger Xenomai<\/em>\n[~]$ <strong>git clone http:\/\/git.xenomai.org\/xenomai-2.6.git xenomai<\/strong>\nCloning into 'xenomai'...\n  [...]\n          <em>T\u00e9l\u00e9charger et d\u00e9compresser Linux<\/em>\n[~]$ <strong>wget <a title=\"http:\/\/www.kernel.org\/pub\/linux\/kernel\/v2.6\/linux-2.6.38.8.tar.bz2\" href=\"http:\/\/www.kernel.org\/pub\/linux\/kernel\/v2.6\/linux-2.6.38.8.tar.bz2\">http:\/\/www.kernel.org\/pub\/linux\/kernel\/v2.6\/linux-2.6.38.8.tar.bz2<\/a><\/strong>\n  [...]\n[~]$ <strong>tar xjf ~\/Data\/Repository\/linux-2.6.38.8.tar.bz2<\/strong>\n\n          <em>Appliquer le patch Adeos sur Linux<\/em>\n[~]$ <strong>xenomai\/scripts\/prepare-kernel.sh --linux=linux-2.6.38.8\/ --ipipe=xenomai\/ksrc\/arch\/arm\/patches\/adeos-ipipe-2.6.38.8-arm-1.18-08.patch --arch=arm<\/strong>\npatching file arch\/arm\/Kconfig\npatching file arch\/arm\/boot\/compressed\/head.S\n  [...]\n\n          <em>Configurer et compiler Linux et ses modules<\/em>\n[~]$ <strong>cd linux-2.6.38.8<\/strong>\n[linux-2.6.38.8]$ <strong>wget <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/config-linux-2.6.38.8-xenomai\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/config-linux-2.6.38.8-xenomai\">http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/config-linux-2.6.38.8-xenomai<\/a><\/strong>\n  [...]\n[linux-2.6.38.8]$ <strong>mv config-linux-2.6.38.8-xenomai .config<\/strong>\n[linux-2.6.38.8]$ <strong>make ARCH=arm oldconfig<\/strong>\n  [...]\n[linux-2.6.38.8]$ <strong>make ARCH=arm CROSS_COMPILE=~\/cross-panda\/usr\/bin\/arm-linux- uImage<\/strong>\n  [...]\nLoad Address: 80008000\nEntry Point:  80008000\n  Image arch\/arm\/boot\/uImage is ready\n[linux-2.6.38.8]$ <strong>make ARCH=arm CROSS_COMPILE=~\/cross-panda\/usr\/bin\/arm-linux- modules<\/strong>\n  [...]\n  IHEX2FW firmware\/keyspan_pda\/keyspan_pda.fw\n  IHEX2FW firmware\/keyspan_pda\/xircom_pgs.fw\n[linux-2.6.38.8]$ \n\n        <em>Copier le noyau sur la partition de boot de la Pandaboard<\/em>\n[linux-2.6.38.8]$ <strong>cp arch\/arm\/boot\/uImage \/media\/Boot\/<\/strong>\n\n        <em>Copier les modules sur la partition racine de la Pandaboard<\/em>\n[linux-2.6.38.8]$ make ARCH=arm INSTALL_MOD_PATH=\/media\/Root  modules_install\n  [...]\n  INSTALL \/media\/Root\/lib\/firmware\/keyspan_pda\/keyspan_pda.fw\n  INSTALL \/media\/Root\/lib\/firmware\/keyspan_pda\/xircom_pgs.fw\n  DEPMOD  2.6.38.8-xenomai\n[linux-2.6.38.8]$ \n\n        <em>Compiler et installer les biblioth\u00e8ques de Xenomai<\/em>\n[linux-2.6.38.8]$ <strong>cd ..\/xenomai<\/strong>\n[xenomai]$ <strong>PATH=$PATH:~\/cross-panda\/usr\/bin\/<\/strong>\n[xenomai]$ <strong>.\/configure --prefix=\/media\/Root\/usr\/xenomai --host=arm-linux CFLAGS='-march=armv7-a' LDFLAGS='-march=armv7-a' --enable-smp<\/strong>\n  [...]\nconfig.status: linking .\/include\/asm-generic to src\/include\/asm-generic\/xenomai\nconfig.status: executing depfiles commands\nconfig.status: executing libtool commands\n[xenomai]$ <strong>make<\/strong>\n  [...]\n[xenomai]$ <strong>make install<\/strong>  <em>(peut n\u00e9cessiter les droits root)<\/em><\/pre>\n<p style=\"text-align: justify;\">Avant de d\u00e9marrer notre Pandaboard sur Xenomai, il nous faut un outil de test des timers. Voici un programme, calqu\u00e9 sur <a title=\"La Pandaboard au poteau de torture \u2013 2 \u2013 Fluctuations de timers Linux\" href=\"http:\/\/www.blaess.fr\/christophe\/2012\/06\/18\/la-pandaboard-au-poteau-de-torture-2-fluctuations-de-timers-linux\/#programme\">celui<\/a> que nous avons employ\u00e9 pour Linux et Linux-Rt, qui emploie l&rsquo;API native de Xenomai.<\/p>\n<pre><strong><a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/fluctuations-timer-xenomai.c\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/fluctuations-timer-xenomai.c\">fluctuations-timer-xenomai.c: <\/a><\/strong>\n#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;unistd.h&gt;\n#include &lt;sys\/mman.h&gt;\n\n#include &lt;rtdk.h&gt;\n#include &lt;native\/task.h&gt;\n#include &lt;native\/timer.h&gt;\n\nstatic <strong>RTIME periode<\/strong>;\nstatic int nb_mesures = 0; \/\/ Nombre de mesures entre deux affichages\n\nvoid <strong>fonction_periodique<\/strong> (void * unused)\n{\n    RTIME precedent = 0; \n    RTIME heure = 0;\n    RTIME duree;\n\n    int mesure = 0;\n    long long int min = -1;\n    long long int max = 0;\n    long long int max_max = 0;\n    double sum = 0.0;\n\n    periode = periode * 1000; \/\/ en ns\n    <strong>rt_task_set_periodic<\/strong>(NULL, TM_NOW, periode);\n    while(1) {\n        <strong>rt_task_wait_period<\/strong>(NULL);\n        heure = <strong>rt_timer_read<\/strong>();\n        if (mesure != 0) { \n            duree = heure - precedent;\n            duree = duree \/ 1000; \/\/ en microsecondes\n            if ((min == -1) || (duree &lt; min))\n                min = duree;\n            if (duree &gt; max) {\n                max = duree;\n                if (max_max &lt; max)\n                    max_max = max;\n            }\n            sum += duree;\n        }\n        precedent = heure;\n        mesure ++;\n        if (mesure &gt;= nb_mesures) {\n            <strong>rt_fprintf<\/strong>(stdout, \"[%ld] Min.= %lld, Moy.= %.1lf, Max.= %lld,  Max.Max.= %lldn\",\n                (long int)(heure\/1000000000), min, sum \/ nb_mesures, max, max_max);\n            min = -1;\n            max = 0;\n            sum = 0.0;\n            mesure = 0;\n            rt_print_flush_buffers();\n        }\n    }\n}\n\nint main (int argc, char * argv[])\n{\n    int cpu = 0;\n    RT_TASK task;\n    int err;\n\n    mlockall(MCL_CURRENT|MCL_FUTURE);\n    <strong>rt_print_auto_init<\/strong>(1);\n\n    if ((argc &lt; 2)\n     || (sscanf(argv[1], \"%lld\", &amp; periode) != 1)\n     || ((argc == 3) &amp;&amp; (sscanf(argv[2], \"%d\", &amp; cpu) != 1))) {\n        fprintf(stderr, \"usage: %s periode_us [cpu]n\", argv[0]);\n        exit(EXIT_FAILURE);\n    }\n\n    if ((periode &lt;= 0) || (periode &gt; 2000000)) {\n        fprintf(stderr, \"%s: La periode doit etre dans [1, 2000000]n\", argv[0]);\n        exit(EXIT_FAILURE);\n    }\n\n    if ((cpu &lt; 0) || (cpu &gt;= sysconf(_SC_NPROCESSORS_ONLN))) {\n        fprintf(stderr, \"%s: Le CPU doit etre dans [0, %ld]n\", argv[0], sysconf(_SC_NPROCESSORS_ONLN) - 1);\n        exit(EXIT_FAILURE);\n    }\n\n    setvbuf(stdout, NULL, _IONBF, 0);\n\n    nb_mesures = 5000000 \/ periode;\n    if (nb_mesures == 0) {\n        fprintf(stderr, \"periode trop longuen\");\n        exit(EXIT_FAILURE);\n    }\n\n    if ((err = <strong>rt_task_spawn<\/strong>(&amp; task, \"Fluctuation-RT-TIMER\", 0, 99, T_JOINABLE | T_CPU(cpu),\n                             fonction_periodique, NULL)) != 0) {\n        fprintf(stderr, \"rt_task_spawn: %sn\", strerror(-err));\n        exit(EXIT_FAILURE);\n    }\n\n    rt_task_join(&amp; task);\n    return EXIT_SUCCESS;\n}<\/pre>\n<p style=\"text-align: justify;\">On passe au programme deux arguments&nbsp;: la p\u00e9riode du timer (en microsecondes) et le num\u00e9ro du CPU sur lequel il doit s&rsquo;ex\u00e9cuter. Pour compiler ce code, il nous faut un <em>Makefile<\/em> qui g\u00e8re les options de compilation de Xenomai.<\/p>\n<pre><strong><a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/Makefile\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/Makefile\">Makefile :<\/a><\/strong>\n.PHONY: all\nall: fluctuations-timer-xenomai\n\nXENOCONFIG?=\/usr\/xenomai\/bin\/xeno-config\n\nfluctuations-timer-xenomai:fluctuations-timer-xenomai.c\n\t$(shell $(XENOCONFIG) --cc) $(shell $(XENOCONFIG) --skin=native --cflags) $(shell $(XENOCONFIG) --skin=native --ldflags) -L $(shell  $(XENOCONFIG) --skin=native --libdir) -o fluctuations-timer-xenomai fluctuations-timer-xenomai.c -lnative -lxenomai\n\n.PHONY: clean\nclean::\n\trm -f  *.o  .*.o  .*.o.* *.ko  .*.ko  *.mod.* .*.mod.* .*.cmd *~\n\trm -f Module.symvers Module.markers modules.order \n\trm -rf .tmp_versions\n\trm -f fluctuations-timer-xenomai<\/pre>\n<p style=\"text-align: justify;\">Les param\u00e8tres de compilation seront fournis par le script <code>xeno-config<\/code> qui se trouve dans le r\u00e9pertoire d&rsquo;installation de Xenomai (sur la partition <em>Root<\/em> de la carte SD).<\/p>\n<pre>$ <strong>make XENOCONFIG=\/media\/Root\/usr\/xenomai\/bin\/xeno-config<\/strong>\narm-linux-gcc -I\/media\/Root\/usr\/xenomai\/include -D_GNU_SOURCE -D_REENTRANT -D__XENO__ -lnative -L\/media\/Root\/usr\/xenomai\/lib -lxenomai -lpthread -lrt -L \/media\/Root\/usr\/xenomai\/lib -o fluctuations-timer-xenomai fluctuations-timer-xenomai.c -lnative -lxenomai\n$ <strong>cp fluctuations-timer-xenomai \/media\/Root\/usr\/local\/bin\/<\/strong>\n$<\/pre>\n<p style=\"text-align: justify;\">Enfin, pour lancer le programme en boucle, j&rsquo;ai r\u00e9utilis\u00e9 le script mis au point <a title=\"La Pandaboard au poteau de torture \u2013 2 \u2013 Fluctuations de timers Linux\" href=\"http:\/\/www.blaess.fr\/christophe\/2012\/06\/18\/la-pandaboard-au-poteau-de-torture-2-fluctuations-de-timers-linux\/#script\">pr\u00e9c\u00e9demment<\/a>, en rempla\u00e7ant le nom du fichier de r\u00e9sultat<\/p>\n<pre style=\"padding-left: 30px;\">resultat-fluctuations-timer-<strong>linux<\/strong>-${COMPTEUR}.txt<\/pre>\n<p style=\"text-align: justify;\">en<\/p>\n<pre style=\"padding-left: 30px;\">resultat-fluctuations-timer-<strong>xenomai<\/strong>-${COMPTEUR}.txt<\/pre>\n<p style=\"text-align: justify;\">et l&rsquo;invocation<\/p>\n<pre style=\"padding-left: 30px;\">chrt -f 99 \/usr\/local\/bin\/fluctuations-timer 100<\/pre>\n<p style=\"text-align: justify;\">par l&rsquo;appel du programme ci-dessus ainsi<\/p>\n<pre style=\"padding-left: 30px;\">\/usr\/local\/bin\/fluctuations-timer-xenomai 100 0<\/pre>\n<p style=\"text-align: justify;\">Nous copions donc <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/lance-test-fluctuations-timer-xenomai.sh\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/lance-test-fluctuations-timer-xenomai.sh\">le script modifi\u00e9<\/a> dans le syst\u00e8me de fichiers sur la carte SD.<\/p>\n<pre>$ <strong>wget <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/lance-test-fluctuations-timer-xenomai.sh\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/lance-test-fluctuations-timer-xenomai.sh\">http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/lance-test-fluctuations-timer-xenomai.sh<\/a><\/strong>\n[...]\n$ <strong>cp lance-test-fluctuations-timer-xenomai.sh \/media\/Root\/usr\/local\/bin\/<\/strong>\n$ <strong>umount \/media\/*oot<\/strong>\n$<\/pre>\n<h1>Lancement du test<\/h1>\n<p style=\"text-align: justify;\">J&rsquo;ai tout d&rsquo;abord fait tourner le test sur le c\u0153ur 1, en modifiant dans le script le second argument sur la ligne invoquant le programme <code>fluctuations-timer-xenomai<\/code>. Le syst\u00e8me \u00e9tait soumis \u00e0 une tr\u00e8s forte charge en appels-syst\u00e8me, en processus, et en interruptions externes. Nous avons vu dans l&rsquo;article pr\u00e9c\u00e9dent que les traitements des interruptions \u00e9taient, par d\u00e9faut, r\u00e9alis\u00e9s sur le c\u0153ur 0. Aussi notre programme s&rsquo;ex\u00e9cutant sur le c\u0153ur 1 est l\u00e9g\u00e8rement pr\u00e9serv\u00e9 de leurs effets.<\/p>\n<p style=\"text-align: justify;\">Le premier test s&rsquo;est d\u00e9roul\u00e9 pendant une quinzaine d&rsquo;heures (puis j&rsquo;ai d\u00fb interrompre l&rsquo;exp\u00e9rience car il me fallait d\u00e9brancher l&rsquo;alimentation). J&rsquo;ai alors r\u00e9alis\u00e9 un graphique avec le m\u00eame script que les exp\u00e9riences sous Linux et Linux-rt<\/p>\n<p><a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/07\/resultat-fluctuations-timer-xenomai-1-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2730\" title=\"Fluctuations d'un timer Xenomai - Jour 1 (premi\u00e8re version)\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/07\/resultat-fluctuations-timer-xenomai-1-1-300x225.png\" alt=\"Fluctuations d'un timer Xenomai - Jour 1 (premi\u00e8re version)\" width=\"300\" height=\"225\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Quelle surprise&nbsp;! Alors qu&rsquo;avec Linux <em>vanilla<\/em> et Linux-rt les fluctuations s&rsquo;\u00e9tendaient jusqu&rsquo;\u00e0 6 millisecondes, les r\u00e9sultats sous Xenomai montrent des timers dont la pire variation ne d\u00e9passe pas 128 microsecondes au lieu de 100 microsecondes, soient 28 microsecondes de <em>jitter<\/em>. J&rsquo;ai d\u00fb modifier le script de cr\u00e9ation du graphique en zoomant <strong>20 fois<\/strong> l&rsquo;axe des ordonn\u00e9es.<\/p>\n<p><a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/07\/resultat-fluctuations-timer-xenomai-1-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2731\" title=\"Fluctuations d'un timer Xenomai - Jour 1 (seconde version)\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/07\/resultat-fluctuations-timer-xenomai-1-2-300x225.png\" alt=\"Fluctuations d'un timer Xenomai - Jour 1 (seconde version)\" width=\"300\" height=\"225\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">On peut remarquer sur ce graphique des p\u00e9riodes nettes o\u00f9 les valeurs fluctuent dans des intervalles diff\u00e9rents. Je suppose qu&rsquo;il s&rsquo;agit des moments o\u00f9 j&rsquo;ajoutais des <code>ping<\/code> <em>flood<\/em> suppl\u00e9mentaires depuis d&rsquo;autres machines.<\/p>\n<p style=\"text-align: justify;\">Encourag\u00e9 par ces premiers r\u00e9sultats, j&rsquo;ai relanc\u00e9 le test pendant deux jours, en le pla\u00e7ant cette fois sur le c\u0153ur z\u00e9ro, l\u00e0 o\u00f9 les interruptions sont trait\u00e9es. Les variations sont l\u00e9g\u00e8rement plus importantes puisque l&rsquo;on atteint un maximum de 151 microsecondes au lieu de 100 microsecondes. Voici les graphiques correspondants.<\/p>\n<p><a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/07\/resultat-fluctuations-timer-xenomai-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2732\" title=\"Fluctuations d'un timer Xenomai - Jour 2\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/07\/resultat-fluctuations-timer-xenomai-2-300x225.png\" alt=\"Fluctuations d'un timer Xenomai - Jour 2\" width=\"300\" height=\"225\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/07\/resultat-fluctuations-timer-xenomai-3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2733\" title=\"Fluctuations d'un timer Xenomai - Jour 3\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/07\/resultat-fluctuations-timer-xenomai-3-300x225.png\" alt=\"Fluctuations d'un timer Xenomai - Jour 3\" width=\"300\" height=\"225\" \/><\/a><\/p>\n<h1>Conclusion<\/h1>\n<p style=\"text-align: justify;\">Ce test met en relief les performances de Xenomai, compar\u00e9es \u00e0 celles de Linux et Linux-rt. Les t\u00e2ches temps r\u00e9el de Xenomai s&rsquo;ex\u00e9cutent avec une fiabilit\u00e9 beaucoup plus grande en ce qui concerne l&rsquo;instant de d\u00e9clenchement. Nous voyons que la fluctuation maximale obtenue sur une Pandaboard avec un timer Xenomai est de 51 microsecondes (j&rsquo;ai prolong\u00e9 encore l&rsquo;exp\u00e9rience depuis, et obtenu la m\u00eame limite maximale). Ceci est coh\u00e9rent avec les r\u00e9sultats fournis par l&rsquo;outil <code>latency<\/code> livr\u00e9 avec Xenomai, qui nous indique ici une latence maximale de 51.579 microsecondes sur un test \u00e0 haute charge de 6 heures.<\/p>\n<pre>[Panda]# <strong>export LD_LIBRARY_PATH=\/usr\/xenomai\/lib<\/strong>\n[Panda]# <strong>\/usr\/xenomai\/bin\/latency -p 100 -T 21700<\/strong>\n== Sampling period: 100 us\n== Test mode: periodic user-mode task\n== All results in microseconds\nwarming up...\n[...]\nRTD|      3.507|      7.674|     27.321|       0|     0|      2.908|     51.579\nRTD|      3.517|      7.724|     30.472|       0|     0|      2.908|     51.579\n---|-----------|-----------|-----------|--------|------|-------------------------\nRTS|      2.908|      7.797|     51.579|       0|     0|    06:00:00\/06:00:00\n[Panda]#<\/pre>\n<h1>Pour en savoir plus:<\/h1>\n<ul>\n<li>L&rsquo;<a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/resultats-fluctuations-xenomai.tar.bz2\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-07-09\/resultats-fluctuations-xenomai.tar.bz2\">archive<\/a> contenant les fichiers des r\u00e9sultats.<\/li>\n<li>Mon nouveau livre \u00ab\u00a0<a title=\"Solutions temps r\u00e9el sous Linux\" href=\"http:\/\/www.blaess.fr\/christophe\/livres\/solutions-temps-reel-sous-linux\/\">Solutions temps r\u00e9el sous Linux<\/a>\u00ab\u00a0<\/li>\n<li>Sessions de formation \u00ab\u00a0<a title=\"Formation Temps r\u00e9el Linux et Xenomai\" href=\"http:\/\/www.logilin.fr\/Formation_Temps_Reel_Linux_Xenomai.html\" target=\"_blank\">Temps r\u00e9el Linux et Xenomai<\/a>\u00a0\u00bb que j&rsquo;anime chez <a title=\"Logilin - Ing\u00e9nierie et formations\" href=\"http:\/\/www.logilin.fr\/Prestations-ingenierie-Linux.html\" target=\"_blank\">Logilin<\/a>.<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Dans les pr&eacute;c&eacute;dents articles nous avons observ&eacute; les limites de performance des timers Linux et Linux-rt sur une Pandabaord. Cette fois nous allons comparer ces r&eacute;sultats avec ceux que nous obtenons sous Xenomai. Aurons-nous une meilleure stabilit&eacute; des t&acirc;ches p&eacute;riodiques&nbsp;?<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,8,14],"tags":[],"class_list":["post-2709","post","type-post","status-publish","format-standard","hentry","category-embarque","category-linux-2","category-temps-reel"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/2709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=2709"}],"version-history":[{"count":2,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/2709\/revisions"}],"predecessor-version":[{"id":3233,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/2709\/revisions\/3233"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=2709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=2709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=2709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}