JavaSvet - otvorena java zajednica

 
glavna stranica arr2javasvet  english version arr2java.net

Brži packaging&deployment uz pomoć RAM diska

Damjan S. Vujnović
Sadržaj:
Linkovi:
3 Feb 2005

Seća li se neko Borlandovog Turbo C-a 2.0? Kada se pojavio, bilo je to definitivno najveće otkriće nakon sliced bread-a. Promeniš Destination sa Disk na Memory, stisneš F9 i dok kažeš "keks" poruka Finished veselo skakuće u info prozoru. I sve to na "zverskom" i80286/10MHz/4MB RAM-a. A danas?

Motivacija

Danas imamo računare koji su tri reda veličine brži, a prevođenje i pakovanje J2EE aplikacije može da se pretvori u mučan proces (pogotovo ako ste test-infected developer). Ako strpljenje nije deo vašeg genetskog materijala (a pri tome niste ljubitelj popularne real-time društvene igre "Srbija na međi vekova") možete se smatrati srećnim ako prođete samo sa nekim blažim psihosomatskim oboljenjem. Usko grlo procesa je očigledno pristup disku i ovaj tekst ima za cilj da prikaže jedan od načina da ga svedete na minimum.

Ramdisk HOWTO

First things first... Proverimo da li u kernelu postoji podrška za RAM disk:

damjan@attika:~$ dmesg | grep RAMDISK

i ako je sve u redu bićete pozdravljeni sa:

RAMDISK driver initialized: 16 RAM disks of 16000K size 1024 blocksize

Ukoliko poruke o inicijalizaciji ramdisk drajvera nema, a koristite monolitan kernel, potrebno je prevesti kernel sa uključenom podrškom za RAM disk (Device Drivers -> Block devices -> RAM disk support). Veličina RAM diska se određuje prilikom podizanja sistema, postavljanjem kernel parametra ramdisk_size. Sledi primer /etc/lilo.conf (akcenat je na append = "ramdisk_size=128000"):

boot = /dev/hda
bitmap=/boot/lilo.bmp
bmp-colors = 15,,0;5,,15
bmp-table = 60,15,1,4
bmp-timer = 69,29,6,8,0
prompt
change-rules
reset
vga = 794
image = /boot/vmlinuz
append = "ramdisk_size=128000 splash=silent"
label = Slackware
initrd = /boot/initrd
read-only
root = /dev/hda1

U slučaju da ipak preferirate modularne kernele, pokušajte sa ručnim učitavanjem ramdisk modula (ako ne upali, potrebno je da prevedete RAM disk kernel modul rd):

root@attika:~# modprobe rd rd_size=128000

Veličinu parametra rd_size odaberite u skladu sa svojim potrebama, u ovom slučaju je 128 Mb dovoljno da stane jedna instanca JBoss-a (bez dokumentacije i drugih "viškova") i ciljni direktorijum koji koristi Ant build skript. U ovom slučaju korišćenje modularnog kernela ima malu prednost jer se veličina RAM diska može promeniti bez ponovnog pokretanja računara - sa rmmod uklonite modul i ponovo ga učitate sa novom vrednosti parametra rd_size.

Sada je potrebno pripremiti mount point za naš RAM disk:

root@attika:~# mkdir /ramdisk
root@attika:~# chmod 770 /ramdisk
root@attika:~# chown damjan:users /ramdisk

Zatim treba kreirati fajl sistem. Pošto nam žurnalizacija baš i neće biti od velike koristi :), ext2 se čini kao dobar izbor:

root@attika:~# mkfs.ext2 -v -m 0 /dev/ram0

Po default-u, mkfs.ext2 rezerviše 5% blokova za super-usera (što u ovom slučaju nije potrebno) pa otuda i ono -m 0. Izlaz bi trebalo da bude nešto poput:

mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
32000 inodes, 128000 blocks
0 blocks (0.00%) reserved for the super user
First data block=1
16 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
		8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Konačno i sam mount:

root@attika:~# mount -o noatime /dev/ram0 /ramdisk

Brojke Đuro, brojke!

Platforma za testiranje bio je AMD XP 2600+ sa 1GB RAM-a od čega je za RAM disk rezervisano 128Mb. Ciljni aplikativni server je JBoss 3.2.3, dok je za prevođenje i pakovanje korišten Ant. Originalni build skript je modifikovan za potrebe testiranja tako da se na RAM disk smeštaju:

Mereno je vreme potrebno za prevođenje, pakovanje i deployment dobijenog .ear-a (znači od pokretanja Ant skripta do trenutka kada JBoss kaze deployed). Upotrebom RAM diska se ukupno vreme smanjilo sa 3 minuta na 50 sekundi.

Zaključak

Priča ovde za mene staje, a za vas bi tek trebalo da počne. Eksperimentišite. Ako vam đavo bas ne da mira mozete i izvorne .java fajlove držati na RAM disku (ili, kao neki hacker wannabe, kompletan home direktorijum i /tmp particiju:)), ali to već zahteva postojanje odgovarajućeg cron taska za "tihi backup".

Happy coding!

P.S. Nisam se nešto preterano udubljivao (pa se u tom smislu ograđujem od sledeće konstatacije), ali vidim da Windows nema standardni RAM disk drajver i da postoji gomila 3rd party rešenja, pa bi bilo lepo da od nekoga ko se time pozabavio čujemo reč-dve.