RamDisk

內存的傳輸率目前在GiB/s級別,是MiB/s級別的固態硬盤和機械硬盤無法比擬的。在Linux系統中使用部分內存資源創建虛擬的硬盤,並將頻繁讀取寫入的緩存數據映射到內存硬盤中,可以保護物理硬盤壽命,加速系統響應。

1 什麼是RamDisk

Ram:內存,Disk:磁盤,在Linux中可以將一部分內存當作分區來使用,稱之爲RamDisk。對於一些經常被訪問、並且不會被更改的文件,可以將它們通過RamDisk放在內存中,能夠明顯地提高系統性能。RamDisk工作於虛擬文件系統(VFS)層,不能格式化,但可以創建多個RamDisk。雖然現在硬盤價錢越來越便宜,但對於一些我們想讓其訪問速度很高的情況下,RamDisk還是很好用的。

如果對計算速度要求很高,可以通過增加內存來實現,使用ramdisk技術。一個A RamDisk就是把內存假設爲一個硬盤驅動器,並且在它的上面存儲文件。假設有幾個文件要頻繁的使用,如果將它們加到內存當中,程序運行速度會大幅度提高,因爲內存的讀寫速度遠高於硬盤。劃出部分內存提高整體性能,不亞於更換新的CPU。像Web服務器這樣的計算機,需要大量讀取和交換特定的文件。因此,在Web服務器上建立RamDisk會大大提高網絡讀取速度。

2 如何使用RamDisk

格式化一個ramdisk並把他加到一個目錄上。列出所有可用的ramdisk用“ls -al /dev/ram*”。這就會列出你現有可用的ramdisk。這些ramdisk並不搶奪內存,除非進行格式化的一類操作。這裏有一個使用ramdisk的例子。

# create a mount point:
mkdir /tmp/ramdisk0
# create a filesystem:
mke2fs /dev/ram0
# mount the ramdisk:
mount /dev/ram0 /tmp/ramdisk0

這三個命令將爲ramdisk創建一個目錄,格式化ramdisk(創建文件系統),並且加載這個ramdisk到"/tmp/ramdisk0"。 現在你可以將這個目錄看成一個虛擬的分區。使用它就象使用其它的目錄一樣。如果對ramdisk的格式化失敗,那就是你的內核不支持ramdisk。其內核配置選項是CONFIG_BLK_DEV_RAM ramdisk的默認大小是 4Mb=4096 blocks。在你進行mke2fs的時候你可以看到你的ramdisk的大小。mke2fs /dev/ram0 將產生類適於以下的信息: 

mke2fs 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09
Linux ext2 filesystem format
Filesystem label=
1024 inodes, 4096 blocks
204 blocks (4.98%) reserved for the super user
First data block=1
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1 block group
8192 blocks per group, 8192 fragments per group
1024 inodes per group
執行df -k /dev/ram0 你實際用了多少空間:
>df -k /dev/ram0
Filesystem   1k-blocks   Used Available Use% Mounted on
/dev/ram0         3963     13       3746    0% /tmp/ramdisk0

那麼麻煩是什麼呢?在系統重新啓動的時候,將刷新這個區域。不要將任何沒有拷貝的數據放在這個區域。如果你對這個目錄進行了修改,並且需要保留這些修改,採取一些辦法進行備份。

3 改變RamDisks 的大小

要想使用RamDisk你必須或是得到內核的支持或是以模塊的形式將他加載到系統中。其中內核的配置選項是CONFIG_BLK_DEV_RAM。把ramdisk編譯成一個可加載的模塊的好處是你可以在加載是重新確定ramdisk的大小。第一個辦法。在lilo.conf文件中加入:

ramdisk_size=10000 (or ramdisk=10000 for old kernels) 

這樣在你使用lilo命令和重新啓動計算機之後,ramdisk的默認大小將會是10M。這是一個/etc/lilo.conf文件的例子:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz
label=linux
root=/dev/hda2
read-only
ramdisk_size=10000

確切的說,我只是使用了9M多的空間,文件系統也將佔用一定空間。當你以模塊的形式編譯ramdisk時,你可以在加載的時候決定ramdisk的大小。這也可以通過修改/etc/conf.modules 的選項設置來做到。 

options rd rd_size=10000

或是在命令行中指定參數給ismod:

insmod rd rd_size=10000

以下是介紹如何使用這樣的模塊的例子: 
卸載ramdisk

umount /tmp/ramdisk0 . 

卸載模塊(再上一節所提到的過程中自動加載)

rmmod rd 

加載ramdisk模塊並且把它的大校設爲20M

insmod rd rd_size=20000 

創建一個文件系統,

mke2fs /dev/ram0 

加載ramdisk

 mount /dev/ram0 /tmp/ramdisk0

4 RamDisk的優缺點

RamDisk就是將內存模擬爲硬盤空間。無論什麼時候你使用RamDisk,實際上你是在使用內存而不是硬盤。在這一點上既有優點又有缺點。最基本的,最大的優點是你是在使用內存,你所做的一切都會快一些,因爲硬盤的速度較內存慢。最大的缺點是如果你改變了數據庫服務器的內容並且重新啓動機器時,所做的一切改動都將丟失。

5 RamDisk應該佔用多少物理內存

Ramdisk虛擬內存盤軟件可以將榨乾內存的潛在性能,但一個問題來了,Ramdisk虛擬內存盤要佔用多少物理內存纔算合適?經過小編的摸索研究,終於得到的一個較爲靠譜的結論,大家可以根據小編的建議來折騰。

如果是2G內存,那建議挪300-500M內存分割給Ramdisk,更建議升級到4G內存以上;
如果是3G內存,建議挪0.7-1G內存給Ramdisk;
如果是4G內存,建議挪1-1.5G內存給Ramdisk;
如果是6G以上,建議挪50%內存給Ramdisk。

6 RamDisk有三種實現方式

在Linux中可以將一部分內存mount爲分區來使用,通常稱之爲RamDisk,分爲:Ramdisk,ramfs,tmpfs。
ramdisk:相當於一個磁盤,需要先格式化再使用(可以格式化成各種文件系統),如果umount再加載,只要不重啓,則數據依然會存在。
ramfs    :位於虛擬文件系統(VFS)層,無需格式化,只使用物理內存。
tmpfs    :也是位於虛擬文件系統層,使用的是Linux系統內存,不管是物理內存還是swap,只負責向系統申請。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章