A Burst-Oriented Response Enhancer bemutatása

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

kami911 képe

A BORE (Burst-Oriented Response Enhancer) az EEVDF (Earliest Eligible Virtual Deadline First) Linux ütemezők továbbfejlesztett változata. Úgy tervezték, hogy megőrizze ezeknek az ütemezőknek a magas teljesítményét, miközben minél többféle terhelési helyzetben rugalmasan és megbízhatóan reagáljon a felhasználói bemenetre.

A Burst-Oriented Response Enhancer pontozási rendszere

Ennek érdekében a BORE minden egyes feladathoz bevezet egy új rugalmassági dimenziót, az úgynevezett „burstiness” értéket, és ezzel részben eltávolodik a CFS veleszületett „teljesen igazságos” elvétől. A burstiness annak a pontszámnak felel meg, amelyet a feladat által felhalmozott CPU-időből számolnak ki, miután a feladat kifejezetten lemondott róla – például alvó állapotba lépett, I/O-ra vár, vagy átadta a vezérlést. Ez a pontszám nagyon széles időtartományt fed le: a nanomásodpercektől a több száz másodpercig, feladatonként eltérően.

A burstiness mérőszámra támaszkodva a BORE dinamikusan módosítja az egyes feladatok ütemezési tulajdonságait, például a súlyokat és a késleltetéseket. Így, ha a rendszert sokféle terhelés éri, a BORE előnyben részesíti azokat a feladatokat, amelyeknek fontos a gyors reakcióidő. Ezzel javítja a rendszer általános reakciókészségét és a felhasználói élményt.

  • Az ütemező minden feladatnál nyomon követi a burst időt, vagyis azt a CPU-időt, amelyet a feladat azóta használt, hogy utoljára átadta a vezérlést, elaludt vagy I/O-ra várt.
  • Amíg egy feladat aktív, a burst pontszámát folyamatosan számolja: a normalizált burst idő bitjeinek számából indul ki, majd ezt egy előre beállított eltolással és szorzóval módosítja.
  • A burst pontszám a „nice” értékhez hasonlóan működik, és 0–39 közötti értéket vehet fel. Minden egyes 1-gyel való csökkenés körülbelül 1,25-ször hosszabb időszeletet enged a feladatnak.
  • A folyamat lényegében egy radiális átváltás a bináris logaritmusról a közönséges logaritmusra: két különböző nagyságrend (a nanomásodperctől a percekig tartó időskála és a nagyjából 0,01–100x szorzóskála) között vált át, dimenziómentesen.
  • Ennek eredményeként a kevésbé „falánk” feladatok hosszabb időszeletet és agresszívebb felébresztéskori kiszorítást kapnak, míg a falánkabb, ritkábban időszeletet átadó feladatok kisebb súlyt kapnak.
  • Az újonnan indított folyamatok burst pontszámát speciális módon számítják ki, hogy az olyan feladatok, mint a „make”, ne tudják elnyomni az interaktív feladatokat sok CPU-éhes gyermekfolyamat indításával.
  • A végeredmény egy egyensúly a falánk és gyenge (általában CPU-igényes, kötegelt) feladatok, illetve a mértékletes és erős (általában I/O-igényes, interaktív) feladatok között, ami a különféle terheléstípusok együttes jelenléte mellett is reszponzívabb felhasználói élményt ad.

sched_bore (range: 0 - 1, default: 1)

$ sudo sysctl -w kernel.sched_bore=1

1 Bekapcsolja a BORE mechanizmust.

0 Kikapcsolja a BORE mechanizmust.


sched_burst_cache_lifetime (range: 0 - 4294967295, default: 75000000)

Megadja, hogy hány nanomásodpercig tartsa cache-ben a forkoláskor kiszámított átlagos burst időt az adott feladat gyermekfolyamataihoz. Ennek az értéknek a növelésével ritkábban kell újraszámolni az átlagos burst időt, cserébe az on-fork burst idő beállításai durvább felbontásúak (alacsonyabb időfelbontásúak) lesznek.

sched_burst_inherit_type (range: 0 - 2, default: 2)

0: Kikapcsolja az átlagos gyermek burst idő öröklését az ős folyamatoktól.

1: Engedélyezi az öröklést a szülő folyamatoktól.

2: Engedélyezi az átlagos gyermek burst idő öröklését az ős folyamatoktól, de a hagyományos szülő–gyermek lánc helyett topológiai hub/stub jellegű hierarchiafát használ.

Ha ez a funkció be van kapcsolva, az egyetlen gyermekfolyamattal rendelkező csomópontokat figyelmen kívül hagyja az örökléshez használt ős/leszármazott folyamatok keresésekor és számításakor. A funkció bekapcsolása javíthatja a rendszer reszponzivitását olyan helyzetekben, amikor tömegesen forkolnak folyamatokat, például kernel buildelésekor.


sched_burst_penalty_offset (range: 0 - 63, default: 24)

Megadja, hány bitet vonjon le a burst idő bitjeinek számából a burst pontszám számításakor. Ha növeled ezt az értéket, a rövidebb burst idejű feladatok nem lesznek túl erősek. Az érték növelése a hatásos burst időtartományt is megnöveli.

sched_burst_penalty_scale (range: 0 - 4095, default: 1536)

Megadja, mennyire különbözteti meg az ütemező a feladatokat a burst idő arányuk alapján, az előző érték 1/1024-ed részére skálázva.

Ha növeled ezt az értéket, a burst pontszám a burst idő növekedésével gyorsabban nő. Ez azt jelenti, hogy azok a feladatok, amelyek hosszabb ideig futnak alvás/átadás/iowait nélkül, gyorsan elveszítik az erejüket a rövidebb ideig futókkal szemben. Csökkentéskor ennek az ellenkezője történik.

sched_burst_smoothness (range: 0 - 3, default: 1)

Egy feladat tényleges burst pontszáma a kettő közül a nagyobb: a legutóbb kiszámított pontszám vagy a „történeti” pontszám, amely az előző pontszám(ok) öröklésével jön létre. Így próbálják kisimítani a felhasználói élményt a „burst tüskék” idején.

Valahányszor frissül a burst pontszám (amikor a feladatot kiveszik a sorból vagy átadja a CPU-t), a történeti pontszámot is frissíti a rendszer: a burst_time értéket exponenciális mozgóátlag-szerűen keveri a korábbi értékhez. A burst_smoothness=1 azt jelenti, hogy nincs simítás.