Ramdysk jest fragmentem pamięci RAM, która wykorzystywana jest w roli pamięci dyskowej. Dzięki takiej operacji czas dostępu do danych jest tysiąckrotnie szybszy od napędów dysków twardych. Niestety dane umieszczone na ramdysku są tracone po wyłączeniu systemu operacyjnego, dlatego są doskonałym miejscem do przechowywania tam plików tymczasowych.
Tworzenie ramdysku jest bardzo prostą czynnością i służy do tego polecenie ramdiskadm
, które wydajemy z poziomu użytkownika root.
root@solaris# ramdiskadm -a rdisk 1024m /dev/ramdisk/rdisk root@solaris# ls -l /dev/ramdisk/rdisk lrwxrwxrwx 1 root root 39 paź 25 09:25 /dev/ramdisk/rdisk -> ../../devices/pseudo/ramdisk@1024:rdisk
Jeśli pojawi się komunikat Resource temporarily unavailable
, oznacza to, że nie posiadamy w systemie tak dużego ciągłego obszaru wolnej pamięci. Należy wtedy podać mniejszy obszar dla ramdysku lub stworzyć go podczas uruchamiania systemu. Jeśli polecenie zakończyło się bez błędu możemy sprawdzić czy system widzi nowo stworzony ramdisk.
root@solaris# ramdiskadm Block Device Size Removable /dev/ramdisk/root 117481472 No /dev/ramdisk/rdisk 1073741824 Yes
Następnie należy stworzyć na nowym dysku system plików a następnie takie urządzenie zamontować w systemie operacyjnym, aby było dostępne dla użytkowników.
root@just_test# fstyp /dev/ramdisk/rdisk Unknown_fstyp (no matches) root@just_test# newfs /dev/ramdisk/rdisk /dev/rramdisk/rdisk: Unable to find Media type. Proceeding with system determined parameters. newfs: construct a new file system /dev/rramdisk/rdisk: (y/n)? y /dev/rramdisk/rdisk: 2097000 sectors in 3495 cylinders of 1 tracks, 600 sectors 1023,9MB in 219 cyl groups (16 c/g, 4,69MB/g, 2240 i/g) super-block backups (for fsck -F ufs -o b=#) at: 32, 9632, 19232, 28832, 38432, 48032, 57632, 67232, 76832, 86432, 2006432, 2016032, 2025632, 2035232, 2044832, 2054432, 2064032, 2073632, 2083232, 2092832
Następnie montujemy nowe urządzenie w systemie i sprawdzamy czy jest ono dostępne.
root@solaris# mkdir /zones/wm-test/root/export/rdisk root@solaris# mount /dev/ramdisk/rdisk /zones/wm-test/root/export/rdisk root@solaris# df -h Filesystem size used avail capacity Mounted on / 11G 4,3G 6,4G 40% / /dev 11G 4,3G 6,4G 40% /dev proc 0K 0K 0K 0% /proc ctfs 0K 0K 0K 0% /system/contract mnttab 0K 0K 0K 0% /etc/mnttab objfs 0K 0K 0K 0% /system/object swap 8,0G 336K 8,0G 1% /etc/svc/volatile fd 0K 0K 0K 0% /dev/fd swap 8,1G 112M 8,0G 2% /tmp swap 8,0G 32K 8,0G 1% /var/run /export/home 134G 50G 83G 38% /export/home /export/rdisk 961M 1,0M 902M 1% /export/rdisk
Jeśli wszystkie operacje się powiodły, możemy przystąpić do testowania ramdisku.
Do testów wykorzystałem serwer Fujitsu Siemens PRIMEPOWER 450 4x SPARC64 V z sytemem operacyjnym SunOS 5.10 (Generic_138888-08 sun4us sparc FJSV,GPUZC-M). Maszyna wyposażona jest w 8192 MB pamięci RAM.
Do testów wykorzystałem polecenie dd
do wygenerowania plików oraz polecenie time
do zmierzenia czasu ich wykonania. Pierwszym testem było wygenerowanie pliku wielkości 512 MB.
root@solaris# time dd if=/dev/zero of=/export/rdisk/test/file.img bs=4096 count=131072 131072+0 records in 131072+0 records out real 0m4.626s user 0m0.217s sys 0m4.369s root@solaris# root@solaris# time dd if=/dev/zero of=/test/file.img bs=4096 count=131072 131072+0 records in 131072+0 records out real 0m16.819s user 0m0.215s sys 0m3.025s
Jak widać, czas tworzenia pliku na ramdysku był ponad 4 razy szybszy od stworzenia go na dysku lokalnym. W kolejnym teście stworzymy 1000 plików o wielkości 1 KB każdy.
root@solaris# time for i in {1..1000}; do dd if=/dev/zero of=/export/rdisk/test/file.$i.img bs=1024 count=1; done real 0m4.807s user 0m1.042s sys 0m3.803s root@solaris# root@solaris# time for i in {1..1000}; do dd if=/dev/zero of=/test/file.$i.img bs=1024 count=1; done real 0m4.800s user 0m1.030s sys 0m3.798s
W tym wypadku wyniki były porównywalne. Kolejny test to stworzenie 500 plików o wielkości 1 MB każdy.
root@solaris# time for i in {1..500}; do dd if=/dev/zero of=/export/rdisk/test/file.$i.img bs=1024 count=1024; done real 0m9.820s user 0m1.436s sys 0m8.332s root@solaris# root@solaris# time for i in {1..500}; do dd if=/dev/zero of=/test/file.$i.img bs=1024 count=1024; done real 0m34.315s user 0m1.450s sys 0m7.882s
I w tym wypadku ramdysk był szybszy. Jak widać taki podręczny dysk w pamięci może przydać się do przechowywania plików tymczasowych lub dużej ilości małych plików.
No to chyba cos jest nie tak, skoro ramdysk jest tylko 4 razy szybszy od zapisu na dysku lokalnym?
Jak dla mnie to jest okey :]