目录

什么是 buffer/cache?

什么是 page cache?

什么是 buffer cache?

buff和cache的区别

因为本人对buff/cache认识很模糊,所以记录一下从其他博客学习到的东西。

什么是 buffer/cache?

buffer 和 cache 是两个在计算机技术中被用滥的名词,放在不同语境下会有不同的意义。在 Linux 的内存管理中。

buffer 指 Linux 内存中的:Buffer cache,(buffer)被用来当成对 io 设备写的缓存;

cache 指 Linux 内存中的:Page cache,(cache)被用来当作对 io 设备读的缓存。

翻译成中文可以叫做缓冲区缓存和页面缓存。这里的 io 设备,主要指的是块设备文件和文件系统上的普通文件。但是现在,它们的意义已经不一样了。

在当前的内核中,page cache 顾名思义就是针对内存页的缓存,说白了就是,如果有内存是以 page 进行分配管理的,都可以使用 page cache 作为其缓存来管理使用。当然,不是所有的内存都是以页page进行管理的,也有很多是针对块block进行管理的,这部分内存使用如果要用到 cache 功能,则都集中到 buffer cache 中来使用。

什么是 page cache?

Page cache 主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有 read/write 操作的时候。如果你仔细想想的话,作为可以映射文件到内存的系统调用:mmap 是不是很自然的也应该用到 page cache?在当前的系统实现里, page cache 也被作为其它文件类型的缓存设备来用,所以事实上 page cache 也负责了大部分的块设备文件的缓存工作。

什么是 buffer cache?

Buffer cache 则主要是设计用来在系统对块设备进行读写的时候,对块进行数据缓存的系统来使用。这意味着某些对块的操作会使用 buffer cache 进行缓存,比如我们在格式化文件系统的时候。一般情况下两个缓存系统是一起配合使用的,比如当我们对一个文件进行写操作的时候,page cache 的内容会被改变,而 buffer cache 则可以用来将 page 标记为不同的缓冲区,并记录是哪一个缓冲区被修改了。这样,内核在后续执行脏数据的回写writeback时,就不用将整个 page 写回,而只需要写回修改的部分即可。

buff和cache的区别

buff

cache

Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可搜索以干其他的事情。

Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。
Buffer:一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。 Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。

Linux中buff和cache的解释与区别相关推荐

  1. Linux中buff/cache内存占用过高解决办法

    Linux中buff/cache内存占用过高解决办法 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个centos7的系统上,free命令的显示内容大概是这样一个状态: 这个 ...

  2. linux中export和source的作用和区别

    linux中export和source的作用和区别 2013-11-12 12:36 1039人阅读 评论(0) 收藏 举报 分类: linux(82) shell与export命令 用户登录到Lin ...

  3. linux中cat、more、less命令区别详解

    linux中cat.more.less命令区别详解 转自:https://blog.csdn.net/xyw_blog/article/details/16861681 众所周知linux中命令cat ...

  4. Linux中kil命令和pkill命令的区别

    Linux中kil命令和pkill命令的区别 kill命令格式: kill [参数][目标程序的端口号] 所以使用kill命令前需要使用ps命令查看目标程序的端口号: ps -ef | grep fi ...

  5. Linux中buff/cache内存占用过高-手动清除释放内存

    buff/cache内存占用太高 我们在使用free -h或者(top命令)查看系统内存的时候,有时间会发现buff/cache很高,如下图 可以看到我总内存就1.8G,buff/cache就占用了1 ...

  6. Linux中Buffer和Cache的区别

    今天我们再来讨论下linux系统中关于Buffer和Cache的区别,buffer与cache操作的对象就不一样. 1.buffer(缓冲) 是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速 ...

  7. linux 脚本 ll命令,linux中ll命令的详细解释

    linxu下的ll命令其实是ls-l的一个别名.下面由学习啦小编为大家整理了linux的ll命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的ll命令的详细解释 ll并不是linux下一 ...

  8. head在linux命令中什么意思,linux中head命令的详细解释

    linxu下的head命令是经常使用到的显示文件内容的命令.下面由学习啦小编为大家整理了linux的head命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的head命令的详细解释 he ...

  9. linux中fcntl()、lockf、flock的区别

    fcntl().lockf.flock的区别 --lvyilong316 这三个函数的作用都是给文件加锁,那它们有什么区别呢?首先flock和fcntl是系统调用,而lockf是库函数.lockf实际 ...

最新文章

  1. Boostrap的按钮下拉菜单
  2. Kubernetes 时代的安全软件供应链
  3. python字符串截取:截取yaml文件名后3个字符
  4. javascript装饰者模式
  5. 汉语编程能获得诺贝尔奖
  6. 【cocos2d-x】2.0升级为3.0一些常见变化纪录
  7. c# 连接各种数据库 Access、Server等
  8. python 编译器pyc_有没有办法知道哪个Python版本.pyc文件被编译?
  9. android 中在CMD中查看sqlite
  10. Swift延迟加载的一种用途
  11. python3入门代码-Python3零基础自学方法?
  12. arm汇编指令集_汇编入门第一篇,小白也能看懂
  13. 迅为iTOP-IMX6ULL开发板Pinctrl和GPIO子系统实验-修改设备树文件
  14. 数学建模学习笔记(十七)传染病模型(SIER)
  15. 第五章:腾讯云有哪些产品
  16. 202203Self-Supervised Pretraining and Controlled Augmentation Improve RareWildlife Recognition inUAV
  17. mac更新go到最新版本
  18. 带修莫队 的 小优化 (针对yxc版本)
  19. Linux 环境下metis与parmetis安装与使用
  20. 【Ian Goodfellow课件】线性代数

热门文章

  1. 汇编语言的AX,BX,CX,DX,分别表示什么
  2. 《Python深度学习从零开始学》简介
  3. HDU 5976 Detachment(拆分)
  4. 新飞重整花落谁家? 多个“接盘侠”浮出水面
  5. 网络多线程编程-简单实现(模拟QQ的实现)
  6. C++使用FFmpeg库实现图片转视频
  7. Pywifi——检测是否网络连接
  8. redis数据一致性之延时双删详解
  9. FISCO BCOS上使用第三方CA证书底层节点部署实操
  10. 【WIN32APIDAPI】RegisterClass CreateWindowEx UpdateWindow