内存和CPU的关系之紧密,总所周知,我们先来看一下系统的内存使用情况

比如一个free获取到数据

图片

这里面说明了Mem和Swap的使用情况

总内存 已用内存 缓存 可用内存

缓存指标中包含了 buffer和Cache

对应的Buffer和Cache的含义是什么,就是这次的重点

首先说,遇到这类不懂的指标,如何去做呢?首先使用的是man命令,可以尝试去查看对应的指令

对应的man free文档中,给出了对应的解释

buffers

Memory used by kernel buffers (Buffers in /proc/meminfo)

cache  Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)

buff/cache

Sum of buffers and cache

Buffer是内存缓冲区的内存,对应的是 proc/meminfo中的Buffers值

Cache是内核页缓存和Slab用到的内存,对应的是 /proc/meminfo的Cache和SReclaimable之和

对应的proc系统中的值的含义,仍没有搞清楚

接下来我们就i查看proc系统中,对应的系统文档

Buffers %lu

Relatively temporary storage for raw disk blocks that shouldn’t get tremendously large (20MB or so).

Cached %lu

In-memory cache for files read from the disk (the page cache).  Doesn’t include SwapCached.

SReclaimable %lu (since Linux 2.6.19)

Part of Slab, that might be reclaimed, such as caches.

SUnreclaim %lu (since Linux 2.6.19)

Part of Slab, that cannot be reclaimed on memory pressure.

在其中

Buffers是原始磁盘款的存储,缓存磁盘数据的,将多次小的写请求合并为一次大的写请求

Cached则是从磁盘中读取文件的页缓存,缓存从文件读取的数据,下次访问文件数据的时候,直接走缓存

那么利用对应的讲解,我们可以考虑,难道Buffer只负责写,Cached只负责读吗?

我们做一些对应的情况讲解

场景1:

我们在第一个终端下,运行vmstat命令

在vmstat中

图片

其中,我们有buffer cache bi bo四个指令

前面buffer和cache的两个指标,单位是KB

bi bo是块设备读取和写入的大小,为块/秒 即为kb/s

我们利用dd命令,生成一个500MB的文件

然后看vmstat命令的变化

可以看到

Cache在逐渐增长,而Buffer则是不变

对应的buffer则不变

IO情况下,Cache刚开始增长时候,

bi很少,但是一段时间后,会出现大量的bi增长,哪怕dd命令结束,bi还是会增长

那么是否说明Cache也涉及了对应的磁盘写?

先按下不表,我们尝试,直接写入磁盘呢?

dd if=/dev/urandom of=/dev/sdb1 bs=1M count=2048

我们查看对应的内存和IO变化情况

procs ———–memory———- —swap– —–io—- -system– ——cpu—–

r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

1  0      0 7584780 153592  97436    0    0   684     0   31  423  1 48 50  2  0

1  0      0 7418580 315384 101668    0    0     0     0   32  144  0 50 50  0  0

1  0      0 7253664 475844 106208    0    0     0     0   20  137  0 50 50  0  0

1  0      0 7093352 631800 110520    0    0     0     0   23  223  0 50 50  0  0

1  1      0 6930056 790520 114980    0    0     0 12804   23  168  0 50 42  9  0

1  0      0 6757204 949240 119396    0    0     0 183804   24  191  0 53 26 21  0

1  1      0 6591516 1107960 123840    0    0     0 77316   22  232  0 52 16 33  0

buff和cache都有增长,但是Buff更多,说明写磁盘的确涉及了Cache和Buffer

然后是尝试读

我们从tmp/file中读取数据写入 空设备

dd if=/tmp/file of=/dev/null

然后查看内存和IO的变化情况

vmstat的输出汇总,读取文件时候,Buffer是保持不变的,Cache则在不断的增长,Cache是对文件读的页缓存是没错的

对应的磁盘直接读,则是如下

dd if=/dev/sda1 of=/dev/null bs=1M count=1024

然后观察内存和IO的变化情况

对应的其中,Buffer和Cache都在增加

最终说明了Buffer和Cache中,Buffer可以作为写入磁盘数据的缓存,和磁盘读取数据的缓存

Cache可以作为文件读取数据的页缓存和写文件的页缓存

从文件和磁盘两个角度来进行了读写优化

发表评论

邮箱地址不会被公开。 必填项已用*标注