linux ramdisk与tmpfs的深入分析
一)ramdisk
1)概念
ramdisk就是指使用一部分內(nèi)存空間來模擬硬盤分區(qū),也就是說ramdisk是一個塊設備,要用mkfs格式化,才能真正使用它.
.ramdisk在內(nèi)核2.0/2.2版本就已經(jīng)支持.
.ramdisk設備是它不允許重新聲明它的內(nèi)存空間,所以ramdisk塊通常會一直占用空間的內(nèi)存直到系統(tǒng)重啟.
.ramdisk的一個缺點是在它上面創(chuàng)建一個文件系統(tǒng),它同時會消耗緩沖區(qū)高速緩存和文件系統(tǒng)緩存,理論上,它可以消耗一個磁盤文件的兩倍隨機內(nèi)存.
.ramdisk的另一個缺點是它大小固定,之后不能改變
.現(xiàn)在大多數(shù)需要RAM臨時存儲的應用程序會使用tmpfs文件系統(tǒng)而不是ramdisk設備.
2)ramdisk的應用
2.1)查看當前系統(tǒng)的ramdisk
[root@test1 ~]# ls -l /dev/ram*
lrwxrwxrwx 1 root root???? 4 Feb? 6 13:51 /dev/ram -> ram1
brw-r----- 1 root disk 1,? 0 Feb? 6 13:50 /dev/ram0
brw-r----- 1 root disk 1,? 1 Feb? 6 13:50 /dev/ram1
brw-r----- 1 root disk 1, 10 Feb? 6 13:50 /dev/ram10
brw-r----- 1 root disk 1, 11 Feb? 6 13:50 /dev/ram11
brw-r----- 1 root disk 1, 12 Feb? 6 13:50 /dev/ram12
brw-r----- 1 root disk 1, 13 Feb? 6 13:50 /dev/ram13
brw-r----- 1 root disk 1, 14 Feb? 6 13:50 /dev/ram14
brw-r----- 1 root disk 1, 15 Feb? 6 13:50 /dev/ram15
brw-r----- 1 root disk 1,? 2 Feb? 6 13:50 /dev/ram2
brw-r----- 1 root disk 1,? 3 Feb? 6 13:50 /dev/ram3
brw-r----- 1 root disk 1,? 4 Feb? 6 13:50 /dev/ram4
brw-r----- 1 root disk 1,? 5 Feb? 6 13:50 /dev/ram5
brw-r----- 1 root disk 1,? 6 Feb? 6 13:50 /dev/ram6
brw-r----- 1 root disk 1,? 7 Feb? 6 13:50 /dev/ram7
brw-r----- 1 root disk 1,? 8 Feb? 6 13:50 /dev/ram8
brw-r----- 1 root disk 1,? 9 Feb? 6 13:50 /dev/ram9
lrwxrwxrwx 1 root root???? 4 Feb? 6 13:51 /dev/ramdisk -> ram0
2.2)ramdisk的應用實例
2.2.1)格式化/dev/ram0
mkfs -t ext2 /dev/ram0
2.2.2)掛載/dev/ram0 到 /tmp/ramdisk0
mkdir /tmp/ramdisk0
mount /dev/ram0 /tmp/ramdisk0
2.2.3)查看當前掛載的情況
df -h
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/sda1????????????? 19G? 3.1G?? 15G? 18% /
tmpfs???????????????? 252M???? 0? 252M?? 0% /dev/shm
/dev/ram0????????????? 16M?? 24K?? 15M?? 1% /tmp/ramdisk0
二)tmpfs
1)概念:
tmpfs是一種基于內(nèi)存的文件系統(tǒng),也可以使用swap分區(qū)來存儲.tmpfs是一個文件系統(tǒng),并不是塊設備,只要安裝它,就可以使用了.
.tmpfs在存儲時不需要塊設備.
.tmpfs文件系統(tǒng)的數(shù)據(jù)完全存放在文件系統(tǒng)的緩存中.也可以是交換存儲.
.可以在得到高速RAM硬盤優(yōu)勢的同時還享有虛擬內(nèi)存的靈活性.
.tmpfs基本上是所有版本中共享內(nèi)存設備/dev/shm的默認文件系統(tǒng).
.在Linux內(nèi)核中,虛擬內(nèi)存資源由物理內(nèi)存和交換分區(qū)組成,tmpfs向虛擬內(nèi)存子系統(tǒng)請求頁來存儲文件,它同其它請求頁的部分一樣,不知道分配給自己的是物理內(nèi)存還是交換分區(qū)存儲.
2)tmpfs的應用
2.1)/dev/shm
/dev/shm類型是tmpfs,也就是用shm_open,shm_unlink請求共享內(nèi)存時,系統(tǒng)會通過/dev/shm來響應請求,tmpfs本身也用的是文件系統(tǒng)緩存.
2.1.1)/dev/shm默認是物理內(nèi)存的一半.
[root@test1 ~]# free -m
total?????? used?????? free???? shared??? buffers???? cached
Mem:?????????? 503??????? 190??????? 313????????? 0???????? 14??????? 140
-/+ buffers/cache:???????? 35??????? 467
Swap:???????? 1027????????? 0?????? 1027
[root@test1 ~]# df -h
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/sda1????????????? 19G? 3.1G?? 15G? 18% /
tmpfs???????????????? 252M???? 0? 252M?? 0% /dev/shm
2.1.2)更改/dev/shm的大小
現(xiàn)在的/dev/shm是252M
[root@test1 ~]# df -h
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/sda1????????????? 19G? 3.1G?? 15G? 18% /
tmpfs???????????????? 252M???? 0? 252M?? 0% /dev/shm
修改tmpfs掛載項的size為512M
[root@test1 ~]# vi /etc/fstab
LABEL=/???????????????? /?????????????????????? ext3??? defaults??????? 1 1
devpts????????????????? /dev/pts??????????????? devpts? gid=5,mode=620? 0 0
tmpfs?????????????????? /dev/shm??????????????? tmpfs?? defaults,size=512M??????? 0 0
proc??????????????????? /proc?????????????????? proc??? defaults??????? 0 0
sysfs?????????????????? /sys??????????????????? sysfs?? defaults??????? 0 0
LABEL=SWAP-sda2???????? swap??????????????????? swap??? defaults??????? 0 0
/dev/loop0????????????? /mnt/acltest??????????? ext3??? defaults,acl??? 0 0
卸載/dev/shm,再掛載/dev/shm,最后查看/dev/shm的大小
[root@test1 ~]# umount /dev/shm
[root@test1 ~]# mount /dev/shm
[root@test1 ~]# df -h
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/sda1????????????? 19G? 3.1G?? 15G? 18% /
tmpfs???????????????? 512M???? 0? 512M?? 0% /dev/shm
2.1.3)利用/dev/shm來存取文件,并查看cache的利用情況
現(xiàn)在/dev/shm的利用率為0
[root@test1 ~]# df -h
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/sda1????????????? 19G? 3.1G?? 15G? 18% /
tmpfs???????????????? 512M???? 0? 512M?? 0% /dev/shm
內(nèi)存中文件系統(tǒng)緩存的cached為141M
[root@test1 ~]# free -m
total?????? used?????? free???? shared??? buffers???? cached
Mem:?????????? 503??????? 190??????? 312????????? 0???????? 14??????? 141
-/+ buffers/cache:???????? 35??????? 468
Swap:???????? 1027????????? 0?????? 1027
在/dev/shm/下新建一個文件test,大小為10M
[root@test1 ~]# dd if=/dev/zero f=/dev/shm/test bs=10M count=1
1+0 records in
1+0 records out
10485760 bytes (10 MB) copied, 0.0511599 seconds, 205 MB/s
現(xiàn)在的cached已經(jīng)是151M
[root@test1 ~]# free -m
total?????? used?????? free???? shared??? buffers???? cached
Mem:?????????? 503??????? 200??????? 302????????? 0???????? 14??????? 151
-/+ buffers/cache:???????? 35??????? 468
Swap:???????? 1027????????? 0?????? 1027
/dev/shm已經(jīng)被占用了10M
[root@test1 ~]# df -h
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/sda1????????????? 19G? 3.1G?? 15G? 18% /
tmpfs???????????????? 512M?? 11M? 502M?? 2% /dev/shm
2.2)利用tmpfs來提高磁盤的讀寫
新建/mnt/disktest目錄,并通過tmpfs掛載到/mnt/disktest目錄.
mkdir /mnt/disktest
[root@test1 ~]# mount tmpfs /mnt/disktest -t tmpfs -o size=128M
[root@test1 ~]# df -h
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/sda1????????????? 19G? 3.1G?? 15G? 18% /
tmpfs???????????????? 512M?? 11M? 502M?? 2% /dev/shm
tmpfs???????????????? 128M???? 0? 128M?? 0% /mnt/disktest
在/mnt/disktest下新建100MB的文件,共消耗了0.317秒,傳輸速度為315 MB/s
[root@test1 ~]# time dd if=/dev/zero f=/mnt/disktest/testfile bs=1MB count=100
100+0 records in
100+0 records out
100000000 bytes (100 MB) copied, 0.317704 seconds, 315 MB/s
real??? 0m0.346s
user??? 0m0.000s
sys???? 0m0.343s
在/tmp下新建100MB的文件,共消耗了0.815秒,傳輸速度為128MB/s
[root@test1 ~]# time dd if=/dev/zero f=/tmp/testfile bs=1MB count=100
100+0 records in
100+0 records out
100000000 bytes (100 MB) copied, 0.815914 seconds, 123 MB/s
real??? 0m0.865s
user??? 0m0.004s
sys???? 0m0.687s
以上的測試說明了tmpfs能明顯的提高速度.
2.3)釋放tmpfs的測試
查看占用cached的文件
[root@test1 ~]# ls -lh /mnt/disktest/testfile
-rw-r--r-- 1 root root 96M Feb 22 12:05 /mnt/disktest/testfile
[root@test1 ~]# df -h
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/sda1????????????? 19G? 3.2G?? 15G? 18% /
tmpfs???????????????? 512M???? 0? 512M?? 0% /dev/shm
tmpfs???????????????? 128M?? 96M?? 33M? 75% /mnt/disktest
刪除/mnt/disktest/testfile,查看是否釋放掉cached
沒刪除之前:
[root@test1 ~]# free
total?????? used?????? free???? shared??? buffers???? cached
Mem:??????? 515600???? 393448???? 122152????????? 0????? 15528???? 339768
-/+ buffers/cache:????? 38152???? 477448
Swap:????? 1052248????????? 0??? 1052248
刪除文件testfile:
[root@test1 ~]# rm /mnt/disktest/testfile
rm: remove regular file `/mnt/disktest/testfile'? y
查看是否釋放掉了cached:
[root@test1 ~]# free
total?????? used?????? free???? shared??? buffers???? cached
Mem:??????? 515600???? 295736???? 219864????????? 0????? 15536???? 242108
-/+ buffers/cache:????? 38092???? 477508
Swap:????? 1052248????????? 0??? 1052248
這里cached變成了242108KB,之前是339768KB,說明cached被釋放掉了.
轉(zhuǎn)載于:https://www.cnblogs.com/zeping/archive/2011/03/05/1971717.html
總結(jié)
以上是生活随笔為你收集整理的linux ramdisk与tmpfs的深入分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 呼和浩特市妇幼保健院药流加清宫多少钱
- 下一篇: [转载]Oracle 11g新特征之形式