【操作系统】操作系统的Buffer和Cache

简介: 【操作系统】操作系统的Buffer和Cache

1.Buffer和Cache的区别

(1)什么是Buffer

  • Buffer指Linux内存的 Buffer cache(缓冲区)。
  • Buffer为了让不同的速度的设备能够同步,建立的一个缓冲区域,写进Buffer的数据是为了从中拿出写入其他设备。
buffers:  Memory used by kernel buffers (Buffers in /proc/meminfo)
内核缓冲区的内存,是/proc/meminfo 中的 Buffers 值

(2)什么是Cache

  • Cache指Linux内存中的 Page cache(缓存区)。
  • Cache是为了提高读取速度,将经常或马上需要的数据预读到缓存中,写进Cache的数据是为了其他设备从中去读取。
cache: Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)
页缓存和 Slab 用到的内存,是 /proc/meminfo 中的 Cached 与 Slab之和

3)二者的区别

  • 从软件这一层来说,Buffer是块设备的缓冲,Cache是文件系统的缓存。以Linux为例,Buffer(Buffer Cache)以块形式缓冲了块设备的操作,定时或手动的同步到硬盘,它是为了缓冲写操作然后一次性将很多改动写入硬盘,避免频繁写硬盘,提高写入效率。
  • Cache(Page Cache)以页面形式缓存了文件系统的文件,给需要使用的程序读取,它是为了给读操作提供缓冲,避免频繁读硬盘,提高读取效率。
  • Buffer 的主要目的是在不同应用、线程、进程之间共享字节数据,例如为了让不同速度的设备能够进行数据同步,就会使用共享 Buffer。
  • Cache 的主要目的是提高字节数据的读取/写入速度,例如根据时间局部性、地址局部性操作系统提供 page cache 机制。

2.磁盘和文件写入操作案例

  • Linux中的虚拟设备
#读它的时候,它会提供无限的空字符; 另一个常见用法是产生一个特定大小的空白文件
/dev/zero
#随机数设备,提供不间断的随机字节流, 当系统中断过多时,/dev/random设备会 挂起 ,产生数据速度较慢,但随机性好
/dev/random
#随机数设备,提供不间断的随机字节流, 不依赖系统中断,数据产生速度快,但随机性较低
/dev/urandom
#看作"黑洞",它等价于一个只写文件,所有写入它的内容都会永远丢失
/dev/null
  • 写入之前先清理一下Buffer/Cache
#用命令来释放缓存,  建议先执行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 监视负载信息
vmstat 2
  • 一个终端监控内存信息
free -h -w -s 5
  • 在另外一个终端执行dd,把安全的随机设备 /dev/urandom,写入/tmp/test.txt文件,写入的数据大小500M
dd if=/dev/urandom of=/tmp/test.txt bs=1M count=500


2acbc4267e3c47ec8a0fbb1dfd57db76.jpg



24d0b4665062437baa03ed733a62a840.jpg

  • 发现写入文件的时候,Cache中会增加。

(2)写入磁盘案例

  • 写入磁盘前也是先清理下缓存。
# 首先清理缓存
echo 3 > /proc/sys/vm/drop_caches
  • 然后运行dd命令向磁盘分区/dev/sdb1写入2G数据
dd if=/dev/urandom of=/dev/sda bs=1M count=2048


39032db6f7924019ae1c1cf56c9b0f00.jpg


296aea1dc20f4d399ec2bb29ad25dba9.jpg可以看到,虽然同是写数据,写磁盘和写文件的想象很不一样,写磁盘时即bo 大于 0时,Buffer和 Cache都在增长,但显然 Buffer的增长快得多。写磁盘用到了大量的 Buffer.我们发现,写文件时会用到Cache缓存数据,而写磁盘则会用到Buffer r 来缓存数据。所以,Cache即缓存读文件也缓存写文件。

3.磁盘和文件读取操作案例

  • 首先清理一下缓存
echo 3 > /proc/sys/vm/drop_caches

50334d43afc946debb3c53da23e587fd.jpg

(1)文件读取案例

dd if=/tmp/test.txt of=/dev/null

53cb73081d6e471fb855673d1e97e1be.jpg


ef62ce30adde4f4395db73f466c49ce5.jpg

  • 读取文件时,发现bi增长,Buffer保持不变,而Cache再不断增长。

(1)磁盘读取案例

dd if=/dev/sda of=/dev/null

0b08979f24ce4147b1f40fbaa6b2b798.jpg

51509dee09f749b58526c271397a5d7a.jpg

读取磁盘时,发现bi增长,Buffer不断增长,而Cache保持不变,证明我们之前说的结论是对的,读写文件时操作的是cache,读写磁盘时操作的是buffer。

由此我们得知:

Buffer 是对磁盘数据的缓存,它即可以作为将要写入的磁盘数据的缓存,也可以作为从磁盘读取数据的缓存。

Cache 是对文件数据的缓存,它即可以作为从文件读取数据的页缓存,也可以用作写文件的页缓存。

我们都知道,文件是通过文件系统负责和磁盘交互,磁盘是块设备文件,直接读写磁盘或者分区,就会跳过文件系统,产生裸I/O,因此 文件和磁盘的缓存 的管理非常不同。

4.Cache和Buffer的命中案例

  • 首先先清理一下缓存
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


5603e1477114409db7d28300225900ab.jpg


3fef3f9d35c242fc9083749b48c6a057.jpg

(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

9184d9b773114dacb457c9ceeac05489.jpg

6eab065865514bee93c9e3691794801e.jpg

至此,整篇对Buffer和Cache的作用以及演示就到这里了,由上面的案例我们也最终确认了开头的结论:

  • cache用于文件读写的缓存。
  • buffer用于磁盘读写的缓存,也就是裸I/O。
相关文章
|
缓存 Linux
关于linux操作系统中的buff/cache
linux操作系统中的buff/cache学习
264 0
|
存储 缓存 固态存储
重学操作系统----05 | 存储器分级:L1 Cache 比内存和 SSD 快多少倍?
重学操作系统----05 | 存储器分级:L1 Cache 比内存和 SSD 快多少倍?
305 0
|
存储 缓存 人工智能
图解操作系统-cpu cache
不同物理器件的访问速度不一:速度快的代价高、容量小;代价低且容量大,速度较慢。 为充分发挥各种器件优点,计算机存储数据的物理器件不会只选择一种,而是以CPU为核心,由内而外地组建一整套存储体系结构。它将各种不同的器件组合成一个体系,让各种器件扬长避短,从而形成一种快速、大容量、低成本的内存系统。 写高性能程序,须理解存储体系结构并运用好。
173 0
|
1月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
48 0
Vanilla OS:下一代安全 Linux 发行版
|
1月前
|
人工智能 安全 Linux
|
5月前
|
安全 Linux 网络安全
部署07--远程连接Linux系统,利用FinalShell可以远程连接到我们的操作系统上
部署07--远程连接Linux系统,利用FinalShell可以远程连接到我们的操作系统上
|
5月前
|
Linux 虚拟化 数据安全/隐私保护
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
|
2月前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。
|
4月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
123 3
|
5月前
|
Linux 测试技术 数据安全/隐私保护
阿里云Linux os copilot 运维助手初体验
阿里云Linux os copilot 初体验
409 1
阿里云Linux os copilot 运维助手初体验