KVM虚拟化之磁盘:磁盘缓存模式
虚拟化一般网络和存储都是难点。下图所示,磁盘I/O从虚拟机到宿主物理机存储的过程。其中虚拟机镜像并不是必须的。并不一定要给虚拟机创建虚拟磁盘文件。我们可以通过逻辑映射,将SAN的块设备指定给虚拟机使用。这里我们暂讨论宿主机模拟磁盘的场景。如上图,缓存模式作用在虚拟化层和宿主机文件系统或块设备之间。性能:none>unsafe>writeback>writeththrough数据一
虚拟化一般网络和存储都是难点。下图所示,磁盘I/O从虚拟机到宿主物理机存储的过程。
其中虚拟机镜像并不是必须的。并不一定要给虚拟机创建虚拟磁盘文件。我们可以通过逻辑映射,将SAN的块设备指定给虚拟机使用。这里我们暂讨论宿主机模拟磁盘的场景。
如上图,缓存模式作用在虚拟化层和宿主机文件系统或块设备之间。
性能:none>unsafe>writeback>writeththrough
数据一致性:writethrough>none>writeback>unsafe
directsync类似于writethrough,属于新增缓存模式,性能应该略强于writethrough,一致性很高。
缓存方式 | 标志位 | 性能 | 安全性 | 磁盘缓存属性是作用在镜像文件或块设备上的 | |||
不指定,默认 |
|
|
| qemu-kvm <1.2版本 | qemu-kvm >1.2版本 | 宿主机:CentOS | qemu-kvm >1.2版本 &IDE\SCSI\Virtio |
writethrough | writeback | none | writethrough | ||||
writethrough/透写 | O_DSYNC | 读较快 写超慢 | 高 | 不使用任何缓存,直接操作磁盘写,只有数据被写入磁盘才会返回成功。虽然保持了数据一致性,但是因为磁盘的写入速度很慢,所以该模式下写速度很慢,但是读速度较高。无需刷盘。 | |||
writeback/回写 |
| 读写快 | 低 | 将数据写入宿主机页面缓存则返回写成功。页面缓存再合并数据写磁盘。虚机磁盘控制器也知道使用了back cache,所以为了保持数据一致性(虚机侧数据新,磁盘侧数据旧),在需要的时候,虚机会发送刷盘(将缓存里的数据强制持久化到磁盘。)指令。 | |||
none | O_DIRECT | 随机读写快 顺序读写慢 | 高 | 绕过宿主机页面缓存(OS Cache),而是在qemu-kvm用户空间直接访问宿主机磁盘。这个过程就相当于让vm直接访问了你的host的磁盘,从而性能得到了提升。数据被放入宿主机磁盘写队列则返回成功。需要时刷盘。 | |||
unsafe |
| 读写快 | 低 | 同writeback,但是unsafe忽略所有的刷盘指令。无刷盘。 | |||
directsync | O_DSYNC O_DIRECT | 读写快 | 高 | 应该属于writethrough和none方式的结合。无需刷盘。 |
注释:
O_DIRECT - 绕过缓冲区高速缓存 - 直接IO:Linux允许应用程序在执行磁盘IO时绕过缓冲区高速缓存,从用户空间直接将数据传递到文件或磁盘设备,称为直接IO(direct IO)或者裸IO(raw IO)
应用场景:
none:支持在线迁移,主要应用于虚拟化集群。
writeback:性能较好,不太安全(取决于刷盘周期,刷盘周期跟fs配置相关,ext4默认5秒刷一次,可以在guest fs中配置刷盘周期),可用户测试环境。
wirthrough:性能差,安全性高,可用于单机虚拟化场景。
unsafe:性能较好,最不安全,只有在虚拟机关机(虚机进程结束),才会执行一次刷盘操作。可用于安装虚机。
更多推荐
所有评论(0)