ultrapomale NFS pri ls -la

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Pondělí Listopad 1 10:08:12 CET 2004


On Sat, 30 Oct 2004, Zdik Kudrle wrote:

> mam namountovany pres NFS svazek na pocitaci, ke kteremu jsem pripojen
> VPNkou. Bandwidth je nekde kolem 128kb/s. Kdyz svazek mountnu (je to jenom
> adresar s 220 fajly), tak $ ls -la trva 20 sekund (!), coz je na muj vkus
> docela moc. Jasne, kdyby to bylo na lokalnim 100Mbitu, ani to nepoznam,
> ale jde o princip - kdyz mam pres stejnou VPN namountovany SMB (samba)
> svazek, tak vse jede rychle a OK.

To bude asi tim, ze ls -la nejdriv precte adresar (getdents()), a pak na 
vsechny nalezene polozky provede lstat().

U SMB to kvuli wokennim tradicim funguje zasadne tak, ze se posle zaroven 
obsah adresar i atributy obsazenych souboru. Ty se pak nakesuji a lstat() 
probehne rychle.

U NFS to tradicne fungovalo tak, ze to byly dve oddelene operace: cteni
adresare (READDIR) a cteni atributu souboru (GETATTR). To je samozrejme
flexibilnejsi, ale ve vetsine pripadu mene efektivni (ono je treba mit na
pameti, ze NFS bylo navrzeno na lokalni site), takze NFSv3 pridalo nove
volani READDIRPLUS, ktere nacte obsah adresare i s atributy. Linux to umi
pouzivat, ale zda se, ze ve Vasem pripade to z nejakeho duvodu nefunguje
(nemate NFS3? mate spatne nastaveno kesovani na serveru?).

> Pri $ ls -la je pocet prenesenych dat nekde kolem (hruby odhad z wmnet)
> 160kB, coz je na 220 fajlu kapanek hodne...

Pokud kvuli kazdemu souboru posila zvlast GETATTR a dostava zvlast
odpoved, tak by to mohlo odpovidat. Pokud budeme mit na kazde volani 
roundtrip 100 ms, tak se pri 200 sekvencnich volanich snadno dostaneme na 
tech 20 s.

--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