{"id":6894,"date":"2024-10-07T06:00:47","date_gmt":"2024-10-07T05:00:47","guid":{"rendered":"https:\/\/www.blaess.fr\/christophe\/?p=6894"},"modified":"2024-11-13T15:14:57","modified_gmt":"2024-11-13T14:14:57","slug":"essai-anticipe-de-linux-6-12","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2024\/10\/07\/essai-anticipe-de-linux-6-12\/","title":{"rendered":"Essai anticip\u00e9 du temps r\u00e9el de Linux 6.12"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><a href=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2024\/10\/linux-6.12-rc1-01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"751\" height=\"587\" src=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2024\/10\/linux-6.12-rc1-01.png\" alt=\"\" class=\"wp-image-6928\" style=\"width:322px;height:auto\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2024\/10\/linux-6.12-rc1-01.png 751w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2024\/10\/linux-6.12-rc1-01-300x234.png 300w\" sizes=\"auto, (max-width: 751px) 100vw, 751px\" \/><\/a><\/figure><\/div>\n\n\n<p>La future branche <strong>6.12<\/strong> du noyau Linux, qui sera publi\u00e9e \u00e0 la fin du mois de novembre, contiendra plusieurs nouveaut\u00e9s par rapport au noyau actuel. La plus comment\u00e9e depuis deux semaines concerne l&rsquo;int\u00e9gration compl\u00e8te du patch <strong>PREEMPT_RT<\/strong> dans le noyau. Annonc\u00e9e lors du <em>Maintainer Summit<\/em> du 17 septembre dernier, cette int\u00e9gration se manifeste par un <em>patch<\/em> sur la fonction <code>printk()<\/code> qui repr\u00e9sentait le dernier point de blocage.<\/p>\n\n\n\n<p>Il n&rsquo;y aura donc plus besoin de <em>patch<\/em> pour b\u00e9n\u00e9ficier de la pr\u00e9emptibilit\u00e9 totale du noyau sur les trois architectures principales pour le temps r\u00e9el&nbsp;: <code>x86<\/code>, <code>riscv<\/code> et <code>aarch64<\/code> (ARM 64 bits). Il faudra n\u00e9anmoins toujours appliquer un <em>patch<\/em> (du moins pendant quelques temps) pour l&rsquo;architecture ARM 32 bits par exemple.<\/p>\n\n\n\n<p>Comment tester cette nouveaut\u00e9&nbsp;? C&rsquo;est tr\u00e8s simple&nbsp;: je vous propose de faire un <em>build<\/em> rapide pour une machine virtuelle <em>Risc-V<\/em> 64 bits en utilisant <em>Buildroot<\/em> et la version <em>release candidate<\/em> 6.12-rc2 du <em>kernel<\/em>, disponible depuis quelques heures.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"has-text-align-center\">&#8211;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Compilation d&rsquo;une image avec le kernel 6.12<\/h2>\n\n\n\n<p>Nous t\u00e9l\u00e9chargeons et extrayons l&rsquo;archive de Buildroot (la derni\u00e8re version stable \u00e0 ce jour)&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <strong>wget <a href=\"https:\/\/www.buildroot.org\/downloads\/buildroot-2024.02.6.tar.xz\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">https:\/\/www.buildroot.org\/downloads\/buildroot-2024.02.6.tar.xz<\/a><\/strong>\n$ <strong>tar xf buildroot-2024.02.6.tar.xz<\/strong>\n$ <strong>cd buildroot-2024.02.6<\/strong>\n<\/code><\/pre>\n\n\n\n<p>Nous pr\u00e9parons un <em>build<\/em> pour une machine virtuelle Risc-V 64 bits (dans la premi\u00e8re commande l&rsquo;option <code><strong>-O<\/strong><\/code> est un \u00ab\u00a0O majuscule\u00a0\u00bb pas un z\u00e9ro)&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <strong>make  O=..\/build-riscv64  qemu_riscv64_virt_defconfig<\/strong>\n   &#91;...]\n$ <strong>cd  ..\/build-riscv64<\/strong>\n$ <strong>make  menuconfig<\/strong><\/code><\/pre>\n\n\n\n<p>Nous voici devant le menu de configuration de Buildroot. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"647\" height=\"410\" src=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2024\/10\/linux-6.12-rc1-00-1.png\" alt=\"\" class=\"wp-image-6909\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2024\/10\/linux-6.12-rc1-00-1.png 647w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2024\/10\/linux-6.12-rc1-00-1-300x190.png 300w\" sizes=\"auto, (max-width: 647px) 100vw, 647px\" \/><\/figure><\/div>\n\n\n<p>Nous faisons deux modifications dans la configuration par d\u00e9faut&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>menu <code><strong>Toolchain<\/strong><\/code>, option <code><strong>Toolchain type<\/strong><\/code>, on s\u00e9lectionne <code><strong>External toolchain<\/strong><\/code> : ceci va acc\u00e9l\u00e9rer tr\u00e8s sensiblement notre <em>build<\/em>,<\/li>\n\n\n\n<li>menu <code><strong>Kernel<\/strong><\/code>, dans la troisi\u00e8me ligne (<code><strong>Kernel version<\/strong><\/code>) on inscrit le num\u00e9ro <code><strong>6.12-rc2<\/strong><\/code><\/li>\n<\/ul>\n\n\n\n<p>Faisons un premier <em>build<\/em> avec les options par d\u00e9faut du noyau&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <strong>make<\/strong><\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center\">&#8211;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Essai du noyau standard<\/h2>\n\n\n\n<p>Une fois la compilation termin\u00e9e, nous lan\u00e7ons l&rsquo;\u00e9mulateur Qemu pour tester l&rsquo;image produite&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <strong>.\/images\/start-qemu.sh \n<\/strong><\/code><\/pre>\n\n\n\n<p>L&rsquo;image virtuelle d\u00e9marre, et une ligne de <em>login<\/em> nous permet de nous connecter&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenSBI v1.2\n   ____                    _____ ____ _____\n  \/ __ \\                  \/ ____|  _ \\_   _|\n | |  | |_ __   ___ _ __ | (___ | |_) || |\n | |  | | '_ \\ \/ _ \\ '_ \\ \\___ \\|  _ &lt; | |\n | |__| | |_) |  __\/ | | |____) | |_) || |_\n  \\____\/| .__\/ \\___|_| |_|_____\/|____\/_____|\n        | |\n        |_|\n\nPlatform Name             : riscv-virtio,qemu\nPlatform Features         : medeleg\nPlatform HART Count       : 1\nPlatform IPI Device       : aclint-mswi\nPlatform Timer Device     : aclint-mtimer @ 10000000Hz\nPlatform Console Device   : uart8250\nPlatform HSM Device       : ---\nPlatform PMU Device       : ---\nPlatform Reboot Device    : sifive_test\nPlatform Shutdown Device  : sifive_test\nFirmware Base             : 0x80000000\nFirmware Size             : 252 KB\nRuntime SBI Version       : 1.0\n\n &#91;...]\n\n&#91;    0.349051] ALSA device list:\n&#91;    0.349163]   No soundcards found.\n&#91;    0.362716] EXT4-fs (vda): mounting ext2 file system using the ext4 subsystem\n&#91;    0.369613] EXT4-fs (vda): mounted filesystem ce6ccc3f-186a-416c-8df7-30c7aecdfe27 ro without journal. Quota mode: disabled.\n&#91;    0.369979] VFS: Mounted root (ext2 filesystem) readonly on device 254:0.\n&#91;    0.372643] devtmpfs: mounted\n&#91;    0.400024] Freeing unused kernel image (initmem) memory: 2280K\n&#91;    0.400449] Run \/sbin\/init as init process\n&#91;    0.513732] EXT4-fs (vda): re-mounted ce6ccc3f-186a-416c-8df7-30c7aecdfe27 r\/w. Quota mode: disabled.\nSaving 256 bits of creditable seed for next boot\nStarting syslogd: OK\nStarting klogd: OK\nRunning sysctl: OK\nStarting network: udhcpc: started, v1.36.1\nudhcpc: broadcasting discover\nudhcpc: broadcasting select for 10.0.2.15, server 10.0.2.2\nudhcpc: lease of 10.0.2.15 obtained from 10.0.2.2, lease time 86400\ndeleting routers\nadding dns 10.0.2.3\nOK\n\nWelcome to Buildroot\nbuildroot login: <strong>root<\/strong>\n<\/code><\/pre>\n\n\n\n<p>Une fois connect\u00e9s, nous pouvons v\u00e9rifier la version du <em>kernel<\/em> et ses options principales avec<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># <strong>uname -a<\/strong>\nLinux buildroot 6.12.0-rc2 #1 SMP Sun Oct  7 05:55:21 CEST 2024 riscv64 GNU\/Linux\n<\/code><\/pre>\n\n\n\n<p>Nous pouvons aussi examiner la liste des t\u00e2ches pr\u00e9sentes&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># <strong>ps<\/strong>\nPID   USER     COMMAND\n    1 root     init\n    2 root     &#91;kthreadd]\n    3 root     &#91;pool_workqueue_]\n    4 root     &#91;kworker\/R-rcu_g]\n    5 root     &#91;kworker\/R-sync_]\n    6 root     &#91;kworker\/R-slub_]\n    7 root     &#91;kworker\/R-netns]\n    8 root     &#91;kworker\/0:0-eve]\n    9 root     &#91;kworker\/0:0H-ev]\n   10 root     &#91;kworker\/0:1-eve]\n   11 root     &#91;kworker\/u4:0-ev]\n   12 root     &#91;kworker\/R-mm_pe]\n   13 root     &#91;rcu_tasks_trace]\n   14 root     &#91;ksoftirqd\/0]\n   15 root     &#91;rcu_sched]\n   16 root     &#91;rcu_exp_par_gp_]\n   17 root     &#91;rcu_exp_gp_kthr]\n   18 root     &#91;migration\/0]\n   19 root     &#91;cpuhp\/0]\n   20 root     &#91;kdevtmpfs]\n   21 root     &#91;kworker\/R-inet_]\n   22 root     &#91;kworker\/u4:1-ev]\n   23 root     &#91;kauditd]\n   24 root     &#91;khungtaskd]\n   25 root     &#91;oom_reaper]\n   26 root     &#91;kworker\/R-write]\n   27 root     &#91;kcompactd0]\n   28 root     &#91;kworker\/R-kbloc]\n   29 root     &#91;kworker\/R-blkcg]\n   30 root     &#91;kworker\/R-ata_s]\n   31 root     &#91;kworker\/R-devfr]\n   32 root     &#91;watchdogd]\n   33 root     &#91;kworker\/R-rpcio]\n   34 root     &#91;kworker\/0:1H-kb]\n   35 root     &#91;kworker\/R-xprti]\n   36 root     &#91;kswapd0]\n   37 root     &#91;kworker\/R-nfsio]\n   38 root     &#91;kworker\/R-kthro]\n   40 root     &#91;kworker\/R-uas]\n   41 root     &#91;kworker\/R-mld]\n   42 root     &#91;kworker\/R-ipv6_]\n   43 root     &#91;kworker\/R-ext4-]\n   62 root     \/sbin\/syslogd -n\n   66 root     \/sbin\/klogd -n\n  106 root     udhcpc -t1 -A3 -b -R -O search -O staticroutes -p \/var\/run\/udhcp\n  108 root     -sh\n  109 root     &#91;kworker\/u4:2]\n  110 root     &#91;kworker\/0:2]\n  113 root     ps<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center\">&#8211;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Essai du noyau temps r\u00e9el<\/h2>\n\n\n\n<p>Nous quittons l&rsquo;\u00e9mulateur (avec les touches <strong>CTRL-A X<\/strong>) et nous allons \u00e0 pr\u00e9sent activer l&rsquo;option <code><strong>PREEMPT_RT<\/strong><\/code> du noyau. Pour cela nous appelons le menu de configuration du <em>kernel<\/em> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <strong>make linux-menuconfig<\/strong>\n<\/code><\/pre>\n\n\n\n<p>Un nouveau menu s&rsquo;ouvre, qui propose les options sp\u00e9cifiques au noyau&nbsp;:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"637\" height=\"615\" src=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2024\/10\/linux-6.12-rc1-02.png\" alt=\"\" class=\"wp-image-6926\" style=\"width:665px;height:auto\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2024\/10\/linux-6.12-rc1-02.png 637w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2024\/10\/linux-6.12-rc1-02-300x290.png 300w\" sizes=\"auto, (max-width: 637px) 100vw, 637px\" \/><\/figure><\/div>\n\n\n<p>Nous entrons dans le premier menu <code><strong>General setup<\/strong><\/code> et modifions le sous-menu <code><strong>Preemption Model<\/strong><\/code> pour s\u00e9lectionner <code><strong>Fully Preemptible Kernel (Real-Time)<\/strong><\/code>.<\/p>\n\n\n\n<p>Suivant les architectures, il peut \u00eatre n\u00e9cessaire d&rsquo;activer d&rsquo;abord l&rsquo;option <code><strong>Configure standard kernel features (expert users)<\/strong><\/code> situ\u00e9e un peu plus bas dans le m\u00eame menu <code><strong>General setup<\/strong><\/code> pour que l&rsquo;option <code><strong>Fully Preemptible Kernel (Real-Time)<\/strong><\/code> apparaisse.<\/p>\n\n\n\n<p>Nous pouvons relancer la compilation&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <strong>make<\/strong>\n<\/code><\/pre>\n\n\n\n<p>Puis relancer l&rsquo;\u00e9mulateur qui d\u00e9marre comme pr\u00e9c\u00e9demment&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenSBI v1.2\n   ____                    _____ ____ _____\n  \/ __ \\                  \/ ____|  _ \\_   _|\n | |  | |_ __   ___ _ __ | (___ | |_) || |\n | |  | | '_ \\ \/ _ \\ '_ \\ \\___ \\|  _ &lt; | |\n | |__| | |_) |  __\/ | | |____) | |_) || |_\n  \\____\/| .__\/ \\___|_| |_|_____\/|____\/_____|\n        | |\n        |_|\n\nPlatform Name             : riscv-virtio,qemu\nPlatform Features         : medeleg\nPlatform HART Count       : 1\n &#91;...]\n&#91;    0.600687] VFS: Mounted root (ext2 filesystem) readonly on device 254:0.\n&#91;    0.602597] devtmpfs: mounted\n&#91;    0.630470] Freeing unused kernel image (initmem) memory: 2284K\n&#91;    0.630809] Run \/sbin\/init as init process\n&#91;    0.756784] EXT4-fs (vda): warning: mounting unchecked fs, running e2fsck is recommended\n&#91;    0.764133] EXT4-fs (vda): re-mounted dc00b5c2-5b9d-4344-a4ff-cf1359ce6268 r\/w. Quota mode: disabled.\nSeeding 256 bits and crediting\nSaving 256 bits of creditable seed for next boot\nStarting syslogd: OK\nStarting klogd: OK\nRunning sysctl: OK\nStarting network: udhcpc: started, v1.36.1\nudhcpc: broadcasting discover\nudhcpc: broadcasting select for 10.0.2.15, server 10.0.2.2\nudhcpc: lease of 10.0.2.15 obtained from 10.0.2.2, lease time 86400\ndeleting routers\nadding dns 10.0.2.3\nOK\n\nWelcome to Buildroot\nbuildroot login: <strong>root<\/strong><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># <strong>uname -a<\/strong>\nLinux buildroot 6.12.0-rc2 #2 SMP <strong><mark style=\"background-color:#ffff80\" class=\"has-inline-color\">PREEMPT_RT<\/mark><\/strong> Sun Oct  7 06:27:48 CEST 2024 riscv64 GNU\/Linux\n<\/code><\/pre>\n\n\n\n<p>Nous voyons que l&rsquo;option <code>PREEMPT_RT<\/code> est bien activ\u00e9e dans le noyau. Cette option garantit que le temps de r\u00e9veil d&rsquo;une t\u00e2che temps r\u00e9el lors de l&rsquo;arriv\u00e9e d&rsquo;une interruption qu&rsquo;elle attend sera beaucoup plus constant qu&rsquo;avec un noyau standard. C&rsquo;est un premier point tr\u00e8s important pour am\u00e9liorer la qualit\u00e9 du temps r\u00e9el de Linux.<\/p>\n\n\n\n<p>V\u00e9rifions \u00e0 pr\u00e9sent la liste des t\u00e2ches&nbsp;: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># <strong>ps<\/strong>\nPID   USER     COMMAND\n    1 root     init\n    2 root     &#91;kthreadd]\n    3 root     &#91;pool_workqueue_]\n    4 root     &#91;kworker\/R-rcu_g]\n    5 root     &#91;kworker\/R-sync_]\n    6 root     &#91;kworker\/R-slub_]\n    7 root     &#91;kworker\/R-netns]\n    8 root     &#91;kworker\/0:0-eve]\n    9 root     &#91;kworker\/0:1-eve]\n   10 root     &#91;kworker\/0:0H-ev]\n   11 root     &#91;kworker\/u4:0-ev]\n   12 root     &#91;kworker\/R-mm_pe]\n   13 root     &#91;rcu_tasks_kthre]\n   14 root     &#91;rcu_tasks_trace]\n   15 root     &#91;ksoftirqd\/0]\n   16 root     &#91;pr\/legacy]\n   17 root     &#91;rcu_preempt]\n   18 root     &#91;rcub\/0]\n   19 root     &#91;rcu_exp_par_gp_]\n   20 root     &#91;rcuc\/0]\n   21 root     &#91;rcu_exp_gp_kthr]\n   22 root     &#91;migration\/0]\n   <mark style=\"background-color:#ffff80\" class=\"has-inline-color\">23 root     &#91;irq_work\/0]<\/mark>\n   24 root     &#91;cpuhp\/0]\n   25 root     &#91;kdevtmpfs]\n   26 root     &#91;kworker\/R-inet_]\n   27 root     &#91;kworker\/u4:1-ev]\n   28 root     &#91;kauditd]\n   29 root     &#91;khungtaskd]\n   30 root     &#91;oom_reaper]\n   31 root     &#91;kworker\/R-write]\n   32 root     &#91;kcompactd0]\n   33 root     &#91;kworker\/R-kbloc]\n   34 root     &#91;kworker\/R-blkcg]\n   35 root     &#91;kworker\/R-ata_s]\n   36 root     &#91;kworker\/R-devfr]\n   37 root     &#91;backlog_napi\/0]\n   38 root     &#91;watchdogd]\n   39 root     &#91;kworker\/0:1H-kb]\n   40 root     &#91;kworker\/R-rpcio]\n   41 root     &#91;kworker\/R-xprti]\n   42 root     &#91;kswapd0]\n   43 root     &#91;kworker\/R-nfsio]\n   44 root     &#91;kworker\/R-kthro]\n   <mark style=\"background-color:#ffff80\" class=\"has-inline-color\">46 root     &#91;irq\/13-virtio0]<\/mark>\n   <mark style=\"background-color:#ffff80\" class=\"has-inline-color\">47 root     &#91;irq\/14-virtio1]<\/mark>\n   48 root     &#91;kworker\/R-uas]\n   <mark style=\"background-color:#ffff80\" class=\"has-inline-color\">49 root     &#91;irq\/15-101000.r]<\/mark>\n   50 root     &#91;kworker\/R-mld]\n   51 root     &#91;kworker\/R-ipv6_]\n   <mark style=\"background-color:#ffff80\" class=\"has-inline-color\">52 root     &#91;irq\/12-ttyS0]<\/mark>\n   53 root     &#91;kworker\/R-ext4-]\n   72 root     \/sbin\/syslogd -n\n   76 root     \/sbin\/klogd -n\n   98 root     &#91;kworker\/0:2]\n  117 root     udhcpc -t1 -A3 -b -R -O search -O staticroutes -p \/var\/run\/udhcp\n  119 root     -sh\n  121 root     &#91;kworker\/u4:2-ev]\n  123 root     ps<\/code><\/pre>\n\n\n\n<p>Par rapport \u00e0 la premi\u00e8re liste, nous observons la pr\u00e9sence de lignes <code>[irq\/...]<\/code>.<\/p>\n\n\n\n<p>Il s&rsquo;agit de <em>threads<\/em> du kernel charg\u00e9s de prendre en charge la partie non-urgente d&rsquo;un gestionnaire d&rsquo;interruption. Cela \u00e9vite de suspendre les t\u00e2ches applicatives temps r\u00e9el pendant une dur\u00e9e prolong\u00e9e lorsqu&rsquo;une interruption sans urgence (r\u00e9seau, clavier, etc.) se pr\u00e9sente. C&rsquo;est le second point crucial pour la qualit\u00e9 du temps r\u00e9el de Linux.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Nous voyons, avec cette petite exp\u00e9rience rapide, que l&rsquo;option <code>CONFIG_PREEMPT_RT<\/code> est effectivement disponible dans le noyau Linux 6.12 sans ajout de patch suppl\u00e9mentaire (du moins pour les architectures X86, Risc-V et ARM 64 bits). Cela permet une mise en oeuvre plus simple des fonctionnalit\u00e9s temps r\u00e9el propos\u00e9e par Linux.<\/p>\n\n\n\n<p>Bien s\u00fbr pour v\u00e9rifier v\u00e9ritablement le comportement temps r\u00e9el du syst\u00e8me, il faudrait utiliser des outils de test comme <code><strong>cyclictest<\/strong><\/code> et <code><strong>hackbench<\/strong><\/code> par exemple, mais cela ne pr\u00e9senterait pas d&rsquo;int\u00e9r\u00eat sur une machine virtuelle, il faudra refaire ce test sur une vraie carte lors de la sortie du noyau finalis\u00e9.<\/p>\n\n\n\n<p>Pour en savoir plus sur les apports du projet PREEMPT_RT d\u00e9j\u00e0 int\u00e9gr\u00e9s dans le noyau depuis une vingtaine d&rsquo;ann\u00e9es, je vous conseille la conf\u00e9rence de Steven Rostedt lors des <a href=\"https:\/\/kernel-recipes.org\/en\/2024\/\" data-type=\"link\" data-id=\"https:\/\/kernel-recipes.org\/en\/2024\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Kernel Recipes 2024<\/strong><\/a> :<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Kernel Recipes 2024 - Making the kernel suck less!\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/AjFTVxAU3Vg?list=PLQ8PmP_dnN7L11sHfHc3CF9__SCV_vL2T\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"has-text-align-center\">&#8211;<\/p>\n\n\n\n<p>Pour en savoir plus et mettre en pratique le temps r\u00e9el de Linux, n\u2019h\u00e9sitez \u00e0 participer \u00e0 une session de formation \u00ab\u00a0<strong><a href=\"https:\/\/www.logilin.fr\/formation-temps-reel-linux.php\" data-type=\"link\" data-id=\"https:\/\/www.logilin.fr\/formations-linux-industriel\/formation-temps-reel-sous-linux\/\">Temps r\u00e9el sous Linux<\/a><\/strong>\u00a0\u00bb que j\u2019anime chez <a href=\"https:\/\/www.logilin.fr\/\" data-type=\"link\" data-id=\"https:\/\/www.logilin.fr\/\"><strong>Logilin<\/strong><\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>La future branche 6.12 du noyau Linux, qui sera publi&eacute;e &agrave; la fin du mois de novembre, contiendra plusieurs nouveaut&eacute;s par rapport au noyau actuel. La plus comment&eacute;e depuis deux semaines concerne l&rsquo;int&eacute;gration compl&egrave;te du patch PREEMPT_RT dans le noyau. Annonc&eacute;e lors du Maintainer Summit du 17 septembre dernier, cette int&eacute;gration se manifeste par un [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,22,19,8,14],"tags":[],"class_list":["post-6894","post","type-post","status-publish","format-standard","hentry","category-actualite","category-buildroot","category-kernel","category-linux-2","category-temps-reel"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/6894","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=6894"}],"version-history":[{"count":22,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/6894\/revisions"}],"predecessor-version":[{"id":6971,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/6894\/revisions\/6971"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=6894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=6894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=6894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}