QEMU 和bochs严格意义上说不是虚拟机,是“模拟机”,他们把guest os执行的指令由软件来解析执行(软CPU),而xen一类的虚拟机是把指令交给CPU(真正的CPU)来执行。模拟比虚拟慢,但更灵活,在单cpu的机 器上可以模拟多CPU的环境,这是xen做不到的。
05年的时候我就试用过bochs,觉得还不错。但这次用它来装rhel as4 超级慢,配置网络也费了半天劲。于是改用QEMU,发觉确实比bochs好:
1. 速度比bochs快
2. 不用配置文件,命令行很方便
3. 配置网络更方便
4. 自带vncserver,远程访问方便
5. 更妙的是,QEMU可以直接使用bochs生成的虚拟硬盘文件,平滑迁移
6. 最近还听说kvm和QEMU配合威力巨大,不过资源有限,没来得及尝试
只用一行就启动了一个64位、4CPU的模拟机器,还启动了vnc和ne2000的模拟网卡:
qemu-system-x86_64 -smp 4 -m 1G -hda rhel4_x86.img -vnc localhost:0 -net nic,model=ne2k_pci -net user
Xen是通过修改内核代码实现的,所以很多在xen上测试通过的驱动换到真实机器上却不能工作了。
对于驱动开发,还是QEMU搭个虚拟机比较好。
=== 2010.3.25 ===
QEMU从0.12系列开始就不再支持kqemu,我估计自己做了优化,因为我看0.12的速度还行。
装了KVM以后,QEMU不再只是单进程单CPU,而是可以用上多个CPU,速度当然更快,但是配了KVM后也有副作用:不再是模拟,而是虚拟,虚拟机的问题会影响到主机。
我在KVM+QEMU的虚拟机上跑了个错误的驱动,最后不仅这台虚拟机,连主机都挂了。
=== 2010.4.20 ===
发现QEMU有个缺陷:我装完了虚拟系统,想加一块虚拟硬盘,于是qemu-img create了一个5G的文件,然后 -hdb 设为第二块硬盘,但是进入虚拟系统以后,不管我怎么fdisk,它就是认为这块新硬盘只有1G (我的虚拟系统是rhel5,不应该是OS的问题)。
噢,真的吗?
可是,kqemu是针对x86的啊,而QEMU则可以支持很多平台。所以,如果QEMU自身做优化,也优化不到哪里。
KQEMU的局限性是,客户机和宿主机都需要是X86平台。优化的主要原理是,当模拟的客户机与宿主的都是X86的时候,指令在翻译的时候,有很多可以直接在宿主机上运行,而不再经过二进制翻译。
KQEMU应该还是存在的。
对于ARM,MIPS,sparc等。单单QEMU是不可能做到接近native速度的。
Xen里面的设备模型还是用QEMU的。对于QEMU,如果是X86的话,最好安装QEMU的加速器Kqemu,这样会接近native速度。