Linux的内存机制:cache,buffer,swap(物理内存充足的情况下,swap区使用量大于0?!)

最近在做服务器相关的测试,需要从这些命令的输出查看某协议传输数据过程中对内存的使用情况来寻找其瓶颈,发现一个问题:在物理内存充足的情况下,使用vmstat 命令查看内存使用情况,swpd 这个参数竟然是大于0的。看其他的博文里说,出现这个情况那就是物理内存出现瓶颈,系统开始使用交换区内存。这就跟我的情况矛盾了,于是打算探个究竟。常见的查看内存的命令无非是这几个,top,free,vmstat 等。。先搞清楚他们的含义吧~

首先搞清楚free出的这些参数的关系:

 总=used+free

空闲=buff+cache+free

cache和buffer虽然写在一起,但是有不同的含义:

cache是告诉缓冲寄存器,处于CPU和主存之间,容量较小但是运行速度较快。其存在就是为了解决CPU运算速度和主存的读取速度不匹配的问题,当CPU从内存中读取数据的时候是要等待一定的时间周期,那么如果将一部分cpu最近使用较频繁的数据进行保存,将它们放到处理速度较快的cache里,就会减少CPU读取数据的时间,因此提升了系统效率。

内存的工作方式就要复杂得多:

(1)找到数据的指针。(指针可能存放在寄存器内,所以这一步就已经包括寄存器的全部工作了。)

(2)将指针送往 MMU ,由MMU将虚拟的内存地址翻译成实际的物理地址。

(3)将物理地址送往内存控制器 ,由内存控制器找出该地址在哪一根内存插槽上。

(4)确定数据在哪一个内存块上,从该块读取数据。

(5)数据先送回内存控制器,再送回CPU,然后开始使用。

buffer与cache不同,它存放的是Linux系统最近使用的文件目录及其属性。

swap成为内存交换空间,作用:在应付物理内存不足时存储造成的内存扩展记录的功能。当物理内存使用足够的时候,系统是不

占用swap区的,当物理内存不够用了,系统就会将部分不常用的文件存至swap区,以保证系统运行。

你可能感兴趣的:(linux基础知识)