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

  • 相关阅读:
    企业级 SpringBoot 教程 (九)springboot整合Redis
    03 网格系统
    02 表单
    01 排版
    客户端调用webSerices
    sql 一行转多行
    sql 多行转一行
    时间差计算 Stopwatch
    sql 游标
    Linq连接查询
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3356035.html
Copyright © 2011-2022 走看看