Ha játékosként Linuxon játszol, és már nem mai darab hardvert használsz, érdemes figyelni arra a munkára, ami most a kernel-ben zajlik.
Peter Zijlstra, a Linux kernel egyik fejlesztője közzétette egy javítócsomag-sorozat második változatát "sched: Flatten the pick" címmel. Ennek célja, hogy kijavítsa a Linux ütemezőjének cgroup ütemezéssel kapcsolatos hiányosságait.
A fejlesztő szerint az egész "iszonyú macera", a problémát pedig végül egy olyan képletre vezette vissza, amely egy feladatcsoport teljes súlyát szétosztja a rendszer összes CPU-ja között.
Egy 64 magos gépen – írja Peter – egy cgroup már csak nagyjából egy nice 19-es feladatnak megfelelő prioritást kap magonként, és 256 mag esetén, ami ma már nem ritka a szervereknél, ez a mozgástér még kisebb.
A probléma többi részét két részre bontja. Az elsőre a szokásos megoldás az, hogy a csoport súlyát felszorozzák a CPU-k számával. Ha viszont a csoport teljes terhelése egyetlen CPU-ra kerül, a súly bőven a nice -20 fölé szalad (a folyamat prioritásértéke), és az egész számítás szétesik.
A másik gond az, ahogyan az ütemező kiválasztja a következő futtatandó feladatot. Jelenleg több cgroup szintet is végig kell lépkednie ehhez; a javítás ezt az egészet egyetlen szintre lapítja.
Egy kisebb kísérletet is végzett: egy régebbi konfigurációt használt Intel Core i7-2600K processzorral és AMD Radeon RX 580 kártyával, erre töltötte fel a GOG-os Shadows: Awakening játékot Lutris alól, GE-Proton10-34-gyel és Steam Runtime 3 (sniper) környezettel.
Hogy rendesen megizzassza a rendszert, 8 darab spinner folyamatot indított a játék mellé, CPU-szálanként egyet. A játék így a játszhatóból "szinte játszhatatlanná, tényleg borzasztóvá" vált.
Ezután újraindította a tesztet, de az ütemező időosztását az alapértelmezett érték tizedére csökkentette a
chrt
segítségével, és mindkét futást rögzítette MangoHud-dal. Az eredmények:
MetrikaAlapértelmezett szeletRövidebb szeletFPS min3,820,6FPS átlag48,057,2FPS max87,480,3Frame time min (ms)9,48,4Frame time avg (ms)34,519,5Frame time max (ms)107,437,2
A javaslat végén Peter azt írta, nem hasonlította össze olyan kernel-val, ahol nincs bekapcsolva a flatten, csak nem triviális terheléseket akart futtatni, és a szeleteléssel játszani, hogy megbizonyosodjon róla: minden „működik”.
Van ok az izgalomra?
Ha Linuxon játszol, főleg régebbi hardveren, egy ilyen javítás sokat segíthet.
A stresszteszt, amit Peter futtatott, nem áll olyan messze a hétköznapi használattól. Discord, egy böngésző egy tucat megnyitott lappal, a háttérben futó rendszerfrissítés – mind ugyanúgy versengenek a CPU-időért, mint azok a spinner folyamatok.
A tesztgép ugyan öreg, de az ütemező hibája nem csak a régi hardvert érinti. A sokmagos processzorok inkább rontanak a súlyszétaprózódás problémáján, nem javítanak rajta. Ha ez a változtatás bekerül, a 16 vagy még több magos modern gépek is profitálhatnak belőle.
Fontos az is, hogy ez a javítócsomag még nincs benne a mainline Linux kernel-ban. A sorozatot még át kell nézniük az érintett kernel karbantartóknak, és szinte biztosan több változáson is átmegy, mielőtt bekerül egy kernel kiadásba.
