首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux Page cache和buffer cache正解

Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时间...当page cache的数据需要刷新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。...补充一点,在文件系统层每个设备都会分配一个def_blk_ops的文件操作方法,这是设备的操作方法,在每个设备的inode下面会存在一个radix tree,这个radix tree下面将会放置缓存数据的...如果设备做了文件系统,那么会生成一个inode,这个inode会分配ext3_ops之类的操作方法,这些方法是文件系统的方法,在这个inode下面同样存在一个radix tree,这里会缓存文件的page...从上面的分析可以看出,2.6内核中的buffer cache和page cache在处理上是保持一致的,但是存在概念上的差别,page cache针对文件的cache,buffer是针对磁盘块数据的cache

2.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux系统中的Page cache和Buffer cache

used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 free:未被分配的内存。 shared:共享内存。...buffers:系统分配但未被使用的buffers数量。 cached:系统分配但未被使用的cache数量。 -/+ buffers/cache:表示物理内存的缓存统计。...和未被分配的内存之和,这就是系统当前实际可用内存。...Page cachelinux读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。...Buffer cache是由物理内存分配Linux系统为提高内存使用率,会将空闲内存全分给buffer cache ,当其他程序需要更多内存时,系统会减少cache大小。

1.9K20

Linux系统中的Page cache和Buffer cache

used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 free:未被分配的内存。 shared:共享内存。...buffers:系统分配但未被使用的buffers数量。 cached:系统分配但未被使用的cache数量。 -/+ buffers/cache:表示物理内存的缓存统计。...和未被分配的内存之和,这就是系统当前实际可用内存。...Page cachelinux读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。...Buffer cache是由物理内存分配Linux系统为提高内存使用率,会将空闲内存全分给buffer cache ,当其他程序需要更多内存时,系统会减少cache大小。

2.9K40

Linux-手动释放linux内存cache

Cache 磁盘缓存的大小 -buffers/cache (已用)的内存数:used - buffers - cached +buffers/cache(可用)的内存数:free + buffers...+ cached 可用的memory=free memory+buffers+cached 当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching...drop_caches 3 将/proc/sys/vm/drop_caches值设为3 ---- /proc/sys/vm/drop_caches用法 /proc/sys/vm/drop_caches (since Linux...但实际上,我们都知道这是因为Linux对内存的管理与Windows不同,free小并不是说内存不够用了,应该看的是free的第二行最后一个值:-/+ buffers/cache: 58 191,这才是系统可用的内存大小...我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少。如果常常swap用很多,可能你就要考虑加物理内存了,这也是linux看内存是否够用的标准.

5.6K20

【图解Linux内核】Page Cache

认识Page Cache最简单的方式,就是用数据说话,通过具体的数据你会更加深入地理解Page Cache的本质。 为什么需要Page Cache,Page Cache的产生和回收是什么样的。...最好具备一些Linux编程的基础,比如,如何打开一个文件;如何读写一个文件;如何关闭一个文件等等。 什么是Page Cache? Page Cache到底是属于内核还是属于用户?...怎么观察Page CacheLinux上直接查看Page Cache的方式: /proc/meminfo free /proc/vmstat 命令 内容其实是一致的。...SwapCached是在打开Swap分区后,把Inactive(anon)+Active(anon)这两项里的匿名页给交换到磁盘(swap out),然后再读入到内存(swap in)后分配的内存。...Page Cache中的Shmem指匿名共享映射这种方式分配的内存(free命令中shared这一项),比如tmpfs(临时文件系统),这部分在生产环境问题较少,不过多关注。

5.5K10

深入理解 slab cache 内存分配全链路实现

,但是其他 cpu 只能释放对象到该 slab 中,不能从该 slab 中分配对象。...// kmem_cache_cpu 中缓存被填充之后的空闲对象个数(包括 partial 列表)不能超过 ( kmem_cache 结构中 cpu_partial 指定的个数 / 2 )...之后需要冻结,其他 cpu 不能从这里分配对象,只能释放对象 new.frozen = 1; // 更新 slub (page表示)中的 freelist 和 counters...,感兴趣的读者可以回看下 《深入理解 Linux 物理内存分配全链路实现》 如果当前 NUMA 节点中的空闲内存不足,或者由于内存碎片的原因导致伙伴系统无法满足 slab 所需要的内存页个数,导致分配失败...image.png // 定义在文件:/include/linux/poison.h #define SLUB_RED_INACTIVE 0xbb // 定义在文件:/include/linux/

21220

【图解Linux内核】Page Cache

认识Page Cache最简单的方式,就是用数据说话,通过具体的数据你会更加深入地理解Page Cache的本质。 为什么需要Page Cache,Page Cache的产生和回收是什么样的。...最好具备一些Linux编程的基础,比如,如何打开一个文件;如何读写一个文件;如何关闭一个文件等等。 什么是Page Cache? Page Cache到底是属于内核还是属于用户?...怎么观察Page CacheLinux上直接查看Page Cache的方式: /proc/meminfo free /proc/vmstat 命令 内容其实是一致的。...SwapCached是在打开Swap分区后,把Inactive(anon)+Active(anon)这两项里的匿名页给交换到磁盘(swap out),然后再读入到内存(swap in)后分配的内存。...Page Cache中的Shmem指匿名共享映射这种方式分配的内存(free命令中shared这一项),比如tmpfs(临时文件系统),这部分在生产环境问题较少,不过多关注。

5.1K20

linux cache介绍及控制

参考文档 https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ 有关Cache...Linux内核将写磁盘的操作分解成了,先写缓存,每隔一段时间再异步地将缓存写入磁盘。这提升了IO读写的速度,但存在一定风险。数据没有及时写入磁盘,所以存在数据丢失的风险。...(异步,即写入的同时进程能正常运行;同步,即写完之前其他进程不能工作)。 好消息是,你可以根据实际情况,对写缓存进行配置。...vm.dirty_ratio 是绝对的脏数据限制,内存里的脏数据百分比不能超过这个值。如果脏数据超过这个数量,新的IO请求将会被阻挡,直到脏数据被写进磁盘。...情景2:增加Cache 在一些场景中增加Cache是有好处的。例如,数据不重要丢了也没关系,而且有程序重复地读写一个文件。允许更多的cache,你可以更多地在内存上进行读写,提高速度。

2.2K21

Linux内核Page Cache和Buffer Cache关系及演化历史

但此时,Buffer Cache已基于page来分配内存,buffer_head内部,已经有了关于所在page的一些信息: 同时,从buffer cache的初始化,以及buffer cache不足时新建...buffer cache单元的动作,我们也可以看出,此时buffer cache已经完全是基于page来分配内存 当buffer cache不足时,通过 grow_buffers 来新增buffer...基于page来分配内存,但是与Page Cache完全独立,一点关系都没有。...page cache(这里我们假设是一个新的写入,且数据量仅一个page):__grab_cache_page ,而在分配了内存空间page之后,则通过 prepare_write ,来完成对应的buffer_head...Linux内核的文件Cache管理机制介绍 [9]. Linux内核文件Cache机制 [10].

2K30

Linux内核Page Cache和Buffer Cache关系及演化历史

其访问模式与上面Linux-0.11版本的访问逻辑基本类似。但此时,Buffer Cache已基于page来分配内存,buffer_head内部,已经有了关于所在page的一些信息: ?...同时,从buffer cache的初始化,以及buffer cache不足时新建buffer cache单元的动作,我们也可以看出,此时buffer cache已经完全是基于page来分配内存。 ?...从上面的描述我们可以看出,此时的buffer cache基于page来分配内存,但是与Page Cache完全独立,一点关系都没有。...page cache(这里我们假设是一个新的写入,且数据量仅一个page):__grab_cache_page ,而在分配了内存空间page之后,则通过 prepare_write ,来完成对应的buffer_head...Linux内核的文件Cache管理机制介绍 [9]. Linux内核文件Cache机制 [10].

3.6K71

Linux 内核 内存管理】伙伴分配器 ② ( 伙伴分配分配内存流程 )

文章目录 一、伙伴分配分配内存流程 1、查询 n 阶页块 2、查询 n + 1 阶页块 3、查询 n + 2 阶页块 一、伙伴分配分配内存流程 ---- 伙伴分配器 以 " 阶 " 为单位 , 分配.../ 释放 物理页 ; 阶 ( Order ) : 物理页 的 数量单位 , n 阶页块 指的是 2^n 个 连续的 " 物理页 " ; 页 / 阶 概念参考 【Linux 内核 内存管理...】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 ) 博客 ; " 伙伴分配器 " 分配内存流程 : 假设要 分配 n 阶页块 ; 1、查询 n 阶页块 查询当前是否有 空闲的 n...阶页块 , 如果有则 直接分配 , 如果没有 , 则进入下一步 , 查询 n + 1 阶页块 ; 2、查询 n + 1 阶页块 查询当前是否有 空闲的 n + 1 阶页块 , 如果有 , 将...n + 1 阶页块 分成 2 个 n 阶页块 , 一块插入 空闲 n 阶页块链表 ; 一块 直接分配 , 如果没有 , 则进入下一步 , 查询 n + 2 阶页块 ; 3、查询

7K50

WiredTiger存储引擎之六:Cache分配规则与Page的淘汰机制

分配规则 内存Page的淘汰机制 1.2 Cache分配机制 WiredTiger启动的时候会向操作系统申请一部分内存给自己使用,这部分内存我们称为Internal Cache,如果主机上只运行MongoDB...图:Cache分配规则 MongoDB启动时,首先从整个主机内存中切一大块出来分给WiredTiger的Internal Cache,用于构建B-Tree中的各种page以及基于这些page的增删改查等操作...例如,假设主机内存为10GB,则Internal Cache取值为50% of (10GB - 1 GB),等于4.5GB; 如果主机内存为1.2GB,则Internal Cache取值为256MB。...因此,同一份数据在磁盘、文件系统缓存和Internal Cache三个位置的格式是不一样的,如下描述: 所有数据在File System Cache中的格式和在磁盘上的格式是一致的,将数据先加载到文件系统缓存...)减少对内存的占用; 集合数据加载到WiredTiger的Internal Cache后,其数据必须解压后才能被后续各种操作使用,因此格式与磁盘上和File System Cache都不一样。

95240

Linux LVM分区的创建、分配

许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要...LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。...RHEL5默认安装的分区格式就是LVM逻辑卷的格式,需要注意的是/boot分区不能基于LVM创建,必须独立出来。...修改成普通Linux分区即可。 总结:LVM逻辑卷是Linux里面一个很棒的空间使用机制,因为分区在没有格式化的情况下是没有办法加大或者放小的。通过LVM可以将你的磁盘空间做到灵活自如。

6.5K20
领券