( asch | 2024. 01. 21., v – 15:49 )

A scheduling szerintem olyan téma, hogy nincsen egyetlen optimális megoldása, ezért különböző terhelésekre mindig lehet optimalizálni egyet. Szerintem matematikailag ha van egy adott feladat és célfüggvény, akkor ahhoz létezik egy vagy több optimális ütemezés. Például ha a kernelfordítás közben a játék FPS-re optimalizálunk, akkor én úgy ütemezném a szálakat, hogy a kernelfordítás szépen várja meg a játszást :-). De nincsen általánosságban optimális ütemező.

Ez tipikusan egy hülye terhelési profil, mert nem tudnám megmondani mi a célfüggvény. Mennyit szabad a kernelből beáldozni az FPS érdekében? Például a make-et úgy szokás indítani, hogy annyi szálon induljon el, amennyi csak van a proceszorban. De ha játszunk mellette, akkor ezzel lábonlőhetjük magunkat, mert ha több a szál mint a mag, akkor a magoknak folyton szálat kell váltaniuk, és ennek a vége szuboptimális cache használat lesz. Az első tehát, hogy a szálakat érdemes a lehetőségekhez igazítani, úgy használjuk ki legjobban az erőforrásokat. A CS tudjátok, hogy hány szálon fut? Szerintem a legjobb megoldás az lenne, ha fixen leosztanánk a magokat a build és a CS között.

A build szerintem a CPU-t szinte 100%-ban ki tudja használni. Amiért nem, az a háttértárra várakozás. Ha ezen akarnék optimalizálni - és volt már ilyen feladat... - azon gondolkodnék el, hogy a szükséges háttértár műveleteket prediktálnám és előre behúznám azt, ami éppen jönni fog. Vagy ha befér a RAM-ba, akkor az egész kernelfát behúznám, és akkor az ütemezés unalmassá válik, mert minden szál folyton ütemezhető, hiszen mire várnának, ha nem IO-ra?