IO vs. CPU

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Sobota Červen 26 18:05:39 CEST 1999


On 24 Jun 1999, Martin Saturka wrote:

> Kdyz mi aplikace za hodinu zapise na harddisk nekolik MB dat, je mozne
> aplikaci urychlit tim, ze by data zapisoval jiny proces(vlakno) a
> puvodni aplikace by jen pocitala?
> Nemam na mysli cekani na IO kvuli jinym aplikacim, ale jestli si umi
> procesor a harddisk tak rozdelit praci, aby kdyz dam write() aby byl
> hnedka procesor volny pro dalsi pocitani. Kdyz to udelam sekvecne
> v programu, tak to asi ceka? 

write() do souboru na disku musi udelat zhruba tyto veci (bez naroku na
absolutni presnost):

1) zjistit, do kterych bloku bude zapisovano, v pripade, ze se zapisuje do
   dosud neexistujici casti souboru (tj. za konec nebo do diry), pak musi
   provest opicarny vedouci k alokaci novych bloku
2) najit buffery odpovidajici blokum, ktere budou zmeneny; pokud je
   nenajde, pak alokovat nove buffery (pripadne jejich obsah nacist
   z disku), jestlize neni dost volne pameti, pak musi nejakou uvolnit
3) prekopirovat data z userlandu do bufferu
4) jestlize je soubor otevren s O_SYNC, pak vyckat, nez budou data v
   bufferech opravdu zapsana

cela vec se muze zablokovat prakticky v kazdem kroku, specialne v kroku 2
muze nastat potreba neco odswapovat nebo jinak zapsat na disk a v kroku 3
muze opet swapovat, protoze to, co chce zapisovat, zrovna neni v RAM,
nicmene s vyjimkou posledniho kroku jsou to faktory majici pomerne
chaoticky charakter

lze rici, ze v obou extremech: tj. (relativne) hodne RAM a (relativne)
rychly disk (je generovano tolik dat, ze to disk staci prubezne
zapisovat), nebo naopak (relativne) malo RAM (velky thrashing) resp. disk
tak pomaly, ze jsou data zapisovana radove pomaleji, nez probiha jejich
generovani, muze byt v ustalenem stavu prakticky jedno, jestli to dela
jeden thread nebo dva paralelne, nebot v prvnim pripade se write()
prakticky nikdy nezablokuje a v druhem proste vic nelze tim systemem
procpat

podle popisu se skutecna situace blizi prvnimu extremu, z cehoz pak
soudim, ze rozdeleni na dva thready asi zadny zasadni vykonostni prinos
neprinese

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux