Dziś pod skalpel wpada system plików ReiserFS z opcją notail. Cytując manual:
“Domyślnie reiserfs przechowuje małe pliki i ‘końcówki plików’ bezpośrednio w swoim drzewie. Jest to zachowanie mylące dla niektórych narzędzi użytkowych takich jak LILO(8). Ta opcja wyłącza pakowanie plików do drzewa.“
Na forum uw-team doszło do sporu z użytkownikiem MeMeK który uznał, że opcja notail znacząco przyśpiesza pracę. Postanowiłem to sprawdzić
Tworzę sobie plik o rozmiarze 1 GB
PuddleFrog / # dd if=/dev/zero of=poligon bs=1MB count=1024
1024+0 przeczytanych recordów
1024+0 zapisanych recordów
skopiowane 1024000000 bajtów (1,0 GB), 66,2257 s, 15,5 MB/s
Montuję go jako urządzenie blokowe
PuddleFrog / # losetup /dev/loop1 poligon
i zakładam na nim system plików reiserfs
PuddleFrog / # mkfs.reiserfs /dev/loop1
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)
A pair of credits:
Alexander Lyamin keeps our hardware running, and was very generous to our
project in many little ways.
Vladimir Demidov wrote the parser for sys_reiser4(), the V3 alpha port, part of
the V3 journal relocation code, and helped Hans keep the business side of
things running.
Guessing about desired format.. Kernel 2.6.25-gentoo-r5 is running.
Format 3.6 with standard journal
Count of blocks on the device: 250000
Number of blocks consumed by mkreiserfs formatting process: 8219
Blocksize: 4096
Hash function used to sort names: “r5″
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 0b7bf889-2030-4212-810d-91bac13a9511
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON ‘/dev/loop1′!
Continue (y/n):y
Initializing journal – 0%….20%….40%….60%….80%….100%
Syncing..ok
Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.
ReiserFS is successfully created on /dev/loop1.
montujemy go
PuddleFrog / # mount /dev/loop1 /mnt/2/ -o noatime
i przechodzimy do niego
PuddleFrog / # cd /mnt/2/
Teraz przy użyciu Pythona stworzymy sobie pliki które posłużą nam do testów, czyli stworzenia tysiąca plików, odczytu tysiąca plików i usunięcia tysiąca plików.
PuddleFrog 2 # python
Python 2.5.2 (r252:60911, Jun 25 2008, 11:08:44)
[GCC 4.3.1] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> plik = open(“tworz”, “wb”)
>>> for x in range(1000):
… plik.write(“dd if=/dev/zero of=%d bs=512 count=1\n” % x)
…
>>> plik.close()
>>> plik = open(“wyswietl”, “wb”)
>>> for x in range(1000):
… plik.write(“cat %d\n” % x)
…
>>> plik.close()
>>> plik = open(“usun”, “wb”)
>>> for x in range(1000):
… plik.write(“rm %d\n” % x)
…
>>> plik.close()
>>> exit()
pliki są gotowe, nadajemy im atrybut wykonywalności
PuddleFrog 2 # chmod +x *
No i jedziemy.
PuddleFrog 2 # time ./tworz
real 0m2.386s
user 0m0.628s
sys 0m1.732s
PuddleFrog 2 # time ./wyswietl
real 0m1.410s
user 0m0.344s
sys 0m1.064s
PuddleFrog 2 # time ./usun
real 0m1.461s
user 0m0.360s
sys 0m1.248s
Czasy jakoś niespecjalnie przerażające.
teraz sformatujemy tą partycję ponownie i podmontujemy, tym razem z opcją notail
PuddleFrog 2 # cd ~
PuddleFrog ~ # umount /dev/loop1
PuddleFrog ~ # mkfs.reiserfs /dev/loop1
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)
A pair of credits:
Alexander Lyamin keeps our hardware running, and was very generous to our
project in many little ways.
Vladimir Demidov wrote the parser for sys_reiser4(), the V3 alpha port, part of
the V3 journal relocation code, and helped Hans keep the business side of
things running.
Guessing about desired format.. Kernel 2.6.25-gentoo-r5 is running.
Format 3.6 with standard journal
Count of blocks on the device: 250000
Number of blocks consumed by mkreiserfs formatting process: 8219
Blocksize: 4096
Hash function used to sort names: “r5″
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 1ca47a09-dd2c-44df-8d5b-505efa7dea65
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON ‘/dev/loop1′!
Continue (y/n):y
Initializing journal – 0%….20%….40%….60%….80%….100%
Syncing..ok
Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.
ReiserFS is successfully created on /dev/loop1.
PuddleFrog ~ # mount /dev/loop1 /mnt/2/ -o noatime,notail
PuddleFrog ~ # cd /mnt/2/
Ponownie tworzymy pliki testowe
PuddleFrog 2 # python
Python 2.5.2 (r252:60911, Jun 25 2008, 11:08:44)
[GCC 4.3.1] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> plik = open(“tworz”, “wb”)
>>> for x in range(1000):
… plik.write(“dd if=/dev/zero of=%d bs=512 count=1\n” % x)
…
>>> plik.close()
>>> plik = open(“wyswietl”, “wb”)
>>> for x in range(1000):
… plik.write(“cat %d\n” % x)
…
>>> plik.close()
>>> plik = open(“usun”, “wb”)
>>> for x in range(1000):
… plik.write(“rm %d\n” % x)
…
>>> plik.close()
>>> exit()
pliki są gotowe, nadajemy im atrybut wykonywalności
PuddleFrog 2 # chmod +x *
No i jedziemy, przypominam że partycja ma opcję notail.
PuddleFrog 2 # time ./tworz
real 0m2.376s
user 0m0.652s
sys 0m1.736s
PuddleFrog 2 # time ./wyswietl
real 0m1.476s
user 0m0.364s
sys 0m1.132s
PuddleFrog 2 # time ./usun
real 0m1.497s
user 0m0.336s
sys 0m1.312s
Bez róznicy.
W mojej opinii, dodanie opcji notail nie zwiększa wydajności, a ponieważ rzekome problemy z aplikacjami są mitem, nie widzę sensu jej użytkowania.
Fakt :/ Reiser to bastard.
Imho dla niektórych niskopoziomowych narzędzi przechowywanie fragmentów pliku w drzewie systemu plików może być mylące – ale to raczej niedoróbka danej aplikacji niż fs’a.
No to chyba nie jest trudne w implementacji, co nie ?
Takie ‘badania labolatoryjne’ nie dają pełnego obrazu. Zrób test na przykładzie codziennego użytkowania: np. odpal kompilację kernela z/bez notail.
a żebyś wiedział ze tak zrobie
[...] 28 lipiec, 2008 autor TBH Została mi rzucona rękawica! [...]