XSuspender - avagy X11 alkalmazások auto-suspendje erőforrás- és energiatakarékosság céljából

Címkék

Böngészés közben véletlenül került elém, érdekes ötlet, főként gyengébb/régebbi processzorokon vagy akkus üzemről lehet benne fantázia. Az alkalmazásokat konfigurálható módon (SIGSTOP szignállal vagy akár egyedi scripttel) felfüggeszti ha elvesztik a fókuszt, majd ha visszakapják, transzparensen folytatja. A konfigjában beállítható, hogy mely appokkal és hogyan foglalkozzon, néhány elterjedtebb erőforrás-éhes apphoz van előre beállított konfig minta is.

A kód C99-ben íródott, így lefordítható minden modernebb X11-et futtató platformon. A licence pedig, nos, elég egyedi: "DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2" :D

Weblap itt, projekt GitHub oldala itt.

Ha lesz egy kis időm teszek vele egy próbát és beszámolok majd. Kicsit tartok tőle, hogy az általam használt sloppy focus mellett esetleg problémás lesz, meglátjuk.

Hozzászólások

Szerkesztve: 2022. 01. 26., sze – 09:50

Jó ötlet. Ez cronjob-ból le is script-elhető relatíve egyszerűen kicsit okosabb módon. Például:

 

1) az összes futó folyamathoz előállítani egy mutatót /proc/pid/ alapján, például az indulása óta használt összes CPU idő osztva a teljes idővel, mely relatív mutató, így azonos mértékegység lesz

2) outlier detection-el meghatározni azt a limit-et, mely feletti folyamatokat leállítjuk ha elmegy a fókusz - például 3 szigma limittel: átlag + szórás * 3, vagy medián + iqr * 1.5 vagy más módon, hogy ez is teljesen adaptívan automatikus legyen, és ne kelljen kézzel szórakozni, illetve ne dobáljon el rengeteg olyan folyamatot, melyet nem kellene

3) ellenőrizni, hogy van-e fókusz a kiválasztottakon, és ha nem, akkor SIGSTOP

4) előtte érdemes lenne GTK vagy QT ablakban feldobni egy kérdést megerősítéssel, mert így ha nem akarod leállítani a folyamatot, akkor ezt meg tudod mondani az automatizmusnak, például ha zene fut benne a háttérben stb, és ezt meg lehetne jegyeztetni egy config fájlban a $HOME/.config/ mappában

 

Kiegészítés: mivel a weboldalak többször külön folyamatban futnak, ezért érdekes kérdés, hogy ott egy megállítás tud-e úgy működni, hogy nem okoz problémát a szülő folyamatnak. Ha igen, akkor szintén jó.

Szerkesztve: 2022. 01. 26., sze – 10:32

Ez nem az OS ütemező dolga lenne (ütemezni ki mikor fut, ki mennyi processzoridőt kap, ha valamelyiknek nincs teendője, akkor wait állapotban marad stb.)? Ha valamelyik programnak van tennivalója, de te hibernáltatod, nem fog tőle megzavarodni?

Részemről user process-ekre képzelem el. Semmiképpen sem kernel space-ben futókra. Így nem tud megzavarodni. Habár DE folyamatok is lehetnek közöttük. Ezért megerősítős fehér lista megoldás lehet.

Illetve csak arról volt szó ha jól értettem, amelyek tudnak fókuszt kapni. Tehát grafikus alkalmazások.

szerk.: az OS ütemező a kért időket osztja ki, viszont a fenti célja magának a kérésnek a megakadályozása. Más funkció.

sztem meg azokat a mobilok kezelik jól, fér perc háttér után kiszórják a picsába őket. Nehogy már kerülgesse a gép a memóriában az alvó processt. Majd ha futni akar jelzi.

Remélem az arm tényleg letarolja a piacot és akkor jöhet egy paradigma váltás deszktoppon is.

GPLv3-as hozzászólás.

Na, attól mentsem meg a teremtő, hogy ilyen szutyok, tapicskolós mobil OS-ek hozzál el a paradigmaváltást desktopra. Egyébként meg PC-n szerintem simán elfér a memóriában az alvó process, memórián kívül sokat enni nem kér. Memória meg van ma már egy átlagos gépben elég, 8-32 giga átlagban, az már van annyi, hogy ne kelljen állandóan minden process-t kilőni. Ez utoljára ilyen 1-4 giga RAM-os, chipsetkorlát vagy odaforrasztott RAM miatt nem bővíthető gépeken volt gond, ahol a rendszernek erőteljesen bele kellett nyúlni a swapba, ami még mindig nem lett volna tragédia, ha az nem ilyen ótvar lassú mechanikus HDD-ről megy.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Tapasztalatom szerint (az en desktopomon) egyedul a bongeszoben futo alkalmazasok szoktak neha megkergulni, erre egyszeru megoldas (firefox):

pgrep 'Web Content' --signal STOP
pgrep 'Web Content' --signal CONT

Szerkesztve: 2022. 02. 08., k – 08:12

Ez nekem nem nagyon csinál semmit, vagy én értek valamit félre.

Fogom a böngészőt elindítok benne valami js szart ami eszi a cpu-t átváltok, másik deskopra akár, de a cpu terhelése a böngészőnek nem csökken.

 

UI.: kiderült, nem jól érzékelte, hogy mikor van töltőn és mikor nem. Alapból neki mindig töltőn van. Így egy kicsit belenyúltam a forráskódba, most jól működik.

Fedora 35, Thinkpad x280