zoukankan      html  css  js  c++  java
  • KVM几种缓存模式

    原文在这里:

    http://pic.dhe.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic=%2Fliaat%2Fliaatbpkvmguestcache.htm


    kvm中host和guest可以各自维护自己的缓存,这导致内存中可以有两份缓存数据。这里说的host上的缓存是页缓存,guest上的缓存则是说guest机上的disk write cache。一般至少要保留这两种缓存的其中一种。在linux上,不通过页缓存进行读写使用O_DIRECT标识(buffer io vs direct io)。页缓存通过fsync将改动写入硬盘,大小是剩余可用物理内存,大小差别这么大。按照文章的描述,我感觉这里的disk write cache应该是一个块缓存,并非硬盘自带缓存。

    RHEL6上,kvm/qemu支持以下缓存模式:

    1.writethrough:默认缓存模式

    page cache enable,

    disk write cache disabled.重复读的性能可以,但是写入的性能可能会受影响。原文说:数据完整性有保障,不理解为何。

    2.writeback

    both enabled,尽管性能比较有保障,但是仍然怕突然断电,所以只能做临时方案,不推荐。

    3.none

    host cache disabled,guest cache enabled.这意味着对磁盘映像文件的访问是direct io,性能很好。如果虚拟机的disk write cache不怕停电(难道能搞得真想硬盘自带的缓存?),或者guest机有序地存储数据(fsync,或者文件系统级别上),数据完整性就有保障了。但是由于host上的page cache被关闭,重复读性能会下降(不过想想,guest上的系统应该也有page cache,其中的程序也会考虑缓存,这样应该不会有大问题)。

    4.unsafe

    不安全,安装guest机性能好,不能用于生产,具体这个策略怎么工作,原文没有言明。

    本地硬盘推荐使用writethrough,因为性能可以接受,数据完整性有保证。NFS推荐用none,因为在nfs上O_DIRECT比O_SYNC快。


    PS:感觉水有点深,不能完全理解,只能记下结论。原文中有提到stroage stack,可以搜到ppt:the kvm/qemu storage stack

    http://www.linuxfoundation.jp/jp_uploads/JLS2009/jls09_hellwig.pdf

  • 相关阅读:
    python刷新七牛云CDN缓存
    python 操作redis
    redis 设置密码
    redis 允许其他机器连接设置方法
    redis持久化
    redis操作
    redis简介及与memcached比较
    dataframe 处理某列的小数位数并加特殊符号
    django 生成和下载CSV文件
    django 重定向
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3356035.html
Copyright © 2011-2022 走看看