Second Extended File System

Predne se vam musim kolegove omluvit, ze zdroje k memu referatu davam na Web az nyni, nicmene mel jsem posledni mesice frmol kolem projektu a uplne jsem na to zapomel. V podstate text nasledujici stranky je kompletne prevzat ze skolicky. Text jsem zformatoval, doplnil jsem odkazy a kde jsem uznal za vhodne neco zduraznit, vsunul jsem par svych poznamek. Tento text vcelku solidne popisuje problematiku e2fs (jinak v zasade vychazi ze slajdu z nasledujicich linku). Budete-li mit nejake dotazy, obratte se na mne


Chcete-li, stahnete si nasledujici slajdy tykajici se e2fs. Je to setridene podle konferenci, kde byly pouzity (linky jsou ve tvaru: pocet slajdu na stranku)

Amsterdam
Pekne povidani o inodech a strukturach VFS vrstvy
1/1 , 2/1
Berlin 95
Navic slajdy k linkum (fast linkum), neco navic o parametrech e2fs, nekterych toolu a vyhledovych features (fast files, ACL)
1/1 , 2/1 , 3/1 , 6/1
Berlin 96
Slajdy k ACL (Access Control Lists)
1/1 , 2/1
Slajdy ke Quotas magementu (limity prostoru ve e2fs)
1/1 , 2/1
Heidelberg
Trochu blizsi pohled i na jine filesystemy (VIVA, BSD FFS, LFS, V7FS)
1/1 , 2/1
Slajdy k optimalizacim pouzitym v e2fs (i jinde), spolehlivost e2fs (a jinych), fragmentace
1/1 , 2/1
Slajdy k file managementu v jadre Linuxu, popis VFS layer (Virtual FileSystem Layer), porovnani s BSD FFS, buffer cache, buffer struktury
1/1 , 2/1
Iguana
Dobry uvod do e2fs stuff
1/1 , 2/1
Tomas Nejedlik

Obsah:


1. Co to je

Nazev znamena second extended filesystem.. Je to filesystem pouzivany os linux,hurd a dalsimi.. Je celkem oblibeny protoze je velmi rychly-tvrdi ze je rychlejsi nez fast filesystem z FreeBSD ale nevim...je mnohem rychlejsi nez vsechny ostatni me zname. Obsahuje algoritmus na intelignetni alokaci volneho mista, proto se opravdu malo fragmentuje (zkousel jsem defragmentovat svuj 5 let stary disk a nejake zvlastni zrychleni jsem nedocilil...presto ze na disku fragmentace je..jsou jednotlive fragmenty souboru blizko sebe a tak neni zpomaleni tak drasticke jako v dosu. Podporuje dlouhe nazvy a mnoho dalsich vymozenosti...
Limity:

	      Minix FS  Ext FS    Ext2FS    Xia FS
Max FS Size     64MB    2 GB      4TB       2GB
Max file size   64MB    2 GB      2GB       64MB
Max file name   14/30 c 255 c     255 c     248 c
3 times support No      No        Yes       Yes
Extensible      No      No        Yes       No
var. block siz. No      No        Yes       No

1.1 Mountovani

Bere nekolik prepinacu:
bsddf,minixdf
meni standard pro statfs
bsdgroups|sysvgroups
Jak urcovat gid pri vytvareni souboru:
BSD: podle adresare
SVR4 : gid procesu nebo gid adresare pokud je setgid
check=none|normal|strict
Jake kontroly ma delat jadro pri beho...check=none pravdepodobne urychli operace
debug
Prida haldy hlaseni
errors=continue|remount-ro|panic
co ma delat, kdyz narazi nachybu-pokracovat, premountovat read-only, nebo vyhlasit paniku
resgid=gid,resuid=uid
Skupina/uzivetel , ktery muze pouzivat rezervovane misto
sb=block
Pouzije jinou kopii superbloku. Treba v pripade, ze ten hlavni je znicen.
sync
Synchroni ubnovovani jako v BSD
- uklada synchrone vsechny inody apod..
- spatny vykon
- diry v uzivatelskych datech nemusi byt nalezeny pri fsck protoze synchrone se ukladaji pouze tabulky..ne data..neni to teda jako dosu
>>> znamena to tolik, ze metadata (inody, bitmapy, adresare) nemusi ve
>>> vysledku odpovidat skutecnym datum v blocich

1.2 Blocks, blocks groups atd...

Aby ext2fs dosahl co mozna nejlepsiho vykonu rozhodli se autori drzet veskere tabulky co mozna nejblize datum. To zmensi pocet seekovani po disku a take zvysi bezpecnost-vypadne-li kus disku, smaze se jenom mala cast tabulek a tak zbourat opravdu cely disk da celkem praci....
Pro zopakovani...cely disk je rozdelen do malych casti zvanych bloky, velkych 1024, 2048, nebo 4096 byte. To jsou alokacni jednotky. Kazdy blok muze byt free nebo alocated. Tyto bloky jsou rozdeleny do nekolika skupin a veskere informace o skupine jsou uvnitr. To umozni minimalni seekovani po disku- staci proste dojet na zacatek skupiny a tam najit informace...je to jako kdybyste cely gigovy disk rozdelily do mnoha malych partition...ziskate tim take rychlejsi a optimalnejsi fs. Napriklad v dosu se zmensi fat(hlavne kdyz mate disky mensi nez 32MB) zmensi se vzdalenosti mezi jednotlivymi soubory apod... Proste ext2 se snazi na disk nahlizet jako na vice mensich disku...Take se snazi aby soubory byly pokud mozno cele v jedne skupine. Tim se omezuje fragmentace..

1.3 Group descriptor

Kazda skupina ma descriptor. Ta drzi ty nejdulezitejsi inofrmace o stavu skupiny..Takto vypada:

Vidite ze trochu pripomina superblock. Promene free_blocks_count,free_inodes_count a used_dirs_count jsou statistiky o obsazeni inody. Algoritmus pro optimalni alokaci volneho mista tak napred rozhodne o kterou skupinu se bude vlastne zajimat a potom tam vleze.

bg_block_bitmap je ukazatel na blok, ktery obsahuje bitmapu urcujici obsazeni bloku. Kazdy blok skupiny tam ma svuj bit, ktery urcuje jestli je free/allocated. Pocet nulovych bitu by mel sedet s promenou free_blocks_count

Jeste poznamka k bitmapam..jedna z optimalizaci jadra je, ze se snazi drzet vsechny bity v byte na stejne hodnote..tedy 0 nebo ffh. To zmensuje fragmentaci

Kazda skupina obsahuje celou tabulku block descriptoru v druhem bloku hned po superbloku. Kopie v bloku 0 je pouzita jadrem. Ostatni jsou zalohy, pro pripad poskozeni. Protoze kdyz se ztrati superblok je cely disk v....

bg_inode_bitmap - to same ale pro inody
bg_inode_table - urcuje, ktery blok obsahuje tabulku inod pro tuto skopinu

1.4 Inode a inode table

Jak jsme si uz rekli v inody jsou skoro vsechno-soubory,adresare atd.. Ext2fs je klasicky inodovy fs a proto prinasi omezeni v poctu inod. To se urcuje pri vytvareni disku. Musi to byt jakysi kompromis, protoze vic inod spotrebuje vic disku na tabulky. Muze byt maximalne jedna inoda na 128 bytu ve fs...ext2fs dela bezne 1 inodu na 4KB...

Inody jsou umisteny v tabulkach, ktere jak jsme si rekli, jsou rozhazene po disku-jedna na skupinu. Jadro se snazi umisitit data inody do bloku stejne skupiny, jako je inoda. Aby se nemuselo seekovat. Ne vzdycky se to povede. Takovym blokum se potom rika alieni.. Takhle nejak to vypada na mym disku:

Tady vidite,ze alieni nejsou tak zvlastni jev. Jsou zpusobeny dlouhymi soubory. Tady je format ulozeni inody:

1.5 Alokovani bloku

Jeden ze zakladnich ukolu inody je zdruzovat bloky. Neni tu omezeni..kazdy blok muze byt alokovan kazdou inodou. (to jsou ale pak pekny crosscainy :) Bloky se snazi alokovat ve stejne groupe a v tzv. seriich, aby se nemuselo moc seekovat.

Kazdy asi vi, ze linuxovy disk je hejno malych souboru. Aby tyto soubory nezabraly moc mista inoda ma u sebe pole na 12 bloku. Zvanych direct block. Kdyz uz jadro ma inodu - jeden pristup na disk, protoze pozice hlavicky inody je pevne dana podle jejiho cisla, ma uz prvnich 12 bloku(tedy 12 KB dat) A muze je pekne cist.

Jsou tu ale i soubory, ktere jsou delsi. Proto blok 12 je indirect blok. To je blok obsahujici opet tabulku bloku. Tam se vejde 1024/4 (na jednu adresu) 256 dalsich bloku. Takze soubory do 268KB jde cist pouze s 2 pristupy navic.

Blok 13 je double indirect. To je blok ukazujici na blok, ktery ma ukazatele na bloky s direct adresama. Rozsah je tedy 256*256 tedy 65MB. Takove soubory lze tedy cist z 3+delka/256 pristupy na disk.

Blok 14 je triple indirect. Ukazuje na double indirect bloky. Jeho rozsah uz predci velikost dnesnich disku.

Takto vypada alokacni tabulka pro muj XF86_S3:

1.6 i_mode

Urcuje typ inody a permisions. Vypisuje se jako osmickove cislo. a ma 6 mist. Kde je rozdelena na 4 vpravo a 2 vlevo. Urcuje jestli inoda je adresar, soubor nebo kdovi co jeste.
4 vpravo
posledni 3 byty jsou zname pristupy rwxrwxrwx. To zpracovava jadro
Bit 9 urcuje jestli soubor je VTX. Ale stejne nevim co to znamena..
Bit 10 rike ze soubor ma nastaveny group flag. Take nevim proc.. snad pro optimalizaci rozlozeni na disku
Bit 11 nastavuje set user id. To je znamy flag, ktery umozni procesu prepnout si effective usera na root.
2 vlevo
01 - soubor je FIFO
02 - znakove zarizeni
04 - je adresar
06 - blokove zarizeni
10 - normalni soubor
12 - symbolic link
14 - socket
Casy a datumy
i_ctime - kdy byla inoda naposled alokovana(kdy byl soubor vytvoren) i_mtime - kdy byla inoda naposled pozmenena i_ntime - kde se na ni naposled pristupovalo i_dtime - kdy byla inoda dealokovana(soubor smazan)
i_size
delka. Pokud je to normalni soubor odpovida delce souboru v bytech, ale pri jinych typech muze znamenat cokoliv :)
i_uid
i_gid
vlastnici souboru
i_version
Pouziva nfs

1.7 Hard linky

Jak jsem jiz rikal, hardlinky se delaji tak, ze proste dve adresarove polozky ukazuji na jedenu inodu. Pokud je ale adresarova polozka smazana, fs musi vedet, jestli byla posledni a jestli ma dealokovat inodu. To urcuje i_links_count. pokud je promena 1 znamena ze na ni ukazuje jedna adresarova polozka. Pokud je 0 bude soubor smazan.

1.8 Extended flags

Ty jsou ulozeny ve specialni 32bitove promene i_flags. Zatim jenom 7 bitu je definovano a 5 pouzito ve verzi 0.5a. Hlavne undelete a compress chybi..ale vyvojari se chvastaji ze tam pribyde ve verzi 1.3...ale moc tomu neverim, vzhledem k tomu ze vyvoj 1.3 se chyli ke konci a furt nic..
>>> myslim ze se porad nic nezmenilo
Jsou tu sice compress i undelete patche ale hlavne compress zatim za moc nestoji. Pouziva beznou gzip kompresi a seekovani po disku znamena pokazde rozbalovat od zacatku. To rozhodne neni reseni :) Asi se do toho pustim sam :)))
bit 0 - Secure deletion
Pokud tohle nastavite souboru a pak ho smazete uz nikdo ho neobnovi, protoze data jsou peclive prepsana nulama.
bit 1 - Undelete
zatim nepouzito
bit 2 - Compress file
nepouzito...
bit 3 - Synchroni updata
Vsechno se bude synchrone updatit na disku jako kdyz date sync optionu pri mountovani
bit 4 - Immutable file
nedotknutelny soubor..nejde smazat,prepsat proste nic
bit 5 - Append only
nemuzete prepsat ale muzete pridat data..
bit 6 - Do not dump file
Tenhle bit by mel pouzivat dump pro linux ale nevim...asi ma funkci neco jako archive bit v dosu. Proste 100% unused :)

1.9 Symbolicke linky

Uz jsem rikal ze to jsou male soubory co obsahuji cestu k jinemu souboru, ktery se otevre misto neho. Ext2 se snazi omezit velikost symbolic linku a ma dva typy:
Fast symbolic link
Uklada cestu hned v inodu(i_block[0]-i_block[15]) to znamena, ze cesty do delky 15*4=65 znaku nezabiraji blok.
Slow symbolic link
Kdyz se tam nevejde je to proste format normalniho souboru a cesta je ulozena ve specialnim bloku.

i_version

Pouziva nfs

1.10 Nevyuzite veci

Jsou tu promene spojene z ACL, ktere jeste neni implementovano. Take je tam vsechno pripraveno na fragmenty - ty umoznuji blok rozdelit na nekolik casti a do kazde hodit jiny soubor- stejne jako stacker
>>> Access Control Listy je vcelku pekny zpusob jak se vyporadat s unixovym,
>>> pouze trojurovnovym zadavanim prav k souborum.
Take os depended promene nejsou vyuzity.

1.11 Specialni inody

1.12 Adresare

Jsou na disku ulozeny ve stejnem formatu jako soubory. Maji specialni format- nekolik directory entries za sebou

Ext2 podoruje nazvy do 256 znaku a uklada je podobne jako pascal. Nema tedy na konci nulu.

Promena rec_len ukazuji delku celeho zaznamu, protoze neni ulozena plna struktura ale jenom vyuzita delka zaokrouhlena nahoru na delitelnost 4. Posledni entry v bloku nema rec_ken vyplnene.

Promena inode ukazuje na inodu souboru. Mazani se provadi tak, ze se k predchozi entry prida rec_len smazane polozky. Tim vam adresare muzou ale celkem pekne narustat. Da se to odstranit jednoduchym trikem:

cp -r adresar1 adresat2
rm -r adresar1
mv adresar2 adresar1

1.13 Superblok

Ten se nachazi na offestu 1024. Jeho delka je take 1024. A je take okopirovan na zacatek kazde skupiny bloku.

>>> superblok je sice okopirovan na zacatek kazde grupy, ale nastavili jste li
>>> jinou velikost bloku (default 1024B) pri vytvareni filesystemu, tato vami
>>> zadana velikost bloku bude pouze v 0. kopii (tj. aktualni SB). ve vsech
>>> ostatnich kopiich je default 1024B a samozrejme je i hnuto s hodnotami
>>> vztazenymi primo k velikosti bloku.
Obsahuje nekolik typu informaci
  1. zakladni informace o strukture fs - vyplneno pri vytvoreni
  2. tunable parameters - ty se daji vzdycky menit...a jsou celkem sikovne vysvetlim je
  3. Informace a stavu fs - volna mista a spol
Definice:

1.14 Identifikace

Aby se filesystem poznal ma v superbloku magicke cislo: 0xEF53, kde EF znamena extended filesystem. Ve filesystemech do 0.2GB je magicke cilo 0xEF51. Tyto fs uz nejsou kompatibilni z aktualni verzi. Hlavne group descriptory se lisi. Nevim jestli je jeste nekdo pouziva. Je ho mel pekne dlouho na starem disku a obcas to cinilo potize.

1.15 Informace o strukture fs

a_block_size
velikost bloku (1024*mocnina 2)
a_inodes_count
pocet vsech inod(maximalni pocet souboru na disku)
a_first_data_block
Urcuje blok na zarizeni, kde je superblock. On je sice czdycky na offsetu 1024 ale na zarizeni to muze byt jine. Treba kdyz block je 1024 je to upravdu block 1 ale kdyz block size je 4096 je to porad jeste block 0.
Block size na zarizeni se nemusi shodovat s block size pouzitym filesystemem
a_blocks_per_group
Jak jsou velke groupy
a_inodes_per_group
Jak jsou velke inody. Melo by to byt celkovy pocet inod/poctem group
a_creator_os
0=linux :)
1=Hurd
2=Masix
a_rev_level
obsahuje major verzi fs. Je zatim 0 protoze se fs nedobelhal k verzi 1.(posledni je tusim 0.5B_
a_log_frag_size
a_frags_per_group
zatim nejsou podporovany a tak odpovidaji velikosti bloku

1.16 Error handling v Ext2fs

Postupuje takto:
  1. identifikace problemu provadi kernel(nastavovani dirty flagu atd)
  2. opravovani provadi externi utilitka e2fsck a nebo rucne ruznymi editory
s_state
urcuje stav filesystemu. Kernel tim predava ruzne flagy pro fsck a ostatni utility
bit 0
pokud je na 0 urcuje, ze fs neni radne odmountovan a zpusobi znamou hlasku po resetu filesystem is not clean a nastartuje fsck
bit 1
je nastaven na 1 pokud jadro narazi na nejaky problem
s_errors
urcuje, jak se ma jadro chovat pri nalezeni chyby.
1 = ignore
2 = remount read-only
3 = vyhlasi paniku

Standartne se chyba ignoruje
Pridavne parametry pro fsck:
s_max_mnt_count
nastavi po kolika mountech se provede fsck. Ja osobne toto cislo vzdycky zvysim, pretoze nesnasim situaci, kdyz po rebootu se mi objevi max_mount_count reeached runing fsck....
s_checkinterval
nastavuji cas s sekundach mezi vyvolanim fsck... hodnota 0 casovane kontrolovani vypne.
s_lastcheck
kdy byl naposled provaden fsck...pro s_checkinterval
Omezeni zaplneni disku:
s_r_block_count
urcuje poced diskovych bloku, ketre jsou reservovane pro roota. Ostatni uzivatele do nich nemuzou. Ja osobne tuto hodnuotu nuluju, protoze nenavidim hlasku filesystem is 110% full :)
s_def_resuid
s_def_resgid
urcuje uzivatele a skupinu, ktera muze tyto bloky take vyuzit.
Stav fs:
s_free_block_count
pocet volnych bloku
s_free_inodes_count
pocet volnych inod
s_mtime
Cas, kdy byl naposled primountovan
s_wtime
Cas, kdy byl naposled zmenen.

PROGRAMY PRO PRACI S FS

2. Programy v baliku e2fsprogs

2.1 e2fsck

Slouzi k automaticke oprave fs. Bezne se provadi pouze v pripade, ze fs neni clean nebo ma nastaveny chybovy bit. Startuje se take, kdyz s_max_mnt_count ho vyvola.
Test se provadi v nekolika castech:

  Pass 1: Checking inodes, blocks, and sizes
kontroluje inode
kontroluje jestli sedi velikost a pocet zabranych bloku
kontroluje jestli nejsou bloky sdileny ruznymi inodami
udela tabulky do pameti pro dalsi testy

dalsi pruchody se volaji pouze v pripade problemu
pracuje s datovymi bloky sdilenymi ruznymi inodami
dealokuje soubory nebo sdilene inody kopiruje
  Pass 2: Checking directory structure
kontroluje, jestli polozky jsou v poradku
jestli cisla inod jsou v poradku
kontroluje . a ..
  Pass 3: Checking directory connectivity
premistuje neprilinkovane inody do lost+found
likviduje hardlinky na adresare
  Pass 4: Checking reference counts
kontroluje a opravuje link_count
  Pass 5: Checking group summary information
kontroluje bitmapy
calkove informace o fs
Zakladni switche
>>> dalsi uzitecne parametry:
>>>    -b [superbl.no.];   pouzije se tahle kopie SB pro checkovani
>>>    -B [blocksize];     hleda superblok jen na zadane pozici
>>>    -c                  hleda badblocks

2.2 mke2fs

Vytvareni filesystemu na disku. Zakladni volby:
>>> jak jsem jiz upozornil, tato hodnota se z nejakeho duvodu nepromitne
>>> do kopii superbloku. Kopie jsou pak v podstate nepouzitelne dokud to
>>> rucne nevoeditujete

2.3 tune2fs

Tento program slouzi k nastaveni tunable parametru disku. Pouzivejte ho pouze na read-only nebo nenamountovany filesystem, jinak se mohou dit zvlastni veci. Disk namountujete read-only tak, ze linux nastartujete do singleusera tim ze v lilu predate parametr S
Switche:

2.4 debugfs

Pozor toto neni utilitka jenom ke kontrolovani filesystem driveru. Slouzi hlavne k prohlidnuti filesystemu a rucnimu opravovani. Take je dobry na delani poskozenych filesystemu a potom testovani jadra a e2fsck :) Je to program, ktery umoznuje delat mnoho zakladnich opertaci s fs, jako zakladani inod, cteni inod, cteni souboru,adresaru atd. Je to proste neco jako diskeditor. Pro uplnost manualova stranka:
>>> debugfs neumi editovat superblok
myslim ze tady neni co dodat. Kdo nerozumi popisum z manualove stranky, at se radeji do editovani fs nepousti :)

2.5 Dump2fs

Vypisuje informace o fs:

2.6 lsattr,chattr

Umoznuje vypisovat/nastavovat specialni atributy pro ext2fs...

2.7 mklost+found

Vytvori lost+found adresar

3. Programy distribuovane jednotlive

3.1 ext2ed

Je prijemnejsi fullscreen alternativa k debugu...Umi v podstate to same a ma lepsi uzivatelsk interface :)
>>> Pro zkompilovani ext2edu budete potrebovat readline knihovnu
>>> Prace v ext2edu je vcelku intuitivni, nicmene popsana v manualovych
>>> strankach neni. Popis je ale ve slajdech
>>> Ext2ed mimo jine i umi editovat jednotlive polozky suberbloku.
>>> Skutecne spravne informace samozrejme dostanete pouze pokud ext2eda
>>> pouzivate na nenamountovany filesystem.

3.2 lde

Linux disk editor. Tvrdi o sobe ze je norton disk edit like ale neni. Umi ext2 minix a mozna i dalsi. Podporuje editovani urcite inody, hexadumpat a modifikovat primo bloky a pospojovani bloku do inody=rucni undelete. Ja preferuju ext2ed

3.3 Dump

Je tu i dump/restore utilita, ktera umi ulozit e2fs disk a pak ho zrestaurovat do 100% stejne podoby...stejne atributy atd.. Tar napriklad nepodporuje rozsirene atributy.

3.4 Defrag

Existuje i defragmentacni program. Funguje pekne ale nema valny ucinek. Vola se pomoci e2defrag. Zakladni volby: Je nutne volat na odmountovany disk. Proto si musite vetsinou vzit slakware (RedHat) bootovacku a nabootovat z diskety.
Ve stejnem baliku najdete i pekny programecek e2dump. Z neho je vetsina vypisu co jsem pouzil.

3.5 Ext2tools

To je sada utilit pro cteni linux disku z dosu..celkem cool :) Existuje i fs driver pro os/2. Nevim jak se jmenuje

3.6 Vyvoj novych utilitek

Je silne zjednodusen tim, ze existuje knihovna dodavana spolu se e2fsprogs pro praci se zakladnimi datovymi strukturami

4. benchmarky

Uvadim zde benchamrky ze slajdu k ext2fs. Provadene na i486DX/33 16MB ram.
Benchmark no 1:
	    Char     Block     Rewrite   Char   Block  Seeks
	    Write    Write               Read   Read
	    MB/Sec   KB/Sec    MB/Sec    MB/Sec KB/Sec /Sec
BSD FFS        505      768       206     436     600    25.4
Ext 2 FS       523      611       323     303     805    46.0
Minix FS       404      541       315     361     837    47.3
Xia FS         459      478       241     290     278    31.3
Ext2 fs je jednoznacne rychlejsi nez minix/Xia. Pouze u cteni je minix o neco malo rychlejsi ale to bude spis aktualni fragmentaci disku. U FFS je to trochu sporne. Blokove pristupy jsou nekolikanasobne lepsi. Zato pristupy po znacich jdou pomalu. Z hlediska jadra to ale neni rozdil. Problem bude tedy v pouzitych knihovnach. Vzhledem k dobe, kdy benchmarky byly provadeny to uz asi neplati. FFS je take rychlejsi pri blokovem zapisu. Zapis ale neni tak kriticky, protoze se provadi asynchronne a cachi. Nejdulezitejsi je read!

Benchmark no. 2:
Pozor! zde je uveden cas. Nizsi hodnoty jsou lepsi!
	     Create    Copy     Stat    Grep    Compile
	      (ms)     (ms)     (ms)    (ms)     (ms)
BSD FFS      2296      5919      3482   15607   76333
Ext2 FS       450      4330      7104   10057   65382
Minix FS      536      4665      7209   11524   71038
Xia FS        492      4398      7241   10953   60430
Ext2fs byl porazen jen compile a to Xiafs... Tady ale mohlo hrat roli neco uplne jineho :) A take xiafs se velmi brzo sfragmentuje a pak uz neni tak rychly :) Take je rychlejsi Stat u BSD FS ale to take bude spis knihovnami nebo necim podobnym....

4.1 Fragmentace

Proc fragmentace neni tak velky problem:
  1. Sekvencni cteni dlouhych souboru vetsinou neni casove kriticke
  2. Dlouhe soubory se vetsinou pouzivaji jako random-access
Benchmarky:

Bootovani z root partiitony
       %full pred             po                   cena fragmentace
	     defragmentaci    defragmentaci
extfs  95%   37 sec           26 sec               42%
ext2fs 99%   40 sec           37 sec               8%
Nacteni linux zdrojaku
       %full pred             po                   cena fragmentace
	     defragmentaci    defragmentaci
ext2fs 95%   53 sec	      41 sec		   29%
Tady vidite, ze pri bezne praci-random pristupu to neni kriticke. Jenom pri sekvencnim ctenim-cteni linux zdrojaku se to projevuje.

ZAKLADNI NAVRH A SROVNANI Z JINYMI FS

4.2 Optimalizace

(toto je kratky vytah ze slajdu)

Co vlastne optimalizujeme:

4.3 Buffer cache

  1. Unified buffer cache
    Kdyz je to mozne pouziva buffer cache a proces, ktery data nacetl stejne misto v pameti. Napriklad vsechny spustene programy jsou zaroven v cachi.
    Efektivita pri vetsich cachich
    Cache muze rust a zmensovat se podle volneho mista
  2. I/O scheluding
    Zapisy jsou asynchroni...
    Cteni je syncroni a tak casove kriticke
    Priority pro I/O
    Srovnavani requesty pro nejlepsi pruchodnost

4.4 I/O Ordering (Read-Ahead)

Read ahead nacita data dopredu ze souboru, protoze predpoklada ze si o to proces rekne. Read ahead muze bezet asyncrone(v linuxu to je zrovna ve vyvoji) A potom proces, ktery pomalu nacita data z disku a nejak je je zpracovava vubec nemusi cekat na disk.
Jak to resi os:
  1. BSD FFS
    -nacita jeden blok dopredu
    -pracuje dobre pokud nebezi vic procesu...
  2. Viva FS
    -Dela si statistiky a podle toho nacita dopredu
  3. Linux Ext2fs
    -pri sekvencnim ctenim
    Zrovna se to dost meni v novych jadrech a tak radeji pomlcim...ve starsich jadrech to za moc nestoji.

4.5 Alokace volneho mista na disku

To je velmi dulezita vec. Da se tim omezit fragmentace disku.
Jak to resi jednotlive systemy:
A toto je vysledek:
Vidite, ze vzdalenost jednotlivych fragmentu souboru je dost mala (vetsinou pod tech 32 bloku) jenom obcas ji preleze. Potom to ale je opravdu velky skok..

A tady pridavam bitmapu jedne grupy meho disku
Tady je videt, jak se jadro snazi je drzet na ff nebo 00. Dalo mi opravdu praci najit groupu, kde se objevuji i jina cisla....

Mapa ukazujici rozlozeni dat na mem disku:
Jeden znak na obrazovce je 157 bloku. Proto zobrazeni je skreslene, protoze jsem daval prednost adresarum pred normalnimy soubory a zacatkum souboru pred koncem, je tu hodne adresaru a zacatku soboru, presto ze na disku to je trochu jinak. Ale rozhodne je fragmentace mnohem min misto zabrane adresari.. jsou tu i dost dlouhe sobory bez fragmentace a volne misto je relativne nefragmentovane na konci groupingu. To je na tak hodne pouzivanem disku rozhodne uspech (podle stastik je fragmentace neco kolem 6%).
Pro lepsi predstavu jeste kousek disku odzoomovane:

Efektivita pro cpu

  1. Rozdeluje bitmapy do skupin
  2. Kazda skupina ma svoje vlastni statistiky. Urci tedy napred o kterou skupinu se bude zajiman a potom teprve prohlizi bitmapy
  3. Prealokace dopredu usetri 75% casu stravenym prohledavanim tabulek
  4. Rychle podporuje sekvencni alokace(kouka tam jako prvni)
A takto nejak vypada group descriptor:

4.6 Efektiva vyuziti mista na disku

  1. Pouziva fast symbolic links, ktere usetri 1KB mista
  2. Diky vysoke efektivite na CPU je mozne pouzivat male 1KB bloky

4.7 Spolehlivost

4.8 O cem se uvazuje

utilitky: Zmeny do fs: A tim jsem uz asi tema naprosto vycerpal :)
Doufam....
Seminar Linux | Tomas Nejedlik | 23.9.1997