Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时间,page cache和buffer cache的概念曾经困扰过我,但是仔细分析一下,这两个概念实际上非常的清晰。如果能够了解到这两个cache的本质,那么我们在分析io问题的时候可能会更加得心应手。
Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。
Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
补充一点,在文件系统层每个设备都会分配一个def_blk_ops的文件操作方法,这是设备的操作方法,在每个设备的inode下面会存在一个radix tree,这个radix tree下面将会放置缓存数据的page页。这个page的数量将会在top程序的buffer一栏中显示。如果设备做了文件系统,那么会生成一个inode,这个inode会分配ext3_ops之类的操作方法,这些方法是文件系统的方法,在这个inode下面同样存在一个radix tree,这里会缓存文件的page页,缓存页的数量在top程序的cache一栏进行统计。从上面的分析可以看出,2.6内核中的buffer cache和page cache在处理上是保持一致的,但是存在概念上的差别,page cache针对文件的cache,buffer是针对磁盘块数据的cache,仅此而已。
分享到:
相关推荐
在Linux系统中,Buffer和Cache的概念也被用于描述文件系统的状态。Buffer是指待写入磁盘的数据,它们通常与文件系统的写操作相关,比如在文件被修改后,系统会先将其内容暂存于Buffer中,然后在合适的时机(例如通过...
Linux 操作系统中内存 buffer 和 cache 的区别 在 Linux 操作系统中,内存 buffer 和 cache 是两个重要的概念,它们都是占用内存的,但是它们的作用和特点却不同。本文将详细介绍内存 buffer 和 cache 的概念、区别...
### Linux操作系统中内存buffer和cache的区别 #### 一、引言 在Linux操作系统中,内存管理是一项关键的技术,它直接影响到系统的性能和稳定性。本文将详细介绍Linux系统中内存buffer和cache的区别及其工作原理,...
Page Cache和Buffer Cache之间的关系是,每个Page Cache条目可能包含多个Buffer Cache条目。VFS(虚拟文件系统)处理应用程序与Page Cache之间的数据交换,通过read和write等接口提供服务。内存管理系统在分配和回收...
5. **内存管理子系统**:Linux内核内存管理子系统负责分配和回收内存,以及维护Page和Buffer Cache。它包括伙伴系统(用于分配连续内存块)和slab分配器(用于高效管理小对象的内存分配)。slab分配器根据对象大小...
缓存(Cache)主要包含两种类型:页高速缓存(Page Cache)和块设备缓存(Buffer Cache)。页高速缓存用于存储文件系统的数据,当程序读取文件时,内核会尝试从缓存中直接获取,从而提高数据访问速度。块设备缓存则...
为了提升文件系统访问速度,Linux内核会利用空闲内存来缓存文件数据(称为Page Cache)和其他类型的缓存(如Buffer Cache)。这样做的目的是减少磁盘I/O操作,从而提高系统性能。 然而,在某些情况下,用户可能会...
通过`kmem_cache_alloc()`和`kmem_cache_free()`函数,内核能够高效地分配和回收`buffer_head`对象,这不仅提高了内存使用效率,也简化了内核代码的设计。 #### 总结 `buffer_head`是Linux内核中用于描述和管理块...
此外,理解Linux内核的缓冲区缓存机制(比如Page Cache和DMA Buffer)也是至关重要的,这些机制可以帮助系统更高效地处理I/O操作,减少CPU与外设之间的交互次数,从而提高整体性能。 总之,Linux缓冲区是优化系统...
本章节主要讲解了Linux内核中的文件系统缓冲区,包括缓冲区、缓存、DCache、Inode Cache、Page Cache、Buffer Cache等概念的定义、作用、区别和实现机理。 缓冲区(Buffer)是内存空间的一部分,预留了一定的存储...
Linux还采用了Buffer Cache和Page Cache这两种主要的缓存机制,以优化磁盘和内存的交互。Buffer Cache针对磁盘块的读写,而Page Cache针对文件inode的读写。这两种缓存极大地提高了系统性能,减少了I/O操作的延迟。 ...
除了通过 `fwrite` + `fflush` 组合外,还可以使用 `read/write` 函数直接将数据从 Application Buffer 写入 Page Cache。这种方式涉及一个系统调用,例如 `sys_write`。这种直接的写入方式减少了数据在不同缓冲区间...
高速缓存机制可以分为两种:Buffer Cache和Page Cache。 Buffer Cache是面向底层块设备的缓存机制,它的粒度是文件系统的块。块设备和系统采用块进行交互,块再转换成磁盘的基本物理结构扇区。 Page Cache是面向...
Linux内核内存管理技术是一个复杂的系统,涉及到计算机体系结构、MMU、Cache、DMA、EPT、虚拟地址空间布局、伙伴系统、SLAB、用户空间地址布局、匿名页和文件页、缺页异常、反向映射、内存规整、OOM、KSM、巨型页、...
10. **缓存机制**:Linux内核使用Page Cache和Buffer Cache来缓存文件和文件系统的元数据,减少对硬盘的访问,提高系统响应速度。 通过分析Linux 2.6内核源代码,我们可以深入了解这些机制的实现细节,以及如何优化...
Linux系统提供了多种缓存机制,例如,Page Cache、Buffer Cache等。 3. 性能优化工具 3.1 top命令 top命令是一个常用的性能优化工具,可以实时显示系统的CPU、内存、进程等信息。 3.2 vmstat命令 vmstat命令...
- `3` 同时清除 pagecache、dentries 和 inodes。 **2. 手动释放缓存的操作步骤** - **同步磁盘缓冲区**:在执行清理操作前,应先使用 `sync` 命令将所有未写入磁盘的数据写入磁盘,确保数据安全。 - **设置`/...
- **创建页cache**:通过`page_cache_init()`函数初始化内存页hash表。 - **创建信号队列cache**:通过`signals_init()`函数创建“signal_queue”。 - **初始化内存inode表**:通过`inode_init()`函数初始化内存...
完成这个步骤后,通过向/proc/sys/vm/drop_caches文件写入数字1、2或3,可以分别释放PageCache、dentries和inodes、或者全部三者。 - 写入1:释放PageCache; - 写入2:释放dentries和inodes; - 写入3:释放Page...
磁盘缓存是提高I/O性能的关键因素,主要包括Dentry缓存、Page Cache和Buffer Cache。Dentry缓存用于存储文件系统的目录项,加速文件路径查找;Page Cache用于缓存文件内容,减少对磁盘的直接访问;Buffer Cache则...