一)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被释放掉了.