Come fare un ramdisk in Solaris? tmpfs, il pseudo filesystem utilizzato anche per lo swap, utilizza la Virtual Memory; in Solaris la Virtual Memory e’ controllata dal sistema e utilizza la memoria fisica e le eventuali slices allocate per lo swap tagliate su uno o piu’ dischi duri. Questo mix non e’ gestibile, quindi questa non e’ strada percorribile per avere un ramdisk puro. Inoltre un tmpfs non ha un device logico e non supporta la formattazione per spalmarci sopra qualcosa come UFS, QFS o VxFS.
Ramdisk, e’ un driver del kernel Solaris, per creare block o raw devices in RAM. Con ramdiskadm e’ possibile creare e distruggere ramdisks. Notare che per la creazione del ramdisk la RAM necessaria deve essere disponibile, pena messaggio d’errore e mancata creazione:
# vmstat
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr m0 m1 m4 m5 in sy cs us sy id
0 0 0 23058496 7046264 0 1 0 0 0 0 0 0 12 0 0 371 156 432 0 0 99
# ramdiskadm -a ramb 8g
ramdiskadm: couldn’t create ramdisk “ramb”: Resource temporarily unavailable
Creiamo:
# ramdiskadm -a rama 1g
/dev/ramdisk/rama# ls -la /dev/ramdisk/rama
lrwxrwxrwx 1 root root 38 Aug 14 22:13 /dev/ramdisk/rama -> ../../devices/pseudo/ramdisk@1024:rama
1 # ls -la /dev/rramdisk/rama
lrwxrwxrwx 1 root root 42 Aug 14 22:13 /dev/rramdisk/rama -> ../../devices/pseudo/ramdisk@1024:rama,raw
Ci possiamo fare piu’ o meno quello che ci pare; creiamoci su un normalissimo filesystem UFS:
# newfs /dev/rramdisk/rama
/dev/rramdisk/rama: Unable to find Media type. Proceeding with system determined parameters.
newfs: construct a new file system /dev/rramdisk/rama: (y/n)? y
/dev/rramdisk/rama: 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
Montiamolo:
# mount /dev/ramdisk/rama /mnt
# df -n|grep “^/mnt”
/mnt : ufs
Creiamo un file e compariamo i tempi di creazione con quelli di un file identico creato su hard disk SAS:
*ramdisk ufs
# time mkfile 700m /mnt/700megareal 0m5.368s
user 0m0.091s
sys 0m5.272s*SAS interno ufs
# time mkfile 700m /FS/700megareal 0m12.301s
user 0m0.081s
sys 0m2.907s*FC array qfs
# time mkfile 700m /qfs_di_prova/700megareal 0m5.866s
user 0m0.074s
sys 0m3.973s
La differenza nei tempi di creazione tra un disco interno al server SAS e il ramdisk e’ ovviamente enorme; interessante vedere come sia necessario lo stesso tempo per la creazione del file su una lun residente su array FC, che fa il suo buon uso della sua cache.
Va bene! Gli usi possibili di un ramdisk sono tra i piu’ disparati, diamoci da fare!