赞
踩
(1)什么是Buffer
buffers: Memory used by kernel buffers (Buffers in /proc/meminfo)
内核缓冲区的内存,是/proc/meminfo 中的 Buffers 值
(2)什么是Cache
cache: Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)
页缓存和 Slab 用到的内存,是 /proc/meminfo 中的 Cached 与 Slab之和
(3)二者的区别
#读它的时候,它会提供无限的空字符; 另一个常见用法是产生一个特定大小的空白文件
/dev/zero
#随机数设备,提供不间断的随机字节流, 当系统中断过多时,/dev/random设备会 挂起 ,产生数据速度较慢,但随机性好
/dev/random
#随机数设备,提供不间断的随机字节流, 不依赖系统中断,数据产生速度快,但随机性较低
/dev/urandom
#看作"黑洞",它等价于一个只写文件,所有写入它的内容都会永远丢失
/dev/null
#用命令来释放缓存, 建议先执行sync命令, 将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、延迟的块 I/O 等
#1:释放页缓存
echo 1 > /proc/sys/vm/drop_caches
#2:释放dentries和inodes,即清除回收slab分配器中的对象
echo 2 > /proc/sys/vm/drop_caches
# 3:释放所有缓存
echo 3 > /proc/sys/vm/drop_caches
(1)写入文件案例
vmstat 2
free -h -w -s 5
dd if=/dev/urandom of=/tmp/test.txt bs=1M count=500
(2)写入磁盘案例
# 首先清理缓存
echo 3 > /proc/sys/vm/drop_caches
dd if=/dev/urandom of=/dev/sda bs=1M count=2048
可以看到,虽然同是写数据,写磁盘和写文件的想象很不一样,写磁盘时即bo 大于 0时,Buffer和 Cache都在增长,但显然 Buffer的增长快得多。写磁盘用到了大量的 Buffer.我们发现,写文件时会用到Cache缓存数据,而写磁盘则会用到Buffer 来缓存数据。所以,Cache即缓存读文件也缓存写文件。
echo 3 > /proc/sys/vm/drop_caches
(1)文件读取案例
dd if=/tmp/test.txt of=/dev/null
(1)磁盘读取案例
dd if=/dev/sda of=/dev/null
由此我们得知:
我们都知道,文件是通过文件系统负责和磁盘交互,磁盘是块设备文件,直接读写磁盘或者分区,就会跳过文件系统,产生裸I/O,因此 文件和磁盘的缓存 的管理非常不同。
echo 3 > /proc/sys/vm/drop_caches
(1)文件写入读取案例
# 先向文件中写入500M
dd if=/dev/urandom of=/tmp/test.txt bs=1M count=500
# 然后再将其读取出来
dd if=/tmp/test.txt of=/dev/null
(2)磁盘写入读取案例
# 先读取1G的数据到buffer
dd if=/dev/sda1 of=/dev/null bs=1M count=1024
# 然后在读取一遍,看看有没有命中缓存
dd if=/dev/sda1 of=/dev/null bs=1M count=1024
至此,整篇对Buffer和Cache的作用以及演示就到这里了,由上面的案例我们也最终确认了开头的结论:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。