cpu idle + c

 ( mj0019 | 2006. július 19., szerda - 11:10 )

Hello

Olyan kérdésem lenne, hogy hogyan tudom lekérdezni C -ben linux alatt a cpu kihasználtságát, meg a többi dolgot amit a top kiir. Nem kellen minden de ami fontos lenne a cpu kihasználtság meg az idle. Amit gondolom ugy kapnék meg, hogy 100 -bol kivonnám a kihasználtságot de ha van rá függvény annak is örülnék.
Nézzegettem már libc referenciat de nem tudom, kideriteni, hogy nekem mely fuggvenyek kellenek.

Előre is köszönöm.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

strace top

Hat nezzegetem de eggyenlore ez meg nekem nem tiszta, hogy hogyan is kellene ebbol kivennem, hogy milyen fuggveny vagy modszerrrel lehet lekerdezni a cpu idle -t.

egyelőre

Hello!

/proc/stat-bol csinalja szerintem top. man proc ir statrol bovebben.

hat az biztos, hogy a /proc/stat ba benne van az idle time de nem lenne lassu ha allandoan egy filet olvasgatnek ? Nem lehetne valahogyan valamilyen beepitet fuggvenybol kinyerni ezt az adatot?
Nem szeretnek telhetetlennek tunni, de megis csak elegansabb lenne ugy megoldani.

Egyrészt az a file nem a vinyón van, hát miért lenne lassú?
Másrészt, a top sem realtime mutatja a dolgokat, hanem frissít (kb másodpercenként).

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

cpu 3665 0 39197 703328 2239 0 7164
cpu0 3665 0 39197 703328 2239 0 7164

A /proc/stat bol kiolvasom ezeket a sorokat de ebbol hogyan kapom meg, hogy mennyit pihen a proci? Annyit mar sikerult kideriteni, hogy a 4. oszlop lesz az ami nekem kell. De ebbol, hogyan jonn ki mondjuk 99%???

Szervusz!

http://sourceforge.net/projects/unixtop
Nézd meg itt a sourcebol, hogy hogy csinálják.

Nem hiszem, hogy ez a rész sebesség kritikus lenne.

http://www.koders.com

Nem néztem meg komolyabban, de ezekkel a kulcsszavakkal: "get system load average" és persze C nyelvre szűkítve a keresést elég bíztató találatok jöttek ki.

Pl (ez már konkrét forrás):
http://www.koders.com/c/fidA178217F4E61872585E25B716DF784D301389E41.aspx?s=cpu+avg+load

De lesz jó sok találat arrafelé.

kl223

/proc/stat-bol valami ilyesmi lesz (ez egy perl script atirata) : http://rafb.net/paste/results/b3o50G89.html

Ez a megoldas egesz jonak tunik. Mert ugye ugy mukodik, hogy lekeri a cpu_stat -ot majs var sleep(2) es utana megint lekeri a cpu_stat -ot es a ketto kulonbsege lesz a kivant eredmeny.

Sziasztok!

Egy AMD 2500+ (barton) procit nyúzok már évek óta egy Nf2-es alaplappal. A gondom az vele (már régóta), hogy nagyon melegszik a CPU, most pl. 74 ˚C-os
Windows alatt S2kCtl-t használtam, ami a cpu Idle-t haltból cpu disconnectre rakta.

Röviden:
"A WinNT-k (Win2k, XP) - és Linux - esetében van egy kernel-programszál, aminek Idle a neve. Ő a legalacsonyabb prioritású kernelközeli szál, azaz ha más program nem "viszi el" a cpu-időt, akkor ő kapja meg. Ő pedig berakja a cput egy "nop" ciklusba, ami annyit tesz, hogy a proci, bár egy "nem túl" számításigényes műveletet végez, azért csak tekeri magát.
A CpuIdle, CpuCool szerű hűtők ezt az idle szálat veszik át, és "halt", vagy "stop grant"-állapotba hozzák a cpu-t. Ez jó is, csak nem eléggé hatékony, mert amint valamit csinál a humanoid létforma a géppel max fújhatjuk a cpu-t, ugyanis a proci egy része aktív marad, és továbbra is termeli a hőt. A reakcióképességük pocsék, tehát részleges terhelésnél szinte használhatatlanok.
A cpu-disconnect elven működő hűtők (C2NGO, S2kCtl) pedig annyit csinálnak, hogy az idle-idő teljes időtartamára "kikapcsolják" a CPU-t, majd ha kell (akár az opredszer, akár az alkalmazások igényelet cpu használat idejére) akkor újra be. Minthogy ezt másodpercenként akár többezerszer is megtehetik, ezért csak a tényleges terheléskor melegszik a proci, az üresjárat nem fűti."

Tehát Linuxon valahogy meg lehet változatni a idle sleep state-t cpu disconnect-re?

1) Nem igazan vagy ontopic. Attol, mert matchel a cimhez, meg nem leszel az.
2) A Linux nem Windows. Itt kisse mashogy mennek a dolgok.
3) Bar csak felig ertem mit akarsz, az mindenkepp vilagos, hogy ez kernelkozeli dolog. Ajanlom a Linux kernel forrasat mint olvasmanyt.
4) Aztan szerintem egy kis assembly nyelv tanulas is sokat tud dobni a dolgon. (Utasitasok atfordulasa C-rol, a processzor az asm utasitasokat hogy utemezi es dolgozza fel, az user interakcion kivul meg mi dobhatja fel a CPU statusat onra, ilyenek)
5) Vegul pedig mar tobbet fogsz tudni, mint a kernelresz eredeti fejlesztoje, akar ki is javithatnad ezt a viselkedest a kernelbe. Bekuldhetned patchkent, es mindenki orulne.

Amugy szerintem megy tonkre a coolered, vagy nagyon koszos mar a cooler alatti passziv borda. Erdemes a CPU coolert par evente cserelni, illetoleg evente-felevente a cpu cooler alatti bordakat kifujni suritett levegovel, ha ilyen gondok vannak.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Mikor új volt a hűtő, akkor is ennyire melegedett. CPU idle átállításával kb -10 ˚C-ot lehet nyerni.
Egyébként találtam ilyen progit, hogy athcool (ami AMD Athlon/Duron processzorokhoz jó), most már olyan 68-72 ˚C-os átlagban.

Nekem egy 2400-am volt pár évig, az nagyobb órajelen ment, de nem volt melegebb 40 foknál. Nálad valami nagyon nem oké hűtésileg.

Házhűtő kb. 3 éve bemondta az unalmast, lekaptam a ház oldalát azóta így megy. Megfelelő programmal átlag 54-58 fokos hőmérsékleten. Egyébként ez a ~70 fok még nem vészes, 85 foknál füstöl el. :)

Szerk.:

Végre megtaláltam, FVCool a progi neve. Egy 2008. júniusi orosz levelezést kaptam el, amit google translate-el lefordítottam, és ott ajánlották az fvcoolt.

Felraktam forrásból, majd fvcool -e -v -i és 68-74 fokról lement szépen 54-58 fokra.
Readmeben meg le van írva, hogy ha progi nélkül szeretném használni, akkor meg kell változtatnom a kernel kódot amihez 00READMEkt133.txt-ben találok leírást.

Igen, köszi. Athcool és a coolrun ugyanazt a setpci parancsot hajtja végre.
Ezért kipróbáltam az FVCoolt amivel be lehet vinni ugyanezt az idle-loop-ba mostmár idle hőmérséklet 50 és 54 fok között van.