tmpfs内存临时文件系统

虚拟内核文件系统(VirtualKernel File Systems),是指那些是由内核产生但不存在于硬盘上(存在于内存中)的文件系统。例如

1、proc

proc文件系统为操作系统本身和应用程序之间的通信提供了一个安全的接口。通过它里面的一些文件,可以获取系统状态信息并修改某些系统的配置信息。当我们在内核中添加了新功能或设备驱动时,经常需要得到一些系统状态的信息,一般这样的功能需要经过一些像ioctl()这样的系统调用来完成。

 

2、devfs

我们知道,/dev目录下的每一个文件都对应的是一个设备,devfs也是挂载于/dev目录下。在2.6内核以前使用devfs来提供一种类似于文件的方法来管理位于/dev目录下的所有设备。但是devfs文件系统有一些缺点,有时一个设备映射的设备文件可能不同。例如,我的U盘可能对应sda,也可能对应sdb,没有足够的主/辅设备号,当设备过多的时候,显然这会成为一个问题。

 

3、sysfs

为了克服devfs的上述问题,2.6内核引入了一个新的文件系统sysfs,它挂载于/sys目录下。sysfs文件系统把连接在系统上的设备和总线组织成为一个分级的文件,用户空间的程序同样可以利用这些信息,以实现和内核的交互。sysfs文件系统是当前系统上实际设备树的一个直观反映,它是通过kobject子系统来建立这个信息的,当一个kobject被创建的时候,对应的文件和目录也就被创建了。

 

4、tmpfs

tmpfs(temporary filesystem)是Linux特有的文件系统,标准挂载点是/dev/shm,默认大小是实际内存的一半,如下图所示。当然,用户也可以将tmpfs挂载在其他地方。tmpfs可以使用物理内存,也可以使用swap交换空间。

tmpfs内存临时文件系统_第1张图片

tmpfs有些像虚拟磁盘(ramdisk),但ramdisk是一个块设备,而且需要一个mkfs之类的命令格式化后才能使用。而tmpfs是一个独立的文件系统,不是块设备,只要挂载,就可以立即使用。下面是tmpfs最主要的几个特点:

Ø  临时性:由于tmpfs是构建在内存中的,所以存放在tmpfs中的所有数据在卸载或断电后都会丢失;

Ø  快速读写能力:内存的访问速度要远快于磁盘I/O操作,即使使用了swap,性能仍然非常卓越;

Ø  动态收缩:tmpfs一开始使用很小的空间,但随着文件的复制和创建,tmpfs文件系统会分配更多的内存,并按照需求动态地增加文件系统的空间。而且,当tmpfs中的文件被删除时,tmpfs文件系统会动态地减小文件并释放内存资源。

 

tmpfs对于文件缓存和临时数据来说,是一种较理想的做法。现在假设你想为大流量网站在/var/www/www.example.com/cache目录下创建文件缓存。

首先,创建缓存目录:

mkdir -p /var/www/www.example.cache
如有必要可以更改目录的属主,例如:
chownproxy:proxy /var/www/www.example.com/cache

现在我们把这个目录加载到内存设备中(使用100MB大小,并且权限为755):
mount -ttmpfs -o size=100M,mode=0755 tmpfs /var/www/www.example.com/cache

如果想调整该缓存目录使用的内存空间为200MB,可以使用下面的命令:

mount -o remount,size=200M /var/www/www.example.com/cache

如果还想在系统启动时自动缓存这个目录,编辑/etc/fstab并添加下面内容

tmpfs /var/www/www.example.com/cache tmpfssize=100M,mode=0755 0 0


测试
通过对比普通的磁盘文件和tmpfs文件来比较其读写性能.
/mnt/tmp为普通的文件目录,/mnt/tmpfs为tmpfs文件系统目录,/dev/shm也为tmpfs文件系统.
写普通文件到普通文件,速率:15.3 MB/秒
/*< CDATA style>
root@lijinbang-desktop:/mnt/tmpfs# time dd if=/home/lijinbang/A/SrData0722/722_1mstrip11.0005 of=/mnt/tmp/zero bs=1M count=128
记录了 128+0 的读入
记录了 128+0 的写出
134217728 bytes (134 MB) copied,8.7819 秒,15.3 MB/秒
real 0m8.832s
user 0m0.008s
sys 0m1.096s
写普通文件到tmpfs文件,速率:32.7 MB/秒
/*< CDATA style>
root@lijinbang-desktop:/mnt/tmpfs# time dd if=/home/lijinbang/A/SrData0722/722_1mstrip11.0014 of=/mnt/tmpfs/zero bs=1M count=128
dd: 正在写入 “/mnt/tmpfs/zero”: 设备上没有剩余空间
记录了 128+0 的读入
记录了 127+0 的写出
134082560 bytes (134 MB) copied,4.10379 秒,32.7 MB/秒
real 0m4.134s
user 0m0.004s
sys 0m0.812s
写tmpfs文件到普通文件,速率:32.2 MB/秒
/*< CDATA style>
root@lijinbang-desktop:/mnt/tmpfs# time dd if=/mnt/tmpfs/zero of=/mnt/tmp/zero bs=1M count=128
记录了 127+1 的读入
记录了 127+1 的写出
134082560 bytes (134 MB) copied,4.16382 秒,32.2 MB/秒
real 0m4.170s
user 0m0.004s
sys 0m1.036s
写tmpfs文件到tmpfs文件,速率:64.2 MB/秒
/*< CDATA style>
root@lijinbang-desktop:/mnt/tmpfs# time dd if=/mnt/tmpfs/zero of=/dev/shm/zero bs=1M count=128
记录了 127+1 的读入
记录了 127+1 的写出
134082560 bytes (134 MB) copied,2.08752 秒,64.2 MB/秒
real 0m2.220s
user 0m0.004s
sys 0m0.732s

你可能感兴趣的:(tmpfs)