光谷软件园 网站建设,电脑上怎么安装wordpress,工商局网站如何做网登,中国建设银行十堰分行网站Linux中Buffer和Cache的区别
free命令中会有一项buff/cache, 通过man free可以看到这里的关于buff/cache的介绍 buff/cache包含两部分
buffers:内核缓存区用到的内存#xff0c;对应/proc/meminfo中Buffers的值
cache:内核页缓存和Slab用到的内存#xff0c;对应/proc/mem…Linux中Buffer和Cache的区别
free命令中会有一项buff/cache, 通过man free可以看到这里的关于buff/cache的介绍 buff/cache包含两部分
buffers:内核缓存区用到的内存对应/proc/meminfo中Buffers的值
cache:内核页缓存和Slab用到的内存对应/proc/meminfo中Cached与SReclaimable之和。
执行man proc可以看到关于/proc/meminfo的说明。 Buffers是对原始磁盘块的临时缓存通常不会特别大20M左右。
Cached是从磁盘读取文件的页缓存
SReclaimable是Slab的一部分。 Slab包括两部分其中的可回收部分用SReclaimable记录而不可回收的部分用SUnreclaim表示。 案例:
基于Ubuntu 20.04.1 LTS
执行apt install sysstat,安装sysstat包。
写入场景
执行echo 3 /proc/sys/vm/drop_caches清空系统缓存。 写入/proc/sys/vm/drop_caches表示清理文件页目录项Inodes等各种缓存。 执行vmstat 1每1秒输出1组数据。
buff 和 cache 就是我们前面看到的 Buffers 和 Cache单位是 KB。
bi 和 bo 则分别表示块设备读取和写入的大小单位为块 / 秒。因为 Linux 中块的大小是 1KB所以这个单位也就等价于 KB/s。
1.1、将数据写入文件测试
新开一个shell窗口执行 dd if/dev/urandom of/tmp/file bs1M count500,通过读取随机设备生成一个 500MB 大小的文件。
回到vmstat的窗口会看到在 dd 命令运行时 Cache 在不停地增长而 Buffer 基本保持不变。 可以看到cache刚开始增长块设备 I/O 很少。而过一段时间后才会出现大量的块设备写。 由于dd命令写出512000KB,所以bo的大小至少会等于512000KB有可能会大于这个值这是由于系统中其他进程也会写文件比如第一行的bo的380。 多次执行的话就会看到dd命令对应的bo的值就是512000KB。 这里也可以看到cache先增长后面才会有bo增长。这是由于先写入cache缓存, 此时不会和磁盘进行交互, 当需要将缓存数据刷入磁盘时, 才会发生块写入此时bo值会升高 1.2、将数据写入磁盘测试
echo 3 /proc/sys/vm/drop_caches
dd if/dev/urandom of/dev/sdb1 bs1M count2048 #注意:这个是直接写到磁盘上会导致历史数据全部丢失。建议找一个空盘测试再次观察vmstat的记录可以看到buff 和 cache 都在增长但显然 buff 的增长快得多。
这里的结果和man命令的说明是一致的。写文件时会用到 Cache 缓存数据而写磁盘则会用到 Buffer 来缓存数据。
读取场景
刚才是文件和磁盘读取时候buff和cache的变化现在我们再看看写操作的情况。
2.1、从文件中读取数据测试
执行下面的命令。
# 首先清理缓存
echo 3 /proc/sys/vm/drop_caches
# 运行dd命令读取文件数据
dd if/tmp/file of/dev/null再次观察vmstat的记录 就可以看到这次还是cache有明显的增长也就是我们读取内存的大小(512000KB)不过这次由于我们是读取所以bi有明显的增长也会是512000KB。
上面是读取文件我们再看看读取磁盘。
2.2、从磁盘中读取数据测试
执行下面给的命令
# 首先清理缓存
echo 3 /proc/sys/vm/drop_caches
# 运行dd命令读取文件
dd if/dev/sda1 of/dev/null bs1M count1024可以看到buff和bi有明显的增长。也就是我们读取内容的大小1024000KB。
结论
从上面也可以看到
Buffer 如果没有经过文件系统直接从磁盘读取、写入数据就会体现到Buffer中。既可以用作“将要写入磁盘数据的缓存”也可以用作“从磁盘读取数据的缓存”。
Cache 如果经过文件系统从磁盘读取、写入数据就会体现到Cache中。既可以用作“从文件读取数据的页缓存”也可以用作“写文件的页缓存”。