Idővel csökkentik az alkalmazások válaszideje a linux

Mi vagyunk mi?

Dolgozik a számítógépen, folyamatosan szembesülnek különféle késések. Próbálja ki mindkét Campiglio mag, zenét hallgatni, a filmek letöltését a neten és a gépelés az OpenOffice.org. Biztos vagyok benne, hogy előbb-utóbb akkor szembe a tény, hogy író jelek jelennek után néhány másodperccel azután, hogy nyomjon meg egy gombot a billentyűzeten, és a játékos folyamatosan dadogás. Hogyan lehetséges, hogy csökkentse a reagálási időt alkalmazások Linux - operációs rendszer timesharing. ahol minden folyamat egyenlők (majdnem)? Végül is, ez alakult összpontosítva optimalizálja a rendszer teljesítménye, mint egész, és egy korlátozott ideig biztosítva alkalmazásokba
ki a kérdést.

Az általunk használt eszközök kéznél

Köztudott, hogy az élet a rendszer jön a folyamatokat, amelyek kulcsszerepet játszanak bármilyen operációs rendszer. Gumialap nem, és annak ellenére, hogy a mértéktelen gigahertzes frekvencia egységnyi időre utasítások végrehajtására csak egy folyamat (az idő kvantum hívják a processzor kihasználtsága), és nagyon sok folyamatot a rendszer magukat. Így annak érdekében, hogy a késedelmek csökkentése, az eljárások száma minimalizálni kell. Ehhez meg kell, hogy ne csak a felesleges programokat és kikapcsolja az összes használt démonok, hanem újjáépíteni a kernel, így csak a valóban szükséges funkciókat.

Annak érdekében, hogy a forrásokat a kulturális és senki ugyanakkor ne fosszák, minden rendszer saját folyamatirányítási alrendszert. Ez azon az elven működik „hogy minden az ő képessége, hogy minden az ő munkáját”. A folyamat lehet működtetni két mód: core mód (kernel mód) és a felhasználói módban (user mode), ahol végrehajtja az egyszerű utasításokat, de nem igényel „rendszer” az adatokat. De amikor az ilyen szolgáltatásokra van szükség, a folyamat belép a kernel módú, de az utasításokat továbbra is végezni nevében a folyamatot. Mindezt a célból, hogy megvédje alapvető működési tere a felhasználói folyamat. Előállítására egyéb eljárásokat vagy
elindítása, várva az ütemező választja el, illetve az alvó üzemmódban (elalvás), várva jelenleg nem elérhető az erőforrás az idő. Az utóbbi egyszerű. Ha egy jelet a vezérelt eszköz, a folyamat kinyilvánítja TASK_RUNNING és sorban áll készen az indulásra. Ha ez a legmagasabb prioritású, a kernel vált annak végrehajtását.

De van egy másik zakovyrka. Abban, hogy a folyamat a rendszer erőforrásait előfordul úgynevezett összefüggésben kapcsoló (összefüggésben switch), megőrizve a kép a jelenlegi folyamat (ami mellesleg szintén szükséges ideig, így a várakozási idő is ideális esetben nulla lesz). Tehát keretében működik, ha az eljárás magmódban vezethet összeomlása az egész rendszer. Ezért a magas prioritású folyamat lesz türelmesen várni a pillanatot, az átmenet a feladat módban, és ez akkor fordulhat elő, két esetben: a munkát, vagy szükséges erőforrás nem áll rendelkezésre. Azaz, meg kell, hogy minél kevesebb nukleáris hogy gyorsabb reakcióidőt
feladatokat. De egy ilyen döntés kötelezi a stabilitás és a „súlyát” kódot. Mikrokernel van, az úton, eladott sokkal jobb - van egy minimumát moduláris mást lógott, mint egy karácsonyfa, amely sokoldalú, és lehetővé teszi, hogy a tervezési rendszer meghatározott feladatok elvégzésére.

Ami a folyamatok tervezése, van kötve, hogy a prioritás. Scheduler egyszerűen kiválasztja a következő folyamatot a legmagasabb prioritást. Ebben az esetben az alacsonyabb prioritású folyamat fut egyszerre, talán még nem teljesen teljesítette a kvantum a végére. Minden folyamatnak van egy prioritása két típusa: Relatív (p> szép, az alapértelmezett prioritás szinten 100), a telepített alkalmazás indításakor és a jelenlegi, amelyek alapján ütemezés bekövetkezik. Az érték a jelenlegi prioritás nem rögzített, hanem dinamikusan számított, és függ a szép. A beállított érték a felhasználó által, lehet a -20 és +19, a kérelmet egy
magasabb prioritást érték felel meg -20 és 10 (alapértelmezett) és a fent úgy tekintjük, hogy az alacsonyabb prioritású feladatokat. Például futtatni egy programot a normálisnál magasabb prioritású, ezt:

$ Sudo szép --20 mplayer

Egy alacsonyabb:

$ Sudo szép -20 munkát

Ha módosítani szeretné a relatív prioritását a folyamat, akkor használja a folyamat azonosítóját, ahelyett neve:

$ Sudo Renice --20 PID

Jelenlegi prioritása attól függ, hogy a szép idő és a rendszer erőforrásait. Ő újratervezi minden kullancs és a kilépés a kernel módban. A különböző rendszerek, ez történik a saját képleteket, a legegyszerűbb esetben egy prioritást osztva 2, és amikor eléri a nullát teljesen újratervezi (vissza). Ez a mechanizmus lehetővé teszi, hogy az időt és alacsony prioritású alkalmazások, de a végén a magas prioritású kapja a legtöbb belőle.

Mindezen finomságok használják a különböző kernelfolt végrehajtás lowlatency 2.4. Helyébe nemcsak a prioritás a jelenlegi átváltási algoritmusok, de az összes lehetséges konstans (pl szép határa emelkedett 256), továbbá egy időzítőt frekvencián akár 1000 HZ. Egy példa egy ilyen megoldás talál oldalon www.zip.com.au/

Annak érdekében, hogy jelezze azt az alkalmazást, különleges figyelmet igényel a processzor is használható, és beépített POSIX valós idejű leírások hívja SCHED_FIFO (egyfajta átmenet a „soft” real-time módban). Hasonló eredmény érhető el használatával SCHED_RR hívások, CAP_IPC_LOCK, CAP_SYS_NICE vagy helyettesítési értékek sys_sched_get_priority_max - egy függvény, amely visszaadja a maximális valós idejű prioritás. Ez a használata SCHED_FIFO okozza, hogy az XMMS lejátszó fut a gyökér, szinte dadogás még a túlzott terhelés a rendszerben.

eltávolítja a kernel

A fő probléma a valós idejű az a képesség, hogy rögzítse források alacsony prioritású folyamat. különösen akkor, ha fut kernel módban. Végtére is, még a kontextusban kapcsolási töltött egy kis időt. Több száz a világ fejlesztői próbálta használni a több milliárd technológiák: a lehetőséget, megszakítás végrehajtása alatt magmódban (preemptív kernel, a kernel kiürül) egy ideiglenes öröklés (örökli) egy valós idejű prioritása alacsony prioritású alkalmazás. úgy, hogy gyorsan befejezni a kritikus kód részben, és így kezelése.

Tárgy lapozható kernel a nyilvánosság érintett időszakban az uralom az 2.2 ág. Linus Torvalds azt mondta, hogy a valós idejű - egy rossz ötlet, és egyelőre preemptív valósult csak a segítségével javításokat. De a készítmény a lehetőséget, hogy ágaznak 2.6 kernel terheletlen (PREEMPT_RT) adunk a forráskódot. Preemptív-kernel végre, általában formájában egy második mag. Ha a folyamat fordul hozzá azzal a kéréssel, a fő rendszer ténylegesen blokkolja idején a végrehajtás. Végzett mindezt egy letölthető modul, amely felváltja / elfogja legkritikusabb függvény, ami késéseket. De nem minden ilyen egyszerű. Egy interjúban az egyik
MontaVista Mérnökök (a cég-fejlesztő egyik valós idejű megoldások Linux alapú) azt mondta, hogy az 2.6-os rendszermag körülbelül 11.000 darab kódot egyszerűen lehetetlen csinálni preemptív.

Az interneten, ha egy jó kereső, megtalálja a kellő számú különböző foltok, amelyek lehetővé teszik, hogy végre valós idejű Linux, de mint általában, a legtöbb projekt már elavult, és változtatásokat javasol a kernel 2.4. Például, Kurt-Linux (www.ittc.ku.edu/kurt) és RT-Linux (www.rtlinux.org). Mindkét Linux hasonló technológiával, és a szubjektív különbségek a munka nem észrevehető, de az interneten dicsérte minden rendű és rangú jelentése RT-Linux. Keresse számítógépek ellenőrzése alatt lehetőség generátorok „tokamakká”, Peru, kórházak,
NASA műholdak szimulátor F111-C. By the way, ha az Ubuntu adja sudo apt-cache search valós idejű, akkor felfedezni a jelenlétét a csomagot a régi 3.1pre3-3 változata RT-Linux.

Foltok mag

A szabványos kernel elindítja a közüzemi rt-teszt. Csak fut, akkor kap egy értéket 0,125 ms, ha a terhelés növekszik, növeli a 15,402 ms. Megjegyzés: a beállítás kritériumok, ami egyenlő 100 ezredmásodperc. Ebben az esetben a vizsgálati eredmény - FAIL, vagyis a valós idejű még mindig messze. Tedd lowlatency-core - közös mag, csak egy időzítő 1000 Hz és a csökkentett válaszidő:

$ Sudo apt-get install linux-lowlatency

Újraindításra az rt-teszt újra.

$ Sudo rt-teszt minden

A kezdőérték most egyenlő a látencia 0,073 ms, és a legnagyobb - 2907 ms. Ez már jobb. Bár kritériumai még mindig nem, de Muzychko a Amarok'e nem szakad meg, ha egy tisztességes csomagtartó.

Az összes végrehajtásának valós idejű rendszerek, hogy csak az egyik jött ma kínált Ingo Molnarom. Az a hír járta, hogy a tapaszok (www.kernel.org/pub/linux/kernel/projects/rt) az általa kibocsátott szerepelni fog kernel 2.6.22, de amíg ez megtörténik. Fedora telepítéséhez rt rajongók egyszerűen írja yum install kernel-rt, mások kis pokompilirovat. Töltse le és alkalmazza a tapaszt a kernel:

$ Wget -c www.kernel.org/pub/linux/kernel/projects/rt/older/patch-2.6.22.1-rt9
$ Tar xjvf linux-2.6.22.1.tar.bz2
$ Cd linux-2.6.22.1
$ Sudo patch -p1 <. /patch-2.6.22.1-rt9
$ Make menuconfig

Az újraindítás után a rendszer, ha beírja a dmesg, akkor láthatjuk, hogy a kernel volt preempt- RT. időzítőórán instabil ( «Clocksource TSC instabil») és ps aux jelenlétét mutatja a nagyszámú új folyamatokat. De mi jobban érdekli az eredmény az rt-tesztet. Így minden kedves trükkök vezettek, amit ma a maximális várakozási idő kevesebb, mint 0,07 ms. Voila, vizsgált át!