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.

