linux中关于tmpfs文件系统资料的整理与分析

来源:互联网 发布:折扣怎么算法 编辑:程序博客网 时间:2024/04/25 14:05

Tmpfs介绍:

tmpfs是一种虚拟内存文件系统,而不是块设备。是基于内存的文件系统,创建时不需要使用mkfs等初始化,只要安装它就可以使用了。

它最大的特点就是它的存储空间在VM(virtual memory),VM是由linux内核里面的vm子系统管理的。linux下面VM的大小由RM(Real Memory)和swap组成,RM的大小就是物理内存的大小,而Swap的大小是由自己决定的。

Swap是通过硬盘虚拟出来的内存空间,因此它的读写速度相对RM(Real Memory)要慢许多,当一个进程申请一定数量的内存时,如内核的vm子系统发现没有足够的RM时,就会把RM里面的一些不常用的数据交换到Swap里面,如果需要重新使用这些数据再把它们从Swap交换到RM里面。如果有足够大的物理内存,可以不划分Swap分区。

Linux内核的虚拟内存(VM)资源同时来源于RAM(物理内存)和交换分区(swap)。内核中的VM子系统负责在后台管理这些资源,通常是透明地将RAM页移动到交换分区或从交换分区到RAM页。tmpfs最大的存储空间可达(Thesize of RM + The size of Swap)。tmpfs文件系统需要VM子系统的页面来存储文件。但自己并不知道这些页面是在交换分区还是在RAM中;做这种决定是内核中的VM子系统的工作。tmpfs文件系统所知道的就是它正在使用某种形式的虚拟内存。tmpfs默认的大小是RM的一半,假如你的物理内存是1024M,那么tmpfs默认的大小就是512M。一般情况下是配置小于物理内存大小。

不同于大多数标准的文件系统,如ext3ReiserFS和其它一些系统,tmpfs并不是存在于一个底层块设备上面。因为tmpfs是直接建立在VM之上的,您用一个简单的mount命令就可以创建tmpfs文件系统了。

      # mount -t tmpfs -o size=64M tmpfs /dev/shm

tmpfs配置的大小并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是不会被系统回收重新划分的。当删除tmpfs中文件,tmpfs 文件系统驱动程序会动态地减小文件系统并释放 VM 资源。

tmpfs的用途:

例如:Oracle 中的AutomaticMemory Management特性就使用了/dev/shm。

LINUX中可以把一些程序的临时文件放置在tmpfs中,利用tmpfs比硬盘速度快的特点提升系统性能。

调整tmpfs大小大致有以下三种方法:

1.直接挂载到需要的目录--比如系统的临时目录-可以根据实际需要挂载某个程序的临时文件的目录

[root@bys3 ~]# mount -t tmpfs -o size=20m tmpfs /tmp

[root@bys3 ~]# df -h

Filesystem            Size Used Avail Use% Mounted on

/dev/sda2             16G   10G  4.7G 69% /

/dev/sda1             99M   21M   74M 22% /boot

tmpfs                502M     0  502M  0% /dev/shm

tmpfs                 20M     0   20M  0% /tmp

由于没有挂载之前/tmp目录下的文件也许正在被使用,因此挂载之后系统也许有的程序不能正常工作。可以写入/etc/fstab,这样重启后也有效。

 

2./etc/fstab文件来修改/dev/shm的容量(增加size=100M选项即可),修改后,重新挂载即可:

[root@bys3 ~]# cat /etc/fstab

LABEL=/                 /                       ext3    defaults        1 1

LABEL=/boot            /boot                   ext3    defaults        1 2

tmpfs                  /dev/shm                tmpfs   defaults,size=600M        0 0

tmpfs                  /tmp                tmpfs   defaults,size=25M        0 0

devpts                 /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                  /sys                    sysfs   defaults        0 0

proc                   /proc                   proc    defaults        0 0

LABEL=SWAP-sda3        swap                    swap    defaults        0 0

/dev/sda5              swap                    swap    defaults        0 0

[root@bys3 ~]# mount -a    --测试/etc/fstab无错误,重启OS系统

[oracle@bys3 ~]$ df -h    --重启后的信息如下,tmpfs文件系统的对应条目已经改变为配置的

Filesystem           Size  Used Avail Use% Mounted on

/dev/sda2              16G  10G  4.7G  69% /

/dev/sda1             99M   21M   74M 22% /boot

tmpfs                600M     0  600M  0% /dev/shm

tmpfs                 25M     0   25M  0% /tmp

 

3./dev/shm建一个tmp目前,并与/tmp绑定。  --这方法有点烦琐,不如方法1方便快捷。

[root@bys3 ~]# mkdir /dev/shm/tmp

[root@bys3 ~]# chmod 1777 /dev/shm/tmp

[root@bys3 ~]# mount --bind /dev/shm/tmp /tmp   -注意mount --bind  这里bind前是两个-

[root@bys3 ~]# ls -ld /tmp

drwxrwxrwt 2 root root 40 Dec 8 12:15 /tmp

[root@bys3 ~]# df -h

Filesystem           Size  Used Avail Use% Mounted on

/dev/sda2             16G   10G  4.7G 69% /

/dev/sda1             99M   21M   74M 22% /boot

tmpfs                600M     0  600M  0% /dev/shm

tmpfs                600M     0  600M  0% /tmp             ----可以看到/tmp使用到了 /dev/shm的空间。

 

POSIX共享内存是基于tmpfs来实现的。实际上,更进一步,不仅PSM(POSIX shared memory),而且SSM(System Vshared memory)在内核也是基于tmpfs实现的。

从这里可以看到tmpfs主要有两个作用:

(1)用于SYSV共享内存,还有匿名内存映射;这部分由内核管理,用户不可见;

(2)用于POSIX共享内存,由用户负责mount,而且一般mount到/dev/shm;依赖于CONFIG_TMPFS;


0 0
原创粉丝点击