接前一篇文章: QEMU源码全解析 —— 块设备虚拟化(16)
本文内容参考:
《 QEMU /KVM源码解析与应用》 —— 李强,机械工业出版社
《KVM实战 —— 原理、进阶与性能调优》—— 任永杰 程舟,机械工业出版社
特此致谢!
QEMU启动过程中的块设备虚拟化
上一回开始讲解QEMU启动过程中的块设备虚拟化。先从QEMU的启动命令行讲起,讲解了启动命令行中存储相关的基本配置选项,本回继续讲解更多配置选项。
详细配置存储驱动器的-drive参数
除了上一回讲解的存储的基本配置选项,QEMU还提供了一个“-driver”参数来详细定义一个存储驱动器。该参数的具体形式如下:
-drive option [, option [, option [,...]]]
为客户机定义一个新的驱动器,其有如下一些选项(option):
(1)file=<file>
使用file文件作为镜像文件,加载到客户机的驱动器中。
(2)if=<interface>
指定驱动器的接口类型。可用的类型有:ide、scsi、sd、mtd、floppy、pflash、virtio等。
(3)bus=<bus>
设置驱动器在客户机中的总线编号和单元编号。
(4)index=<index>
设置在同一种接口的驱动器中的索引编号。
(5)media=<media>
设置驱动器中媒介的类型,其可选值为“disk”或“cdrom”。
(6)snapshot=<snapshot>
设置是否启用“-snapshot”选项,其可选值为“on”或“off”。当snapshot启用时,QEMU不会将磁盘数据的更改写回镜像文件中,而是写入临时文件中。
(7)cache=<cache>
设置宿主机对块设备数据访问中的cache情况,可以设置为“none”(或“off”)、“writeback”、“writethrough”等。其默认值是“writethrough”,即“直写模式”。
“writethrough”(即“直写模式”)是在调用write写入数据的同时,将数据写入磁盘缓存(disk cache)和后端块设备(block device)中。其优点是操作简单,缺点是写入数据速度较慢。
而“writeback”(即“回写模式”)是在调用write写入数据时,只将数据写入磁盘缓存中即返回,只有在数据被换出缓存时才将修改的数据写入到后端块设备中。其优点是写入速度较快,缺点是一旦更新数据、在写入后端存储之前遇到系统掉电,数据无法恢复。
“writethrough”和“writeback”在读取数据时都尽量使用缓存,若设置了“cache=none”,即关闭缓存的方式,则QEMU将在调用open系统调用打开镜像文件时使用“O_DIRECT”标识,所以其读写数据都是绕过缓存、直接从块设备中读写的。一些块设备文件(如qcow2格式文件)在“writethrough”模式下性能表现很差,如果这时对性能要求比正确性更高,则建议使用“writeback”模式。
(8)aio=<aio>
选择异步IO(Asynchronous IO)的方式,有“threads”和“native”两个值可选。其默认值为“threads”,即让一个线程池处理异步IO。而“native”只适用于“cache=none”的情况,就是使用Linux原生的AIO。
(9)format=<format>
指定使用的磁盘格式。默认情况下,QEMU自动检测磁盘格式。
(10)serial=<serial>
指定分配给设备的序列号。
(11)addr=<addr>
分配给驱动器控制器的PCI地址,该选项只有在使用virtio接口时才适用。
(12)id=<name>
设置该驱动器的ID,这个ID可以在QEMU monitor中使用“info block”命令查看到。
(13)readonly=on|off
设置该驱动器是否只读。
更多内容请看下回。