`
shixiaomu
  • 浏览: 375651 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux Page cache和buffer cache 正解

 
阅读更多
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,仅此而已。
分享到:
评论

相关推荐

    Wrox.Professional.Linux.Kernel.Architecture.

    Chapter 16: Page and Buffer Cache949 Chapter 17: Data Synchronization . 989 Chapter 18: Page Reclaim and Swapping. 1023 Chapter 19: Auditing 1097 Appendix A: Architecture Specifics . 1117 Appendix B:...

    ARM_Linux启动分析.pdf

    创建和设置内部及通用cache("slab_cache",kmem_cache_sizes_init()) 创建uid taskcount SLAB cache("uid_cache",uidcache_init()) 创建文件cache("files_cache",filescache_init()) 创建目录cache(...

    Linux-0.11 [内核源代码带中文注释]

    buffer cache as in minix ! ! The loader has been made as simple as possible, and continuos ! read errors will result in a unbreakable loop. Reboot by hand. It ! loads pretty fast by getting whole ...

    微软内部资料-SQL性能优化2

    The system address space is where the kernel, executive, HAL, boot drivers, page tables, pool, and system cache reside. For specific information regarding address space layout, refer to Inside ...

    springmodules-cache.xsd&springmodules-ehcache.xsd.rar

    解决web.xml中 <page-encoding>UTF-8</page-encoding>报错。错误提示: cvc-complex-type.2.4.a: Invalid content was found starting with element 'page-encoding'. One of '{"http:// java.sun....

    Wiley.Publishing.Professional.Linux.Kernel.Architecture.2008.pdf

    Chapter 16: Page and Buffer Cache..... . . . . . 949 Chapter 17: Data Synchronization ..... . . . . . . 989 Chapter 18: Page Reclaim and Swapping.... . . . . . . . 1023 Chapter 19: Auditing ....... . ...

    PHP 实现页面静态化的几种方法

    1、通过buffer来实现 需要用file_put_contents ob_get_clean()...$pageCache = str_replace('submit2','login',ob_get_contents());//将缓存去中的内容替换 ob_end_clean(); echo $mtime; echo $pageCache; 2、通过$_SE

    SimIt-ARM-3.0 ARM指令模拟器

    SimIt-ARM-3.0 给予命令行ARM指令模拟器,短小精悍,是研究ARM处理器的好工具,该模拟器既可以运行用户级别的ELF程序,又可以模拟运行Linux操作系统;提供了简单易用的调试命令,可以逐条跟踪指令的执行。 SimIt-...

    SQL Server性能调优之缓存

    在执行任何查询时,SQL Server都会将数据...Data Cache是存储数据页(Data Page)的缓冲区,当SQL Server需要读取数据文件(File)中的数据页(Data Page)时,SQL Server会把整个Page都调入内存(内存中的一个Page叫

    asp.net 开发的一些常用技巧

    不使用页面缓存: 你可以在不想被缓存的页面Page_Load事件中加上如下代码 代码如下:Response.Expires = 0; Response.Buffer = true; Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1); Response.AddHeader...

    验证码下载jsp

    <%@ page language="java" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" pageEncoding="utf-8"%> String path = request.getContextPath(); String basePath = request.getScheme()+"://"+...

    Oracle DBA的UNIX袖珍参考手册之服务器监控

    Buffer cache hit ratio (for the Unix JFS buffer cache) for write requests pread/s Number of reads per second from disk pwrit/s Number of writes per second to disk 3. 使用 vmstat vmstat 是通用的 UNIX...

    ORACLE DBA 手册

    设置db_cache_advice: 12 调整优化模式 optimizer_mode 12 调整优化模式optimizer_index_caching 13 调整优化模式optimizer_index_cost_adj 13 调整优化模式optimizer_max_permutations 14 并行优化 14 parallel_...

    php.ini-development

    user_ini.cache_ttl = 300 ;;;;;;;;;;;;;;;;;;;; ; Language Options ; ;;;;;;;;;;;;;;;;;;;; ; Enable the PHP scripting language engine under Apache. ; http://php.net/engine engine = On ; This directive...

    The Indispensable PC Hardware Book - rar - part1. (1/7)

    Page Directory, page tables, and page frames. Test registers TR6 and TR7. Virtual 8086 mode. Virtual machines and virtual 8086 monitors. Addresses in virtual 8086 mode. Entering and leaving ...

    uboott移植实验手册及技术文档

    4、交叉编译器 arm-softfloat-linux-gnu-gcc-3.4.5 【实验步骤】 一、建立自己的平台类型 (1)解压文件 #tar jxvf u-boot-1.3.1.tar.bz2 (2)进入 U-Boot源码目录 #cd u-boot-1.3.1 (3)创建自己的开发板...

    java 面试题 总结

    动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的...

    JLink_Windows_V648.zip

    DLL: Under some circumstances Flash Cache was not cleaned after erase operations. DLL: Unsecure read protection for STM32L151xx series devices, fixed. DLL: Unsecure write protection for STM32L151xxx ...

    SQLServer2008查询性能优化 2/2

    2.4.4 Buffer Cache Hit Ratio 24 2.4.5 Page Life Expectancy 24 2.4.6 Checkpoint Pages/sec 24 2.4.7 Lazy writes/sec 24 2.4.8 Memory Grants Pending 25 2.4.9 Target Server Memory(KB)和Total Server ...

    SQLServer2008查询性能优化 1/2

    2.4.4 Buffer Cache Hit Ratio 24 2.4.5 Page Life Expectancy 24 2.4.6 Checkpoint Pages/sec 24 2.4.7 Lazy writes/sec 24 2.4.8 Memory Grants Pending 25 2.4.9 Target Server Memory(KB)和Total Server ...

Global site tag (gtag.js) - Google Analytics