当前位置: 代码迷 >> 综合 >> ramdisk tmpfs
  详细解决方案

ramdisk tmpfs

热度:79   发布时间:2024-01-06 07:56:51.0

http://www.lupaworld.com/home-space-do-blog-uid-56821-id-139835.html

一)ramdisk

1)概念

ramdisk就是指使用一部分内存空间来模拟硬盘分区,也就是说ramdisk是一个块设备,要用mkfs格式化,才能真正使用它.

.ramdisk在内核2.0/2.2版本就已经支持.
.ramdisk设备是它不允许重新声明它的内存空间,所以ramdisk块通常会一直占用空间的内存直到系统重启.
.ramdisk的一个缺点是在它上面创建一个文件系统,它同时会消耗缓冲区高速缓存和文件系统缓存,理论上,它可以消耗一个磁盘文件的两倍随机内存.
.ramdisk的另一个缺点是它大小固定,之后不能改变
.现在大多数需要RAM临时存储的应用程序会使用tmpfs文件系统而不是ramdisk设备.


2)ramdisk的应用

2.1)查看当前系统的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是一种基于内存的文件系统,也可以使用swap分区来存储.tmpfs是一个文件系统,并不是块设备,只要安装它,就可以使用了.

.tmpfs在存储时不需要块设备.
.tmpfs文件系统的数据完全存放在文件系统的缓存中.也可以是交换存储.
.可以在得到高速RAM硬盘优势的同时还享有虚拟内存的灵活性.
.tmpfs基本上是所有版本中共享内存设备/dev/shm的默认文件系统.
.在Linux内核中,虚拟内存资源由物理内存和交换分区组成,tmpfs向虚拟内存子系统请求页来存储文件,它同其它请求页的部分一样,不知道分配给自己的是物理内存还是交换分区存储.


2)tmpfs的应用

2.1)/dev/shm

/dev/shm类型是tmpfs,也就是用shm_open,shm_unlink请求共享内存时,系统会通过/dev/shm来响应请求,tmpfs本身也用的是文件系统缓存.

2.1.1)/dev/shm默认是物理内存的一半.

[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的大小

现在的/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的利用情况

现在/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

内存中文件系统缓存的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

现在的cached已经是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已经被占用了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被释放掉了.