利用Linux Ramfs处理临时文件

在系统中总会有各种各样的临时文件的读写需求,如果在linux下完全可以使用ramfs来提高读写速度,先做个简单对比。
以下测试都在同台机器,因为就简单看看没必要贴参数。

非ramfs的目录

写:8.1m/s,94 seconds

1
2
3
4
5
6
7
8
time dd if=/dev/zero of=test.bin bs=8k count=100000 oflag=direct
100000+0 records in
100000+0 records out
819200000 bytes (819 MB) copied, 94.2261 s, 8.7 MB/s
real 1m34.231s
user 0m0.079s
sys 0m6.650s

读:89.9m/s,9 seconds

1
2
3
4
dd if=./test.bin bs=8k count=100000 of=/dev/null
100000+0 records in
100000+0 records out
819200000 bytes (819 MB) copied, 9.11253 s, 89.9 MB/s

下面先来看看ramfs在详细说下。

1
2
3
mkdir ramfstest
mount -t ramfs none ramfstest/
cat /proc/mounts

  • 新建个目录
  • 以ramfs类型挂载目录
  • 检查下

ramfs目录

写:431m/s,1.9 seconds

1
2
3
4
5
6
7
8
time dd if=/dev/zero of=testram.bin bs=8k count=100000
100000+0 records in
100000+0 records out
819200000 bytes (819 MB) copied, 1.89941 s, 431 MB/s
real 0m1.901s
user 0m0.014s
sys 0m1.885s

读:2.6g/s,300 milliseconds

1
2
3
4
dd if=./testram.bin bs=8k count=100000 of=/dev/null
100000+0 records in
100000+0 records out
819200000 bytes (819 MB) copied, 0.319219 s, 2.6 GB/s

可以看到差别还是巨大的,所以当有些临时文件的读写、临时缓冲区之类的需求完全可以使用ramfs替代物理的磁盘,为什么说是 临时,因为ramfs还有个显著的好处就是当unmount这个目录的时候,目录中的所有内容都会自动消失。

其他相关

linux下内存文件系统有三种Ramdisk、ramfs、tmpfs。

  • Ramdisk 对外表现就像一块物理磁盘可格式化,容量大小固定,可以所以unmount,只要不重启linux数据都在。
  • ramfs 使用内存作为磁盘,默认大小为内存的一半,可改变,不使用交换分区,可以使用虚拟内存。
  • tmpfs 使用内存作为磁盘,大小创建时固定,可以使用交换分区,无法使用虚拟内存.