linux下buffer和cache的异同及free中shared的含义

1.buffer和cache的异同

linux下使用free -m 时

 

 

 可以看到buffers和cached 这二者经常被混为一谈。

相同点:二者具备改善系统 I/O 吞吐量的能力

cache改善系统性能主要原因是数据访问的局部性:一般情况下应用程序在一段时间内操作的数据集的某个有限的部分,通常是很小的一部分。而内存使用相较于硬盘等外部存储更加昂贵,放置于距离CPU较近的位置。

cached(缓存):读取过的数据保存在高速缓存中,重新读取时如果在缓存中有需要的数据就不用去读取硬盘了,若没有找到就读硬盘。其中的数据会根据读取频率进行组织,把频繁读取的内容放在最容易找到的位置,把使用不频繁的内容不断的往后排,直达从中删除。缓存实际并不是缓冲文件,而是缓冲块的,块是磁盘I/O操作的最小单位(在Linux中,他们通常是1KB)。这样,目录、超级块、其他文件系统的薄记数据以及非文件系统的磁盘数据都可以被缓冲了。

buffers(缓冲):把分散的读写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的 MP3,但U盘的灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。

 两者都是RAM中的数据。简单来说,buffer是即将要被写入磁盘或从硬盘读取的数据集中化,减少实际需要的IO次数,而cache是被从磁盘中读出来的。 

 

不同点:能够清空时间不同

Buffer用于临时存储IO设备数据,不分读写。在Buffer中的数据必须进行下一步处理后才能清空回收内存空间。例如用于读取的Buffer,需要后续指令对读取到buffer中的数据进行处理,在处理完成前清空内存会出现读失败;用于写入的Buffer,则需要写入到IO设备,在写入完成前清空内存会出现数据丢失。严格意义上的Buffer,在后续处理完成后则应当回收内存。
 
Cache则是把暂时不用的数据存储在内存中,以加快下一次对这些数据的访问。理论上来说,Cache是随时可以清空的,代价是下一次访问相同数据的时候性能下降。但实际上Cache机制中往往存在某种形式的Buffer,并非所有用于Cache的内存都可以随时清空回收。

2.free 中shared的含义

 

 

 先看linux 官方给出的解释

 

指的是被tmpfs使用的内存;再看下tmpfs是个什么系统

  • 首先tmpfs是temporary filesystem的缩写 望文生义 就是"暂时的文件系统的意思"
  • 为什么说是暂时的呢 因为它是使用VM内存空间作为存储的系统,系统掉电之后其上存储的数据也会丢失。

 

VM介绍

1.linux下面VM(virtual memory)的大小由RM(Real Memory)和swap组成

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

 

通过上面的说明,你该知道tmpfs使用的存储空间VM是什么了吧? 前面说过VM由RM+Swap两部分组成,因此tmpfs最大的存储空间可达(The size of RM + The size of Swap)。但是对于tmpfs本身而言,它并不知道自己使用的空间是RM还是Swap,这一切都是由内核的vm子系统管理的。

 

 

怎样使用tmpfs呢?

 


 

#mount -t tmpfs -o size=20m tmpfs /mnt/tmp

 

上面这条命令分配了上限为20m的VM到/mnt/tmp目录下,用df命令查看一下,确实/mnt/tmp挂载点显示的大小是20m,但是tmpfs一个优点就是它的大小是随着实际存储的容量而变化的,换句话说,假如/mnt/tmp目录下什么也没有,tmpfs并不占用VM。上面的参数20m只是告诉内核这个挂载点最大可用的VM为20m,如果不加上这个参数,tmpfs默认的大小是RM的一半,假如你的物理内存是128M,那么tmpfs默认的大小就是64M,

 


tmpfs"缺点"

 


 

当然有,由于它的数据是在VM里面,因此断电或者你卸载它之后,数据就会立即丢失,这也许就是它叫tmpfs的原故。不过这其实不能说是缺点。那tmpfs到底有什么用呢?

 


tmpfs优点及用途

 


 

由于tmpfs使用的是VM,因此它比硬盘的速度肯定要快

 

因此我们可以利用这个优点使用它来提升机器的性能。

 


#mount -t tmpfs -o size=2m tmpfs /tmp

 

上面这条命令分配了最大2m的VM给/tmp。 

由于/tmp目录是放临时文件的地方,因此我们可以使用tmpfs来加快速度,由于没有挂载之前/tmp目录下的文件也许正在被使用,因此挂载之后系统也许有的程序不能正常工作。没有关系,只要在/etc/fstab里面加上下面的语句

 

tmpfs /tmp tmpfs size=2m 0 0


 

部分转载于tmpfs详解 - fire909090 - 博客园 (cnblogs.com)

 

posted @ 2021-12-19 19:52  zed99  阅读(1610)  评论(0编辑  收藏  举报