Kontaktujte nás

info@serverion.com

Zavolejte nám

+1 (302) 380 3902

Vysvětlení PREEMPT_RT: Funkce jádra pracující v reálném čase

Vysvětlení PREEMPT_RT: Funkce jádra pracující v reálném čase

PREEMPT_RT transformuje linuxové jádro na operační systém pracující v reálném čase a zajišťuje přesné načasování kritických úloh. Je plně integrován do Linuxu 6.12 (vydaného 20. září 2024) a umožňuje práci v reálném čase pro architektury jako x86, ARM64 a RISC-V. Zde je to, co potřebujete vědět:

  • Klíčové vlastnosti:
    • Nahrazuje tradiční spinlocky preemptivními sleepingovými zámky.
    • Převádí obslužné rutiny přerušení na vlákna, čímž je činí plánovatelnými a preemptabilními.
    • Implementuje dědičnost priorit pro řešení problémů s inverzí priorit.
    • Zpřístupňuje operace RCU (čtení-kopírování-aktualizace) zcela preemptivně.
  • Aplikace:
    • Používá se v odvětvích, jako je automobilový průmysl, robotika, telekomunikace a lékařské přístroje, kde je přesné načasování kritické.
    • Napájí systémy, jako jsou nástroje průmyslové automatizace, ovládací prvky letu a hostingová prostředí vyžadující virtuální privátní servery s nízkou latencí.
  • Nastavení:
    • Umožnit CONFIG_PREEMPT_RT v konfiguraci jádra.
    • Jemné doladění nastavení, jako například KONFIG_NE_PLNÁ_HZ a CONFIG_RCU_BOOST pro optimální výkon.
    • Používejte nástroje jako cyklický test k měření latence a ověření výkonu.

PREEMPT_RT upřednostňuje načasování před propustností, díky čemuž je Linux vhodný pro aplikace, kde jsou termíny nepodmíněné. Je to zlomový bod pro odvětví vyžadující deterministický výkon.

Základní funkce PREEMPT_RT: Jak Linux dosahuje výkonu v reálném čase

Základní funkce PREEMPT_RT: Jak Linux dosahuje výkonu v reálném čase

Vysvětlení PREEMPT_RT: Sestavení a optimalizace linuxového jádra pro práci v reálném čase a ultra nízkou latenci

Základní funkce PREEMPT_RT

PREEMPT_RT se zaměřuje na čtyři hlavní funkce určené ke snížení počtu kódu, který nelze preempovat, a ke zlepšení kontroly nad plánováním úloh. Zde je bližší pohled na každou z nich.

Úplná preempce jádra

Jednou z největších aktualizací je transformace standardních spinlocků (spinlock_t) a zámky pro čtení a zápis (rwlock_t) do spací spinlocky založené na mutexech. Tradiční spinlocky mohou způsobovat zpoždění, protože deaktivují preempci a nutí úlohy do stavu zaneprázdněného čekání. PREEMPT_RT to mění zavedením zámků, které umožňují úlohám uspat a být preempovány, i když drží zdroj.

To znamená, že úlohy s vysokou prioritou mohou přerušit úlohy s nižší prioritou, a to i v případě, že tyto úlohy drží zámky. Pro určité kritické operace – jako je plánovač nebo hardwarové vstupní body – si však PREEMPT_RT zachovává raw_spinlock_t, který se chová jako původní nepředvídatelné zámky. Jak to vyjádřil Paul McKenney, významný inženýr:

"Klíčovým bodem záplaty PREEMPT_RT je minimalizovat množství kódu jádra, který nelze preemptovat, a zároveň minimalizovat množství kódu, který je nutné změnit, aby se tato dodatečná preemptnost zajistila."

Dále se podívejme, jak tento přístup prospívá ošetření přerušení.

Vláknová přerušení

PREEMPT_RT přesouvá většinu hardwarových obslužných rutin přerušení z kontextu "hard IRQ" do vlákna jádra běží v kontextu procesu. Tato úprava umožňuje upřednostnit, předejít nebo dokonce blokovat obslužné rutiny přerušení.

Ve standardním linuxovém jádře může dlouho běžící obslužná rutina přerušení vést k neomezené latenci, protože zastaví veškeré ostatní provádění. Vláknová přerušení tento problém řeší. Ve výchozím nastavení tato vlákna přerušení běží s SCHED_FIFO priorita 50, ale administrátoři si mohou priority upravit pomocí nástrojů, jako je graf. Například byste mohli upřednostnit přerušení síťové karty pro průmyslové řízení a zároveň snížit prioritu pro diskové I/O operace. Protože tato vlákna používají spinlocky ve stavu spánku namísto surových spinlocků, vyhnou se nutnosti deaktivovat hardwarová přerušení při držení zámku.

Nyní se podívejme, jak PREEMPT_RT řeší problémy související s prioritami.

Dědičnost priorit a Rtmutex

Inverze priorit je závažný problém, kdy úloha s vysokou prioritou uvízne při čekání na zdroj držený úlohou s nízkou prioritou, zatímco úloha se střední prioritou (která zdroj nepotřebuje) předejde úkolu s nízkou prioritou. PREEMPT_RT to řeší pomocí dědictví priorit, čímž se dočasně zvýší priorita úlohy s nízkou prioritou tak, aby odpovídala úkolu s nejvyšší prioritou čekajícímu na zdroj.

The rtmutex primitiv je nástroj, který to umožňuje. Zajišťuje, že v případě konfliktu úloha s nízkou prioritou získá zvýšení priority, aby mohla dokončit svou kritickou sekci bez rušení úlohami se střední prioritou. Pokud je úloha se zvýšením priority zablokována jiným zámkem, zvýšení priority se kaskádovitě promítá dolů v řetězci závislostí. Jak vysvětluje dokumentace k linuxovému jádru:

"Dědičnost priorit umožňuje dobře navrženým aplikacím používat zámky uživatelského prostoru v kritických částech vlákna s vysokou prioritou, aniž by ztratily determinismus."

Aby toho bylo dosaženo, rtmutex používá příznak a strom seřazený podle priority ke správě čekajících úloh, čímž udržuje nízké režijní náklady na podporovaných architekturách.

Nakonec se podívejme na to, jak PREEMPT_RT vylepšuje operace RCU.

Preemptabilní RCU (čtení-kopírování-aktualizace)

RCU

Read-Copy-Update (RCU) je synchronizační technika hojně používaná v linuxovém jádře. Ve standardních jádrech nejsou sekce pro čtení RCU preemptabilní, což může vést k nepředvídatelným zpožděním. PREEMPT_RT to mění tím, že RCU umožňuje sekce pro čtení. plně preemptabilní, čímž se zajistí, že nebudou ohroženy termíny úkolů v reálném čase. Tato úprava je základním kamenem pro dosažení předvídatelného chování požadovaného v systémech v reálném čase.

Jak konfigurovat a používat PREEMPT_RT

PREEMPT_RT je plně integrován do hlavních linuxových jader, což znamená, že externí záplaty již nejsou nutné. Použití nejnovější fronty záplat je však stále dobrý nápad pro lepší podporu architektury a vylepšenou grafiku. Jakmile bude jádro připraveno, budete muset upravit jeho nastavení, abyste plně využili jeho možnosti.

Nastavení konfigurace jádra

Chcete-li povolit plně preemptabilní jádro, zapněte CONFIG_PREEMPT_RT. V novějších jádrech se toto nastavení nachází v sekci "Obecné nastavení", ale může být nutné ho povolit. CONFIG_EXPERT nejprve jej zviditelněte v konfigurační nabídce.

Pro výrobu dedikované servery a dalších vysoce výkonných prostředích mohou další možnosti dále optimalizovat výkon:

  • KONFIG_NE_PLNÁ_HZSnižuje přerušení plánovacích hodin na zaneprázdněných CPU, což pomáhá minimalizovat chvění.
  • CONFIG_RCU_BOOSTZabraňuje tomu, aby preempované čtečky RCU zpožďovaly lhůty odkladu.
  • CONFIG_RCU_NOCB_CPU: Přesměruje zpracování zpětných volání RCU na konkrétní CPU, čímž snižuje rušení úloh v reálném čase.

Je také důležité vypnout možnosti ladění, které mohou způsobit vysokou latenci. Vypněte nastavení jako CONFIG_DEBUG_LOCKDEP, CONFIG_DEBUG_PREEMPT, OBJEKTY_KONFIGURACE_LADĚNÍa CONFIG_SLUB_DEBUG. I když jsou tyto nástroje užitečné pro vývoj, mohou výrazně ovlivnit cíle latence. Jak vysvětluje kernelconfig.io:

""Tato možnost promění jádro v jádro reálného času nahrazením různých zamykacích primitiv (spinlocků, rwlocků atd.) preemptivními variantami s ohledem na dědičnost priorit.""

Jakmile je jádro sestaveno a spuštěno, ověřte spuštěním příkazu PREEMPT_RT, zda je aktivní. cat /sys/kernel/realtime. Návratová hodnota 1 indikuje úspěch. Můžete to také ověřit kontrolou "PREEMPT_RT" ve výstupu uname -a.

Ladění a optimalizace výkonu

Jemné doladění jádra je nezbytné pro dosažení optimálního výkonu při práci v reálném čase. Jednou z klíčových oblastí, kterou je třeba řešit, je mechanismus škrtení v reálném čase, který ve výchozím nastavení rezervuje 50 ms za sekundu pro úlohy, které neprobíhají v reálném čase. Pokud je vaše úloha čistě v reálném čase, můžete tento mechanismus deaktivovat zápisem -1 na /proc/sys/kernel/sched_rt_runtime_us. Jak zdůrazňuje Jan Altenberg, hlavní konzultant pro open source v OSADL:

"Uprchlá‘ úloha v reálném čase může systém vyhladovět. Jako ochranný mechanismus lze omezit dobu běhu úloh v reálném čase nastavením hodnoty v mikrosekundách v souboru /proc/sys/kernel/sched_rt_runtime_us.’

Pro lepší determinismus izolujte specifická jádra CPU pomocí parametrů, jako je isolcpus=2,3, rcu_nocbs=2,3, nohz_full=2,3, a nastavte irqaffinity=0. Tím se tato jádra rezervují výhradně pro úlohy v reálném čase.

Pro správu přerušovaných vláken použijte graf nástroj. Tato vlákna obvykle běží s výchozím nastavením SCHED_FIFO prioritu 50, ale můžete ji upravit, abyste se vyhnuli konfliktům s vaší aplikací. Například pro nastavení vlákna IRQ síťové karty na prioritu 98 použijte příkaz: chrt -p -f 98.

Po dokončení konfigurace je klíčové otestovat a ověřit výkon latence. Nástroje jako cyklický test lze měřit latenci (např., cyklický test -S -m -p98 -i250), zatímco rtla (Real-time Linux Analysis) pomáhá identifikovat a analyzovat špičky latence. Tyto nástroje zajišťují, aby vaše nastavení splňovalo požadavky aplikací pracujících v reálném čase.

Aplikace a výhody PREEMPT_RT

Případy použití aplikací v reálném čase

PREEMPT_RT se osvědčuje v systémech, kde je přesnost časování nepodstatná. letecký a kosmický průmysl, zajišťuje, že navigace a řízení letu fungují bez mikrosekundových zpoždění, která by jinak mohla ohrozit bezpečnost. Telekomunikace Firmy se na něj spoléhají při správě směrování dat v reálném čase, což zajišťuje plynulé hlasové a videohovory eliminací chvění a špičkových latence.

V automobilový průmysl, je to základní kámen pro systémy řízení vozidel a jeho přijetí podporují významní hráči, jako je Continental Automotive. průmyslová automatizace, PREEMPT_RT napájí programovatelné logické automaty (PLC) a systémy SCADA a často pracuje společně s protokoly, jako je EtherCAT, aby byla zajištěna bezpečnost a efektivita ve výrobních halách. Robotika se také silně spoléhá na tuto technologii pro přesné ovládání aktuátorů a okamžitou zpětnou vazbu ze senzorů, což umožňuje robotům okamžitě reagovat na změny prostředí.

Snad nejdůležitější aplikace jsou v zdravotnické prostředky, kde je přesnost prvořadá. Od pacientských monitorů až po chirurgické roboty, PREEMPT_RT poskytuje deterministický výkon potřebný k zajištění bezchybného fungování životně důležitých systémů.

Výhody pro hostingová prostředí

Výhody PREEMPT_RT se rozšiřují i do hostingových prostředí, kde je odezva v reálném čase stejně důležitá. VPS a dedikované servery, minimalizuje latenci tím, že umožňuje plánovači upřednostnit úlohy s vysokou prioritou před méně kritickými. To zajišťuje konzistentní doby odezvy, což má přímý dopad na uživatelskou zkušenost a spolehlivost služby.

Model vláknových přerušení zabraňuje "bouřím přerušení" způsobeným zahlcením systémů během náročných I/O operací. rt_mutex, Dědičnost priorit zajišťuje, že úlohy na pozadí s nízkou prioritou neblokují kritické hostingové služby. Časovače s vysokým rozlišením umožňují přesnost plánování na úrovni mikrosekund, což snižuje chvění ve virtualizovaných nastaveních. Poskytovatelé hostingu, jako například Serverion, nabízí vlastní sestavení jádra s PREEMPT_RT, což administrátorům dává flexibilitu při doladění konfigurací pro specifické úlohy. Pomocí parametrů, jako je isolcpus a irácká afinita, Poskytovatelé mohou vyhradit jádra procesoru pro úkoly kritické pro výkon a zároveň izolovat rutinní systémové operace.

Závěr

Tato příručka se ponořila do toho, jak PREEMPT_RT proměňuje Linux v operační systém reálného času tím, že dává plánovači téměř úplnou kontrolu. Od svého začlenění do hlavních jader počínaje verzí Linuxu 6.12 (září 2024) eliminuje potřebu externích záplat napříč architekturami, jako jsou x86, ARM64 a RISC-V.

Koncept je přímočarý: co nejvíce omezit nepřerušitelný kód. Převedením spinlocků na spící zámky a spouštěním obslužných rutin přerušení jako vláken mohou úlohy s vysokou prioritou předcházet téměř všem aktivitám jádra. Funkce, jako je dědičnost priorit, zabraňují úlohám s nízkou prioritou zpožďovat kritické operace, zatímco prerušitelný RCU zajišťuje, že ani kritické sekce na straně čtení nezpůsobují významná zpoždění. Sebastian Siewior, správce PREEMPT_RT, výstižně uvádí:

""Veškerou kontrolu má plánovač.""

Tento technický skok nabízí praktické výhody. Například, Serverion používá vlastní sestavení jádra PREEMPT_RT pro jemné doladění izolace CPU a optimalizaci pracovních zátěží v reálném čase, čímž zajišťuje stabilní dobu odezvy i při intenzivním zatížení I/O.

Systémy pracující v reálném čase se od ostatních neliší jen rychlostí – je to předvídatelnost. PREEMPT_RT minimalizuje jitter a zajišťuje, že se úlohy provádějí přesně v okamžiku, kdy je to potřeba. To je klíčové pro aplikace, jako je průmyslová automatizace, telekomunikace a hostingové služby s kritickým výkonem. Přináší tak deterministické chování, které standardní jádra jednoduše nedokážou poskytnout.

Díky integraci do hlavního jádra a podpoře podnikových distribucí, jako je Ubuntu Pro (od února 2023) se PREEMPT_RT stal dostupnějším pro poskytovatele hostingu a systémové administrátory. Poskytuje spolehlivý výkon s nízkou latencí, který je vyžadován pro dnešní nejnáročnější a časově citlivá prostředí.

Nejčastější dotazy

Potřebuji PREEMPT_RT, nebo stačí standardní Linux?

Standardní linuxové jádro v kombinaci s PREEMPT_RT záplata, získává funkce pro práci v reálném čase. Díky tomu je silnou volbou pro aplikace, kde je kritická nízká latence a konzistentní doba odezvy. Samotné hlavní linuxové jádro však nemusí splňovat přísné požadavky na práci v reálném čase.

Sníží PREEMPT_RT celkovou propustnost mého systému?

Pro dosažení výkonu v reálném čase, PREEMPT_RT zaměřuje se na redukci nepřepínatelného kódu jádra, což pomáhá zlepšit odezvu systému. Tento přístup může vést k mírnému snížení celkové propustnosti, ale zajišťuje konzistentní a předvídatelné chování – což je zásadní pro časově citlivé aplikace. Tento kompromis je záměrný a klíčový pro splnění požadavků systémů reálného času.

Jaká je realistická cílová latence s PREEMPT_RT?

S PREEMPT_RT, Dosažení latence v řádu milisekund je realistickým cílem jak pro stolní počítače, tak pro vestavěné systémy. Skutečný výkon však silně závisí na tom, jak dobře je systém nakonfigurován a vyladěn tak, aby splňoval specifické požadavky. Správné nastavení je klíčem k zajištění požadované úrovně odezvy.

Související příspěvky na blogu

cs_CZ