{"id":7882,"date":"2025-11-29T07:34:12","date_gmt":"2025-11-29T06:34:12","guid":{"rendered":"https:\/\/web-dev-weissblau.de\/microconsult\/?p=7882"},"modified":"2026-02-13T09:45:05","modified_gmt":"2026-02-13T08:45:05","slug":"in-linux-real-time-the-kernel-wakes-up-my-program-too-late","status":"publish","type":"post","link":"https:\/\/www.microconsult.de\/en\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\/","title":{"rendered":"Linux real-time \u2013 Is the kernel waking up my program too late?"},"content":{"rendered":"<h2>Tipps und Tricks f\u00fcr Einrichtung und Betrieb des RT-Kernels<\/h2>\n<p style=\"text-align: left;\" align=\"center\">Autor: Dr. Carsten Emde, Open Source Automation Development Lab (OSADL) eG<\/p>\n<h3>Beitrag &#8211; Embedded Software Engineering Kongress 2017<\/h3>\n<p><strong>Dem Linuxkernel m\u00f6gliche Echtzeiteigenschaften (RT) zu geben, ist nicht schwer:<\/strong><\/p>\n<p>\u2022\u00a0<strong>Kernel herunterladen,<br \/>\n<\/strong>\u2022\u00a0<strong>RT-Patch herunterladen,<br \/>\n<\/strong>\u2022\u00a0<strong>RT-Patch einspielen,<br \/>\n<\/strong>\u2022\u00a0<strong>Kernel \u00fcbersetzen,<br \/>\n<\/strong>\u2022\u00a0<strong>Computer neu starten und<br \/>\n<\/strong>\u2022\u00a0<strong>RT-Kernel ausw\u00e4hlen.<\/strong><\/p>\n<p><strong>Auch die \u00dcberpr\u00fcfung, inwieweit sich das Antwortverhalten des neu hergestellten Kernels tats\u00e4chlich tats\u00e4chlich verbessert hat, ist recht einfach:\u00a0<\/strong><strong>Das Programm\u00a0<em>cyclictest\u00a0<\/em>starten und ein paar Stunden warten &amp;\u00a0<\/strong><strong>Ergebnis beurteilen.<\/strong><\/p>\n<p>Was kann man tun, wenn Latenzen gefunden werden, d.h. wenn der Kernel das Userspace-Programm hin und wieder mal zu sp\u00e4t aufweckt? Hierf\u00fcr gibt es verschiedene Messmethoden; aber ganz so einfach wie die Herstellung des RT-Kernels ist es nun nicht mehr. Daher werden die einzelnen Messmethoden<\/p>\n<p>\u2022 Breaktrace mit anschlie\u00dfender Trace-Analyse<br \/>\n\u2022 Kontinuierliche Latenzaufzeichnung mit Spitzendetektion<\/p>\n<p>im Detail erkl\u00e4rt und mit Beispielen vorgef\u00fchrt. Dar\u00fcber hinaus gibt es h\u00e4ufig vorkommende Latenzquellen wie z.B.<\/p>\n<p>\u2022 Frequenzmodulation und<br \/>\n\u2022 Schlafstadien,<\/p>\n<p>die ausgeschlossen werden m\u00fcssen.<\/p>\n<h2>Rekapitulation: Wie erzeuge ich einen echtzeitf\u00e4higen Linuxkernel \u2013 z.B. auf einem Intel-PC mit einer Standard-Distribution?<\/h2>\n<p>In einem ersten Schritt w\u00e4hlt man Patchlevel und Sublevel des RT-Kernels, dessen Nummer m\u00f6glichst nahe am Kernel der jeweiligen Distribution liegt. Dies ist in der Regel m\u00f6glich, da es mit wenigen Ausnahmen f\u00fcr jeden zweiten Patchlevel einen RT-Patch gibt. Wenn also z.B. die Debian-Distribution 9 (stretch) verwendet wird, kann man durch Eingabe des Kommandos<\/p>\n<p class=\"quellcode\">dpkg -l linux-image-`uname -r`<\/p>\n<p>die Information<\/p>\n<p>||\/ Name Version<br \/>\n+++-=======================&#8212;========<br \/>\n<span class=\"quellcode\">ii linux-image-4.9.0-4-amd 4.9.51-1<\/span><\/p>\n<p>erhalten, dass die aktuelle Installation den Linuxkernel in der Version 4, Patchlevel 9 und Sublevel 51 verwendet. Auf der Downloadseite des Linux-RT-Projekts &#8211;\u00a0<a title=\"Linux-RT-Projekt\" href=\"https:\/\/cdn.kernel.org\/pub\/linux\/kernel\/projects\/rt\/4.9\/older\/\" target=\"_blank\" rel=\"noopener\">https:\/\/cdn.kernel.org\/pub\/linux\/kernel\/projects\/rt\/4.9\/older\/<\/a>\u00a0&#8211; erf\u00e4hrt man dann, dass dort der RT-Patch<\/p>\n<p class=\"quellcode\">patch-4.9.47-rt37.patch.xz<\/p>\n<p>verf\u00fcgbar ist, der dem aktuellen Nicht-RT-Kernel am \u00e4hnlichsten ist. Mit den folgenden Kommandos wird<\/p>\n<p>\u2022 der dazu passende Quellcode heruntergeladen,<br \/>\n\u2022 der Patch heruntergeladen,<br \/>\n\u2022 die Archive ausgepackt und<br \/>\n\u2022 der Patch eingespielt:<\/p>\n<p><span class=\"quellcode\">mkdir -p \/usr\/src\/kernels<\/span><br \/>\n<span class=\"quellcode\">cd \/usr\/src\/kernels<\/span><br \/>\n<span class=\"quellcode\">wget https:\/\/cdn.kernel.org\/pub\/linux\/kernel\/v4.x\/linux-<\/span><br \/>\n<span class=\"quellcode\">4.9.47.tar.xz<\/span><br \/>\n<span class=\"quellcode\">wget https:\/\/cdn.kernel.org\/pub\/linux\/kernel\/projects\/rt\/<\/span><br \/>\n<span class=\"quellcode\">4.9\/older\/patch-4.9.47-rt37.patch.xz<\/span><br \/>\n<span class=\"quellcode\">tar xf linux-4.9.47.tar.xz<\/span><br \/>\n<span class=\"quellcode\">mv linux-4.9.47 linux-4.9.47-rt37<\/span><br \/>\n<span class=\"quellcode\">cd linux-4.9.47-rt37<\/span><br \/>\n<span class=\"quellcode\">xz -d ..\/patch-4.9.47-rt37.patch.xz<\/span><br \/>\n<span class=\"quellcode\">patch -p1 &lt;..\/patch-4.9.47-rt37.patch<\/span><\/p>\n<p>Damit der RT-Kernel die aktuelle Distribution m\u00f6glichst gut unterst\u00fctzt, \u00fcbernimmt man im ersten Schritt deren Kernel-Konfiguration, die sich bei Debian wie bei vielen anderen Distributionen im Verzeichnis\u00a0<em>\/boot\u00a0<\/em>befindet und in der Versionsnummer mit dem Kernel \u00fcbereinstimmt. Im vorliegenden Fall ist es die Datei\u00a0<em>\/boot\/config-4.9.0-4-amd64<\/em>, die nun unter dem Namen .config in das Root-Verzeichnis des Kernel-Quellcodes kopiert wird:<\/p>\n<p class=\"quellcode\">cp \/boot\/config-4.9.0-4-amd64 .config<\/p>\n<p>Im letzten Schritt, bevor der Kernel \u00fcbersetzt werden kann, muss nun der neue Kernel konfiguriert werden, so dass die mit dem RT-Patch eingespielte Funktionalit\u00e4t auch genutzt wird. Dazu wird das Kommando<\/p>\n<p class=\"quellcode\">make menuconfig<\/p>\n<p>aufgerufen, die Seite<\/p>\n<p class=\"quellcode\">Processor type and features &#8212;&gt;<br \/>\nPreemption Model &#8212;&gt;<\/p>\n<p>aufgerufen und\u00a0<em>Fully Preemptible Kernel (RT)\u00a0<\/em>ausgew\u00e4hlt wie in Abbildung 1 (siehe\u00a0<a href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_open_source_linux-echtzeit_-_weckt_der_kernel_mein_programm_zu_spaet_auf_osadl_emde.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) ausgef\u00fchrt. Der Kernel wird sodann in \u00fcblicher Weise \u00fcbersetzt, installiert, und das System muss danach neu gestartet werden.<\/p>\n<p class=\"quellcode\">make -j4<br \/>\nmake modules_install install<br \/>\nreboot<\/p>\n<p>Beim Neustart wird dann der RT-Kernel im Boot-Menu ausgew\u00e4hlt.<\/p>\n<h2>\u00dcberpr\u00fcfung des Antwortverhaltens des Systems<\/h2>\n<p>Als erster wichtiger Schritt nach dem Neustart sollte man sich vergewissern, ob der neue Kernel tats\u00e4chlich \u2013 zumindest formal \u2013 richtig konfiguriert wurde. Dies erkennt man daran, ob die Flags\u00a0<em>PREEMPT\u00a0<\/em>und\u00a0<em>RT\u00a0<\/em>in der Ausgabe des Programms\u00a0<em>uname\u00a0<\/em>enthalten sind:<\/p>\n<p><span class=\"quellcode\">uname -v | cut -d\u201c \u201c -f1-4<\/span><br \/>\n<span class=\"quellcode\">#1 SMP PREEMPT RT<\/span><\/p>\n<p>was hier offensichtlich der Fall ist. Ein viel besserer Beweis ist aber nat\u00fcrlich, asynchron einfallende Ereignisse zu erzeugen und zu \u00fcberpr\u00fcfen, wie lange das System h\u00f6chstens ben\u00f6tigt, damit ein auf dieses Ereignis wartender Userspace-Prozess mit Echtzeit-Priorit\u00e4t darauf reagieren kann. Die zu erwartende Zeitspanne l\u00e4sst sich mit der Faustformel<\/p>\n<p>Maximale Latenz = Taktintervall x 10\u2075<\/p>\n<p>absch\u00e4tzen. Demnach kann man also zum Beispiel bei einem System mit einer Taktfrequenz von 1 GHz und damit einem Taktintervall von 1 ns eine maximale Latenz von weniger als 100 \u03bcs erwarten. F\u00fcr die Messung der maximalen Reaktionszeit eines Userspace-Prozesses hat sich das Testprogramm\u00a0<em>cyclictest\u00a0<\/em>bew\u00e4hrt, das in der RT-Test Suite\u00a0<em>rt-tests\u00a0<\/em>enthalten ist, die vom folgenden Repository bezogen werden kann:<\/p>\n<p class=\"quellcode\">git clone git:\/\/git.kernel.org\/pub\/scm\/utils\/rt-tests\/rttests.git<\/p>\n<p>Das Programm\u00a0<em>cyclictest\u00a0<\/em>enth\u00e4lt auch gleich eine Histogramm-Funktion, mit der sich sogenannte Latenz-Plots in der Standardform herstellen lassen. In dieser Standardform werden auf der\u00a0<em>x<\/em>-Achse Latenzklassen in Mikrosekunden mit einer Granularit\u00e4t von einer Mikrosekunde aufgetragen, und auf der\u00a0<em>y<\/em>-Achse stehen die H\u00e4ufigkeiten an Messungen pro Klasse in logarithmischer Darstellung. Es handelt sich also um ein Histogramm mit der Besonderheit, dass durch die logarithmische\u00a0<em>y<\/em>-Achse sowohl sehr geringe als auch sehr gro\u00dfe H\u00e4ufigkeiten abgelesen werden k\u00f6nnen. Ein Shell-Skript, mit dem sich\u00a0<em>cyclictest\u00a0<\/em>ausf\u00fchren und sich aus den Messwerten unmittelbar ein Standard-Latenzplot erzeugen l\u00e4sst, kann von der OSADL-Webseite unter\u00a0<a title=\"OSADL\" href=\"https:\/\/www.osadl.org\/uploads\/media\/mklatencyplot.bash\" target=\"_blank\" rel=\"noopener\">https:\/\/www.osadl.org\/uploads\/media\/mklatencyplot.bash<\/a>\u00a0heruntergeladen werden. Es erfordert die vorherige Installation der Programmpakets\u00a0<em>gnuplot<\/em>, das in den meisten Distributionen enthalten ist. Au\u00dferdem wird ein Programm ben\u00f6tigt, um den vom Skript erzeugten Latenzplot\u00a0<em>plot.png\u00a0<\/em>anzuzeigen.<\/p>\n<p class=\"quellcode\"># 1. Run cyclictest<br \/>\ncyclictest -l100000000 -m -Sp90 -i200 -h400 -q &gt;output<\/p>\n<p class=\"quellcode\"># 2. Get maximum latency<br \/>\nmax=`grep &#8222;Max Latencies&#8220; output | tr &#8220; &#8220; &#8220; &#8220; | sort -n | tail -1 | sed s\/^0*\/\/`<\/p>\n<p class=\"quellcode\"># 3. Grep data lines, no empty lines a common field separator<br \/>\ngrep -v -e &#8222;^#&#8220; -e &#8222;^$&#8220; output | tr &#8220; &#8220; &#8220; &#8220; &gt;histogram<\/p>\n<p class=\"quellcode\"># 4. Set the number of cores, for example<br \/>\ncores=4<\/p>\n<p class=\"quellcode\"># 5. Create two-column data sets<br \/>\nfor i in `seq 1 `<br \/>\ndo<br \/>\ncolumn=`expr 1 + 1`<br \/>\ncut -f1, histogram &gt;histogram1<br \/>\ndone<\/p>\n<p class=\"quellcode\"># 6. Create plot command header<br \/>\necho -n -e &#8222;set title \\&#8220;Latency plot\\&#8220; \\<br \/>\nset terminal png \\<br \/>\nset xlabel \\&#8220;Latency (us), max us\\&#8220; \\<br \/>\nset logscale y \\<br \/>\nset xrange [0:400] \\<br \/>\nset yrange [0.8:*] \\<br \/>\nset ylabel \\&#8220;Number of latency samples\\&#8220; \\<br \/>\nset output \\&#8220;plot.png\\&#8220; \\<br \/>\nplot &#8220; &gt;plotcmd<\/p>\n<p class=\"quellcode\"># 7. Append plot command data references<br \/>\nfor i in `seq 1 `<br \/>\ndo<br \/>\nif test 1 != 1<br \/>\nthen<br \/>\necho -n &#8222;, &#8220; &gt;&gt;plotcmd<br \/>\nfi<br \/>\ncpuno=`expr 1 &#8211; 1`<br \/>\nif test -lt 10<br \/>\nthen<br \/>\ntitle=&#8220; CPU&#8220;<br \/>\nelse<br \/>\ntitle=&#8220;CPU&#8220;<br \/>\nfi<br \/>\necho -n &#8222;\\&#8220;histogram1\\&#8220; using 1:2 title \\&#8220;\\&#8220; with<br \/>\nhisteps&#8220; &gt;&gt;plotcmd<br \/>\ndone<\/p>\n<p class=\"quellcode\"># 8. Execute plot command<br \/>\ngnuplot -persist &lt;plotcmd<\/p>\n<p>Wird das Skript unver\u00e4ndert \u00fcbernommen, so hat es eine Laufzeit von 5 Stunden und 33 Minuten und erzeugt dabei Daten von 100 Millionen Zyklen. F\u00fcr ein aussagekr\u00e4ftiges Ergebnis m\u00fcssen w\u00e4hrend der Messung geeignete Stress-Szenarien eingerichtet werden. Ein typisches Ergebnis ist in Abbildung 2 (siehe\u00a0<a href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_open_source_linux-echtzeit_-_weckt_der_kernel_mein_programm_zu_spaet_auf_osadl_emde.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) wiedergegeben; die Skalierung der\u00a0<em>x<\/em>-Achse ist bewusst sehr hoch gew\u00e4hlt, um das Ergebnis mit langsameren Prozessoren bzw. mit Systemen, die unbefriedigende Echtzeiteigenschaften besitzen, vergleichen zu k\u00f6nnen. W\u00fcnschenswert ist eine m\u00f6glichst steile rechtsseitige Flanke der Kurve. Da es sich um einen Prozessor mit einer Taktfrequenz von 2,5 GHz und damit einem Taktintervall von 0,4 ns handelt, w\u00e4re nach oben genannter Faustformel eine maximale Latenz von 40 \u03bcs zul\u00e4ssig. Der hier gemessene Wert in H\u00f6he von 19 \u03bcs liegt deutlich darunter, so dass eine Forschung nach den Ursachen dieser Latenz und der Versuch, deren weitere Reduktion zu erreichen, wohl nicht sinnvoll sind.<\/p>\n<h2>Analyse eines Systems mit unbefriedigenden Echtzeiteigenschaften<\/h2>\n<p>Beim in Abbildung 3 (siehe\u00a0<a href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_open_source_linux-echtzeit_-_weckt_der_kernel_mein_programm_zu_spaet_auf_osadl_emde.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>)wiedergegebenen Latenzplot handelt es sich um ein Uniprozessorsystem mit x86-Architektur. Diese Architektur ben\u00f6tigt nicht selten sogenannte System Management Interrupts (SMIs), mit denen zum Beispiel bestimmte Kommunikations-Protokolle emuliert, thermische Kontrollma\u00dfnahmen organisiert und Microcode-Patche ausgef\u00fchrt werden. Da das Betriebssystem keinerlei M\u00f6glichkeit hat, SMIs zu verhindern, kann es durchaus sein, dass SMIs mit einer Ausf\u00fchrungsdauer, die l\u00e4nger als die akzeptable Latenz des Systems ist, dazu f\u00fchren, dass ein solches System grunds\u00e4tzlich nicht f\u00fcr echtzeitpflichtige Aufgaben eingesetzt werden kann. Mitunter kann eine Nachbesserung des BIOS durch den Hersteller die SMIs beseitigen oder zumindest soweit verk\u00fcrzen, dass diese nicht die Echtzeiteigenschaften des Systems beeintr\u00e4chtigen.<\/p>\n<p>Der Latenzplot in Abbildung 3 (siehe\u00a0<a href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_open_source_linux-echtzeit_-_weckt_der_kernel_mein_programm_zu_spaet_auf_osadl_emde.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) legt den Verdacht nahe, dass es sich um SMI-bedingte Latenzen handelt. Um dies n\u00e4her zu \u00fcberpr\u00fcfen, wurde das Programm\u00a0<em>hwlatdetect\u00a0<\/em>verwendet, das genau wie\u00a0<em>cyclictest\u00a0<\/em>in der bereits erw\u00e4hnten RT-Test Suite\u00a0<em>rt-tests\u00a0<\/em>enthalten ist. Ab Kernel-Patchlevel 4.9 kann dieses Programm allerdings nicht mehr verwendet werden, da seit diesem Kernel die Funktionalit\u00e4t im Mainline-Kernel enthalten ist und mit Hilfe des t<em>racing<\/em>-Subsystems verwaltet wird. Unabh\u00e4ngig von der Implementierungs-Variante besteht die Messung aus einer einmal pro Sekunde stattfindenden halbsek\u00fcndigen Halt-Operation des Prozessors, w\u00e4hrend der normalerweise keine Instruktionen ausgef\u00fchrt werden. Passiert dies dennoch, was durch regelm\u00e4\u00dfige Abfrage des\u00a0<em>Time Stamp Counters\u00a0<\/em>des Prozessors festgestellt werden kann, handelt es sich um eine extern ausgel\u00f6ste Aktivit\u00e4t, die zu Latenzen f\u00fchren und deren Dauer bestimmt werden kann. Das Ergebnis einer solchen Hardware-Latenz-Messung kann dann wiederum in Form eines Histogramms dargestellt werden.<\/p>\n<p>In Abbildung 4 (siehe\u00a0<a href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_open_source_linux-echtzeit_-_weckt_der_kernel_mein_programm_zu_spaet_auf_osadl_emde.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) erkennt man eine Vielzahl von Hardware-Latenzen, deren Dauer von knapp \u00fcber 300 \u03bcs gut zum Latenzplot des gleichen Systems in Abbildung 3 passt.<\/p>\n<h2>Weitere Testmethoden bei Vorliegen unbefriedigender Echtzeiteigenschaften<\/h2>\n<p>Wenn ein System erh\u00f6hte Latenzen aufweist, sich diese aber nicht mit SMIs erkl\u00e4ren lassen, muss versucht werden, die Ursache der Latenzen zu ermitteln. M\u00f6glicherweise gibt es einen anderen Prozess, der mit einer h\u00f6heren Priorit\u00e4t zur Latenz des beobachteten Prozesses f\u00fchrt; es ist aber auch m\u00f6glich, dass eine Systemkomponente f\u00fcr einen zu langen Zeitraum die Bearbeitung von Interrupts oder das Neustarten von Prozessen ausgesetzt hat. W\u00e4hrend ersteres sich in der Regel durch eine Analyse der aktuell laufenden Userspace-Prozesse kl\u00e4ren l\u00e4sst, erfordert letzteres eine Analyse von Kernelprozessen. F\u00fcr eine solche Analyse von Kernelprozessen enth\u00e4lt das bereits erw\u00e4hnte und verwendete Testprogramm\u00a0<em>cyclictest\u00a0<\/em>eine spezielle Option, mit der sich Kernel-Tracing zu Beginn der Operation einschalten und in dem Moment, in dem eine Latenz aufgetreten ist, wieder abschalten l\u00e4sst. Als Argument muss dieser Option, die\u00a0<em>breaktrace\u00a0<\/em>genannt wird, ein Schwellenwert mitgegeben werden, bei dessen \u00dcberschreitung das Kernel-Tracing beendet wird. Wenn sogenanntes\u00a0<em>Function Tracing\u00a0<\/em>als Trace-Methode gew\u00e4hlt wird, muss ber\u00fccksichtigt werden, dass das System dadurch etwa um den Faktor 4 langsamer wird. Dies behindert aber die Suche nach der Ursache einer Latenz nicht grunds\u00e4tzlich, da die Verlangsamung des Systems in der Regel auch zu einer Verl\u00e4ngerung der Latenzen f\u00fchrt.<\/p>\n<h2>Beispiel f\u00fcr die Verwendung des Testprogramm\u00a0<em>cyclictest\u00a0<\/em>mit\u00a0<em>breaktrace<\/em><\/h2>\n<p>Das folgende Beispiel geht von einem Mehrkernsystem aus, das eigentlich eine maximale Latenz von unter 100 \u03bcs aufweisen sollte, tats\u00e4chlich aber Latenzen von \u00fcber 1000 \u03bcs gemessen werden. Damit die zu erwartende Latenz unter Ber\u00fccksichtigung des durch das\u00a0<em>Function Tracing\u00a0<\/em>hinzunehmenden Leistungsverlusts des Systems nicht zu einem falsch positiven Abbruch der Messung f\u00fchrt, sollte die Schwelle mehr als viermal h\u00f6her, also zum Beispiel 600 \u03bcs, betragen. Da die zu analysierende Latenz von 1000 \u03bcs deutlich dar\u00fcber liegt, f\u00fchrt diese Schwelle immer noch zum gew\u00fcnschten Messabbruch. Der Aufruf des Programms\u00a0<em>cyclictest\u00a0<\/em>k\u00f6nnte in diesem Fall also lauten<\/p>\n<p><span class=\"quellcode\">cyclictest -m -Sp90 -i600 -d0 -fb600<br \/>\n<\/span><\/p>\n<p>und bei Abbruch der Messung durch \u00dcberschreiten der Latenzschwelle w\u00fcrde\u00a0<em>cyclictest\u00a0<\/em>dann die folgende Meldung ausgeben (einzelne Werte zur besseren \u00dcbersicht entfernt):<\/p>\n<p class=\"quellcode\">T: 0 P:90 I:600 C:12049 Min:19 Act: 79 Avg:120 Max: 312<br \/>\nT: 1 P:90 I:600 C:11940 Min:29 Act: 111 Avg:118 Max: 291<br \/>\nT: 2 P:90 I:600 C:11928 Min:31 Act: 189 Avg:141 Max: 295<br \/>\nT: 3 P:90 I:600 C:11911 Min:28 Act:3120 Avg:296 Max:3120<br \/>\n# Thread Ids: 18116 18118 18124 18127<br \/>\n# Break thread: 18127<br \/>\n# Break value: 3120<\/p>\n<p>Der Thread mit der PID 18127 wurde offensichtlich mit einer Verz\u00f6gerung von 3,12 ms aufgeweckt, was \u00fcber der Schwelle von 600 \u03bcs liegt. Diese Situation passt gut zu den beobachteten Latenzen. Im n\u00e4chsten Schritt muss dann der Zeitpunkt im KernelTracing aufgesucht werden, an dem der erwartete Start des verz\u00f6gerten\u00a0<em>cyclictest<\/em>-Threads ausgeblieben ist, und es muss die Ursache untersucht werden. Nicht selten liegt es daran, dass ein anderer Prozess zu diesem Zeitpunkt Interrupts gesperrt hat, so dass der Timer-Interrupt des von\u00a0<em>cyclictest\u00a0<\/em>aufgezogenen Timers nicht zur Bearbeitung gelangt. Dieser Programmfehler muss dann behoben werden, weil der gleiche Sachverhalt, der in diesem Fall das Platzhalter-Programm\u00a0<em>cyclictest\u00a0<\/em>getroffen hat, unter Produktionsbedingungen die Bearbeitung eines wichtigen Interrupts behindern und damit zu einem schwerwiegenden Maschinenfehler f\u00fchren k\u00f6nnte.<\/p>\n<h2>Beispiel f\u00fcr die Verwendung des internen Latenz-Histogramme des Kernels<\/h2>\n<p>\u00c4hnlich wie das Programm\u00a0<em>cyclictest\u00a0<\/em>im Userspace die verz\u00f6gerte Ausf\u00fchrung eines Interrupts misst, kann man dies auch im Kernel tun und jedes Mal, wenn ein Timer abl\u00e4uft, die Differenz zwischen geplantem und tats\u00e4chlichem Aufwachzeitpunkt bestimmen und in einem Histogramm speichern. Au\u00dferdem kann man die Zeit zwischen dem Beginn des Scheduling-Vorgangs eines aufzuweckenden Prozesses und dessen tats\u00e4chlichen Ausf\u00fchrungsbeginn messen und ebenfalls in einem Histogramm speichern. Dies gilt auch f\u00fcr die Summe der Dauer der beiden Vorg\u00e4nge, die jeweils in einem dritten Histogramm abgespeichert wird. W\u00e4hrend das Programm\u00a0<em>cyclictest\u00a0<\/em>niemals zusammen mit einem unter Produktionsbedingungen laufenden Echtzeitprogramm ablaufen darf \u2013 zumindest nicht auf dem gleichen Prozessorkern \u2013 kann man die Messung mit den internen Latenz-Histogrammen durchaus parallel laufen lassen und sogar Idle-Bedingungen erfassen. Damit die internen Latenz-Histogramme des Kernels zur Verf\u00fcgung stehen, m\u00fcssen diese konfiguriert und zur Laufzeit eingeschaltet werden. Die Konfiguration erfolgt im Menu\u00a0<em>Kernel Hacking\/Tracers\u00a0<\/em>mit den einzelnen Komponenten\u00a0<em>Scheduling Latency Tracer<\/em>,\u00a0<em>Scheduling Latency Histogram\u00a0<\/em>und\u00a0<em>Missed Timer Offsets Histogram.\u00a0<\/em>Zum Einschalten der Histogramme muss ein Wert ungleich Null im\u00a0<em>enable<\/em>-Verzeichnis in die jeweilige Datei geschrieben werden.<\/p>\n<p>Abbildung 5\u00a0(siehe\u00a0<a href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_open_source_linux-echtzeit_-_weckt_der_kernel_mein_programm_zu_spaet_auf_osadl_emde.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) zeigt eine 30-st\u00fcndige Aufzeichnung der Summe von Timer- und Aufwach-Verz\u00f6gerung eines Vierkernsystems; es sind die Maxima aufeinanderfolgender 5-Minuten-Intervalle angegeben. Dies ist m\u00f6glich, weil die internen Latenz-Histogramme des Kernels \u00fcber eine Reset-Funktion verf\u00fcgen, die in diesem Fall alle f\u00fcnf Minuten ausgel\u00f6st wurde. Deutlich erkennt man die sehr niedrige Latenz in der Zeit von 5:10 bis 6:40 Uhr und von 7:10 bis 12:43 und jeweils 12 Stunden sp\u00e4ter, in der die Taktfrequenzen der Prozessoren auf Maximum gestellt und alle Schlafstadien abgeschaltet waren. In der \u00fcbrigen Zeit liegen die Latenzwerte deutlich dar\u00fcber, da es sich in diesem Fall um einen relativ modernen Prozessor (Intel Bay Trail) handelt, der \u00fcber ein breites Spektrum an Energiesparmethoden verf\u00fcgt. Wenn man dem Prozessor erlaubt, diese zu nutzen, muss man als Nebenwirkung eine deutlich verl\u00e4ngerte Latenz bzw. den kompletten Verlust jeglicher Echtzeitf\u00e4higkeit hinnehmen.<\/p>\n<p>Neben den Histogrammen werden auch die Daten der am Scheduling beteiligten Prozesse erfasst, und es werden die Prozesse, die jeweils zur bis dahin h\u00f6chsten Latenz gef\u00fchrt haben zusammen mit Priorit\u00e4ten, Prozess-ID und Latenzen abgespeichert. Auf diese Weise kann es gelingen, den Prozess, Thread oder Treiber zu ermitteln, der in einem bestimmten Fall f\u00fcr eine erh\u00f6hte Latenz verantwortlich ist. Dies erleichtert es in der Regel sehr, den zu Grunde liegenden Fehler zu beheben.<\/p>\n<p>Das Beispiel in Tabelle 1 (siehe\u00a0<a href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_open_source_linux-echtzeit_-_weckt_der_kernel_mein_programm_zu_spaet_auf_osadl_emde.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) zeigt eine Auflistung der Scheduling-Daten der acht h\u00f6chsten Latenzen w\u00e4hrend eines Tests mit\u00a0<em>cyclictest<\/em>. Wie man sieht, war in jedem Fall das Programm\u00a0<em>meminfo\u00a0<\/em>f\u00fcr die beobachtete erh\u00f6hte Latenz verantwortlich. Dies ist ein starker Hinweis darauf, dass\u00a0<em>meminfo\u00a0<\/em>einen Kernelaufruf vornimmt, der den Linuxkernel daran hindert,\u00a0<em>cyclictest\u00a0<\/em>in der normalerweise kurzen Zeit von h\u00f6chstens 20 \u03bcs aufzuwecken.<\/p>\n<p>Die weitere Analyse ergab, dass bei diesem Kernel die Konfiguration<\/p>\n<p class=\"quellcode\">CONFIG_SLABINFO<\/p>\n<p>eingeschaltet war und w\u00e4hrend der Messung der Aufruf<\/p>\n<p class=\"quellcode\">cat \/proc\/slabinfo<\/p>\n<p>wiederholt ausgef\u00fchrt wurde. Beim Auslesen der Debugdaten des\u00a0<em>SLAB\u00a0<\/em>Allocators kann der Kernel je nach Speicherbelegung und Speicherkonfiguration f\u00fcr einen l\u00e4ngeren Zeitraum nicht unterbrochen werden. Der folgende Patch sorgt daf\u00fcr, dass diese Kernel-Konfiguration nicht eingeschaltet wird, wenn gleichzeitig Real-Time gew\u00e4hlt ist.<\/p>\n<p class=\"quellcode\">&#8212;<br \/>\ninit\/Kconfig | 1 +<br \/>\n1 file changed, 1 insertion(+)<br \/>\nIndex: linux-4.9.47-rt37\/init\/Kconfig<br \/>\n==============================================================<br \/>\n<strong>&#8212; linux-4.9.47-rt37.orig\/init\/Kconfig<br \/>\n+++ linux-4.9.47-rt37\/init\/Kconfig<br \/>\n@@ -1946,6 +1946,7 @@ config SLABINFO<br \/>\n<\/strong>bool<br \/>\ndepends on PROC_FS<br \/>\ndepends on SLAB || SLUB_DEBUG<br \/>\n<strong>+ depends on !PREEMPT_RT_FULL<br \/>\n<\/strong>default y<br \/>\nconfig RT_MUTEXES<\/p>\n<p>Nach Einspielen dieses Patches, \u00dcbersetzen des Kernels, Installation und Neustart traten die beobachteten Latenzen selbst bei schnell und h\u00e4ufig wiederholtem Auslesen der virtuellen Dartei\u00a0<em>\/proc\/slabinfo\u00a0<\/em>nicht mehr auf.<\/p>\n<p>Wenn die entsprechende Funktion beim Auslesen von\u00a0<em>\/proc\/slabinfo\u00a0<\/em>mit eingeschaltetem\u00a0<em>CONFIG_SLABINFO<\/em>-Flag in Zukunft an die Erfordernisse des Real-Time-Kernels angepasst sein sollte, kann dieser zur Zeit nur lokal eingesetzte Patch nat\u00fcrlich wieder entfallen.<\/p>\n<h2>Autor<\/h2>\n<p>Carsten Emde blickt auf eine mehr als 25-j\u00e4hrige T\u00e4tigkeit als Software-Entwickler, System-Integrator und Trainer zur\u00fcck. Seine Spezialgebiete sind graphische Bedienoberfl\u00e4chen, maschinelle Bilderkennung und Echtzeit-Betriebssysteme. Seit der Gr\u00fcndung der Open Source Automation Development Lab (OSADL) eG im Jahre 2005 ist er deren Gesch\u00e4ftsf\u00fchrer.<\/p>\n<p><a title=\"Fachinfo_ESE_Open Source_Linux-Echtzeit - Weckt der Kernel mein Programm zu sp\u00e4t auf_OSADL_Emde\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_open_source_linux-echtzeit_-_weckt_der_kernel_mein_programm_zu_spaet_auf_osadl_emde.pdf\" target=\"_blank\" rel=\"noopener\"><strong>Beitrag als PDF downloaden<\/strong><\/a><\/p>\n<hr \/>\n<h2>Open Source &#8211; unsere Trainings &amp; Coachings<\/h2>\n<p><strong>Wollen Sie sich auf den aktuellen Stand der Technik bringen?<\/strong><\/p>\n<p>Dann informieren Sie sich\u00a0<a title=\"MicroConsult Training\" href=\"https:\/\/www.microconsult.de\/alle-trainings-termine-komplettuebersicht\/\" target=\"_blank\" rel=\"noopener\"><strong>hier<\/strong>\u00a0<\/a>zu Schulungen\/ Seminaren\/ Trainings\/ Workshops und individuellen Coachings von MircoConsult zum Thema Open Source \/ Embedded Software Engineering.<\/p>\n<p><strong>Training &amp; Coaching zu den weiteren Themen unseren Portfolios finden Sie\u00a0<a title=\"Training &amp; Beratung - alle Themen\" href=\"https:\/\/www.microconsult.de\/training-beratung\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n<hr \/>\n<h2>Open Source &#8211; Fachwissen<\/h2>\n<p>Wertvolles Fachwissen zum Thema\u00a0Open Source \/ Embedded Software Engineering steht\u00a0<a title=\"Embedded- und Echtzeit-Softwareentwicklung\" href=\"https:\/\/www.microconsult.de\/embedded-und-echtzeit-softwareentwicklung\/\" target=\"_blank\" rel=\"noopener\"><strong>hier\u00a0<\/strong><\/a>f\u00fcr Sie zum kostenfreien Download bereit.<\/p>\n<p><a title=\"Embedded- und Echtzeit-Softwareentwicklung\" href=\"https:\/\/www.microconsult.de\/embedded-und-echtzeit-softwareentwicklung\/\" target=\"_blank\" rel=\"noopener\"><strong>Zu den Fachinformationen<\/strong><\/a><\/p>\n<p><strong>Fachwissen zu weiteren Themen unseren Portfolios finden Sie <a title=\"MicroConsult Fachwissen\" href=\"https:\/\/www.microconsult.de\/fachwissen\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tipps und Tricks f\u00fcr Einrichtung und Betrieb des RT-Kernels Autor: Dr. Carsten Emde, Open Source Automation Development Lab (OSADL) eG Beitrag &#8211; Embedded Software Engineering Kongress 2017 Dem Linuxkernel m\u00f6gliche Echtzeiteigenschaften (RT) zu geben, ist nicht schwer: \u2022\u00a0Kernel herunterladen, \u2022\u00a0RT-Patch herunterladen, \u2022\u00a0RT-Patch einspielen, \u2022\u00a0Kernel \u00fcbersetzen, \u2022\u00a0Computer neu starten und \u2022\u00a0RT-Kernel ausw\u00e4hlen. Auch die \u00dcberpr\u00fcfung, inwieweit [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-7882","post","type-post","status-publish","format-standard","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Linux-Echtzeit - Weckt der Kernel mein Programm zu sp\u00e4t auf? - MicroConsult Academy GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microconsult.de\/en\/in-linux-real-time-the-kernel-wakes-up-my-program-too-late\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Linux-Echtzeit - Weckt der Kernel mein Programm zu sp\u00e4t auf? - MicroConsult Academy GmbH\" \/>\n<meta property=\"og:description\" content=\"Tipps und Tricks f\u00fcr Einrichtung und Betrieb des RT-Kernels Autor: Dr. Carsten Emde, Open Source Automation Development Lab (OSADL) eG Beitrag &#8211; Embedded Software Engineering Kongress 2017 Dem Linuxkernel m\u00f6gliche Echtzeiteigenschaften (RT) zu geben, ist nicht schwer: \u2022\u00a0Kernel herunterladen, \u2022\u00a0RT-Patch herunterladen, \u2022\u00a0RT-Patch einspielen, \u2022\u00a0Kernel \u00fcbersetzen, \u2022\u00a0Computer neu starten und \u2022\u00a0RT-Kernel ausw\u00e4hlen. Auch die \u00dcberpr\u00fcfung, inwieweit [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microconsult.de\/en\/in-linux-real-time-the-kernel-wakes-up-my-program-too-late\/\" \/>\n<meta property=\"og:site_name\" content=\"MicroConsult Academy GmbH\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-29T06:34:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-13T08:45:05+00:00\" \/>\n<meta name=\"author\" content=\"weissblau media\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"weissblau media\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\\\/\"},\"author\":{\"name\":\"weissblau media\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"headline\":\"Linux-Echtzeit &#8211; Weckt der Kernel mein Programm zu sp\u00e4t auf?\",\"datePublished\":\"2025-11-29T06:34:12+00:00\",\"dateModified\":\"2026-02-13T08:45:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\\\/\"},\"wordCount\":2832,\"commentCount\":0,\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\\\/\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\\\/\",\"name\":\"Linux-Echtzeit - Weckt der Kernel mein Programm zu sp\u00e4t auf? - MicroConsult Academy GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\"},\"datePublished\":\"2025-11-29T06:34:12+00:00\",\"dateModified\":\"2026-02-13T08:45:05+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.microconsult.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Linux-Echtzeit &#8211; Weckt der Kernel mein Programm zu sp\u00e4t auf?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/\",\"name\":\"MicroConsult Academy GmbH\",\"description\":\"Professionelle Schulungen, Beratung und Projektunterst\u00fctzung\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.microconsult.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\",\"name\":\"weissblau media\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"caption\":\"weissblau media\"},\"sameAs\":[\"https:\\\/\\\/www.microconsult.de\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Linux Real-Time - Is the kernel waking my program too late? - MicroConsult Academy GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microconsult.de\/en\/in-linux-real-time-the-kernel-wakes-up-my-program-too-late\/","og_locale":"en_GB","og_type":"article","og_title":"Linux-Echtzeit - Weckt der Kernel mein Programm zu sp\u00e4t auf? - MicroConsult Academy GmbH","og_description":"Tipps und Tricks f\u00fcr Einrichtung und Betrieb des RT-Kernels Autor: Dr. Carsten Emde, Open Source Automation Development Lab (OSADL) eG Beitrag &#8211; Embedded Software Engineering Kongress 2017 Dem Linuxkernel m\u00f6gliche Echtzeiteigenschaften (RT) zu geben, ist nicht schwer: \u2022\u00a0Kernel herunterladen, \u2022\u00a0RT-Patch herunterladen, \u2022\u00a0RT-Patch einspielen, \u2022\u00a0Kernel \u00fcbersetzen, \u2022\u00a0Computer neu starten und \u2022\u00a0RT-Kernel ausw\u00e4hlen. Auch die \u00dcberpr\u00fcfung, inwieweit [&hellip;]","og_url":"https:\/\/www.microconsult.de\/en\/in-linux-real-time-the-kernel-wakes-up-my-program-too-late\/","og_site_name":"MicroConsult Academy GmbH","article_published_time":"2025-11-29T06:34:12+00:00","article_modified_time":"2026-02-13T08:45:05+00:00","author":"weissblau media","twitter_card":"summary_large_image","twitter_misc":{"Written by":"weissblau media","Estimated reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microconsult.de\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\/#article","isPartOf":{"@id":"https:\/\/www.microconsult.de\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\/"},"author":{"name":"weissblau media","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"headline":"Linux-Echtzeit &#8211; Weckt der Kernel mein Programm zu sp\u00e4t auf?","datePublished":"2025-11-29T06:34:12+00:00","dateModified":"2026-02-13T08:45:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microconsult.de\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\/"},"wordCount":2832,"commentCount":0,"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microconsult.de\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microconsult.de\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\/","url":"https:\/\/www.microconsult.de\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\/","name":"Linux Real-Time - Is the kernel waking my program too late? - MicroConsult Academy GmbH","isPartOf":{"@id":"https:\/\/www.microconsult.de\/#website"},"datePublished":"2025-11-29T06:34:12+00:00","dateModified":"2026-02-13T08:45:05+00:00","author":{"@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"breadcrumb":{"@id":"https:\/\/www.microconsult.de\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microconsult.de\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.microconsult.de\/linux-echtzeit-weckt-der-kernel-mein-programm-zu-spaet-auf\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microconsult.de\/"},{"@type":"ListItem","position":2,"name":"Linux-Echtzeit &#8211; Weckt der Kernel mein Programm zu sp\u00e4t auf?"}]},{"@type":"WebSite","@id":"https:\/\/www.microconsult.de\/#website","url":"https:\/\/www.microconsult.de\/","name":"MicroConsult Academy GmbH","description":"Professional training, consulting and project support","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microconsult.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a","name":"weissblau media","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","caption":"weissblau media"},"sameAs":["https:\/\/www.microconsult.de"]}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7882","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/comments?post=7882"}],"version-history":[{"count":7,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7882\/revisions"}],"predecessor-version":[{"id":11718,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7882\/revisions\/11718"}],"wp:attachment":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/media?parent=7882"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/categories?post=7882"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/tags?post=7882"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}