2.6 iowait

Aggelos Economopoulos aoiko at cc.ece.ntua.gr
Tue Mar 2 16:27:07 EET 2004


On Tue, 2 Mar 2004 14:39:04 +0200
Vasilis Vasaitis <vvas at hal.csd.auth.gr> wrote:

> On Tue, Mar 02, 2004 at 01:25:22PM +0200, V13 wrote:
> > Exei paratirisei kanei poly megalo CPU % se iowait stoys 2.6.x ?
> > Exo kanei dokimes se scsi kai ide kai troei 95% cpu se iowait...
> 
>   Ναι, κι εγώ το παρατήρησα από νωρίς. Όμως, απ' όσο έχω καταλάβει, το
> iowait είναι απλά ένα άλλου είδους idle, του στυλ «δεν κάνω τίποτα,
> αλλά επειδή περιμένω για I/O, δεν ξύνω τελείως κιόλας». Για να
> βεβαιωθώ, έκανα μια μίνι δοκιμή, τρέχοντας κάτι τέτοιο:
> 
> 	time mplayer -nosound -benchmark requiem2.mkv
> 
>   Αυτό λοιπόν που παρατήρησα είναι ότι, είτε το τρέχω μόνο του, είτε
> έχω ένα find να τρέχει από πίσω (που όταν τρέχει μόνο του το find
> είναι στο 95% iowait), λίγο πολύ τον ίδιο χρόνο κάνει ο mplayer για να
> τελειώσει.
> 
>   Τεσπά, αυτά έχω καταλάβει εγώ. Αν κάποιος που τα παρακολουθεί αυτά
> περισσότερο ξέρει κάτι παραπάνω, ας μας διαφωτίσει. Άγγελε;

Plaka mou kaneis? Edw kai duo mhnes pou psofhse o diskos me
freebsd/linux kai emeina me to dragonfly eimai toso ikanopoihmenos pou
den exw mpei ston kopo na ta 3anaekgatasthsw[0] 8)

Alla epeidh exw to source tou 2.6.3 proxeiro nomizw oti mporw na
apanthsw. Des to implementation ths io_schedule() apo to kernel/sched.c:

void io_schedule(void)
{
	struct runqueue *rq = this_rq();

	atomic_inc(&rq->nr_iowait);
	schedule();
	atomic_dec(&rq->nr_iowait);
}

kai to iowait pososto bganei (des thn fs/proc/proc_misc.c::show_stat())
apo to per-cpu cpustat->iowait, to opoio ginetai update sthn
kernel/sched.c::scheduler_tick() ws e3hs:

if (p == rq->idle) {
		if (atomic_read(&rq->nr_iowait) > 0)
			cpustat->iowait += sys_ticks;
		else
			cpustat->idle += sys_ticks;
		rebalance_tick(rq, 1);
		return;
}

Me alla logia, otan ena process prepei na perimenei na teleiwsei to i/o,
kanei update to rq->nr_iowait kai kalei thn schedule() eleu8erwnontas
ton cpu na tre3ei kapoio allo process. An (kai mono an) to epomeno tick
brei to runqueue na einai idle *kai* na exei toulaxiston ena process pou
na perimenei gia i/o, tote mono 8ewrei oti o cpu perase ton xrono tou se
iowait state. Profanws, an etrexe kati, o xronos autos den mporei na
apodo8ei se iowait (asxeta an kapoio process se auton ton cpu perimene
gia i/o), kai h scheduler_tick() proxwraei sto update twn gnwstwn
user/nice/system statistics.

Epeidh, opws exw anaferei sto parel8on ta statistics einai functions
triths kathgorias gia ton phruna kai h shmasia tous mporei na alla3ei
opoiadhpote stigmh, den tous exw dwsei pote shmasia kai ara den mporw na
sou pw ti alla3e se sxesh me ton 2.4 (oute exw ton kwdika gia na to dw
monos mou). Gia ton idio logo den eimai apoluta sigouros oti auta pou
grafw parapanw isxuoun xwris e3aireseis, gia auto kai anaferw tis
sunarthseis pou koita3a gia na mporei opoios 8elei na psa3ei gia la8h.

HTH,
Aggelos

[0] mexri to pasxa elpizw na a3iw8w na balw kai ena debian.




More information about the Linux-greek-users mailing list