技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Linux --> 关于Linux的文件系统cache

关于Linux的文件系统cache

浏览:4620次  出处信息
关于linux中系统cache的测试:

    当我们第一次访问某文件(或其中的一部分时),速度是比较慢的,但是再次访问就很快了,下面我们通过一个程序做一下冷热数据的访问速度的比较。  

以下是代码片段:
    $fp = fopen($argv[1], "r"); 
    echo microtime(); 
    $offset = isset($argv[2])?$argv[2]:0; 
    fseek($fp,$offset); 
    $content = fread($fp,4096); 
    echo "\n"; 
    echo microtime(); 
    echo "\n"; 
    fclose($fp);
    ?>

    -----------------------------

    测试结果:

    [junjie2@bsso ~]$ php cache.php MySQL-devel-community-5.1.40-0.rhel5.i386.rpm

    0.49064700 1258509003

    0.49845600 1258509003

    // 第一次访问耗时约8ms

    [junjie2@bsso ~]$ php cache.php MySQL-devel-community-5.1.40-0.rhel5.i386.rpm

    0.04973400 1258509015

    0.04988900 1258509015

    // 第二次访问相同的数据,耗时约1.5ms

    [junjie2@bsso ~]$ php cache.php MySQL-devel-community-5.1.40-0.rhel5.i386.rpm

    0.50933300 1258509019

    0.50948600 1258509019

    // 第二次访问相同的数据,耗时约1.5ms

    [junjie2@bsso ~]$ php cache.php MySQL-devel-community-5.1.40-0.rhel5.i386.rpm 10

    0.63028200 1258509035

    0.63044500 1258509035

    // 访问和上次稍有差异的数据,耗时约0.2ms,

    [junjie2@bsso ~]$ php cache.php MySQL-devel-community-5.1.40-0.rhel5.i386.rpm 4096

    0.89414900 1258509055

    0.89434800 1258509055

    // 访问和上次差异4k的数据,耗时约0.2ms

    // 说明第一次系统缓存起来的数据不仅仅是我们访问的4k的数据,而是更多,具体多少,看内核源代码吧,似乎比测试更快、更准确一些

    [junjie2@bsso ~]$ php cache.php MySQL-devel-community-5.1.40-0.rhel5.i386.rpm 4096000

    0.24825000 1258509072

    0.25472600 1258509072

    // 访问和原来差异4M的数据,耗时6ms,说明这部分数据没有被系统cache给缓存

    [junjie2@bsso ~]$ mv MySQL-devel-community-5.1.40-0.rhel5.i386.rpm MySQL-devel-community-5.1.40-0.rhel5.i386.rpm2

    [junjie2@bsso ~]$ php cache.php MySQL-devel-community-5.1.40-0.rhel5.i386.rpm2 4096000            

    0.54055900 1258510429

    0.54070300 1258510429

    // 重命名文件后访问相同内容,耗时约0.2ms

    // 说明文件重命名不影响系统cache,即系统cache和文件名没有关系; 大概是根据inode来cache的,因为重命名前后的inode是没有变化的,name仅仅是文件的一个属性罢了

    [junjie2@bsso ~]$

    遗留问题:

    1. 系统cache的换出机制是怎样的?

    2. 系统cache的具体内容能查看吗? 肯定能的,怎么查看呢?

    3. 如何刷新系统cache? 上面的测试说明,至少重命名文件是不行的;

    另外:

    系统cache是系统级别的cache,和进程没有关系; 如mysqld因系统cache加快了访问的速度,这时,重启mysqld是没用的。

    参考:

    文件系统的cache可以通过/dev/mem 这个字符设备来查看,好像系统利用缓存时是根据inode来查询的,就像memcached那样,至少现在要枚举所有信息是比较麻烦的。

    /dev/mem  与 /dev/kmem 的区别:

    原创内容,转载请标明来自http://lixings.cublog.cn

    区别:

     /dev/mem: 物理内存的全镜像。可以用来访问物理内存。    /dev/kmem: kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容。作用:

     前者用来访问物理IO设备,比如X用来访问显卡的物理内存,或嵌入式中访问GPIO。用法一般就是open,然后mmap,接着可以使用map之后的地址来访问物理内存。这其实就是实现用户空间驱动的一种方法。    后者一般可以用来查看kernel的变量,或者用作rootkit之类的。参考1和2描述了用来查看kernel变量这个问题。参考:

     http://lwn.net/Articles/147902/    http://lkml.org/lkml/2005/8/11/301

    

建议继续学习:

  1. 海量小文件存储    (阅读:7368)
  2. 其实,文件也可以truncate    (阅读:7243)
  3. Buffer和cache的区别是什么?    (阅读:6716)
  4. 谈冷热数据    (阅读:5572)
  5. Linux操作系统中内存buffer和cache的区别    (阅读:5225)
  6. 学习:一个并发的Cache    (阅读:4845)
  7. Twitter架构图(cache篇)    (阅读:4571)
  8. Perl 倒行分析文件方法。perl读文本文件,从末尾往前读.    (阅读:4298)
  9. 修改系统最大文件句柄数    (阅读:4113)
  10. 详解MyISAM Key Cache(前篇)    (阅读:3992)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1