• KVM使用原生CPU - [Linux]

    2012-01-10

    默认情况下 CentOS 6 安装虚拟机后的CPU是:QEMU Virtual CPU,一般使用是没有问题的,只是性能低下,PHP一个10万次循环的脚本居然需要执行50多秒,而母系统执行只需2秒多,差距有点儿太大。

    # virsh edit vm_name
    <domain type='kvm'>
      ......
      <qemu:commandline>
        <qemu:arg value='-cpu'/>
        <qemu:arg value='host'/>
      </qemu:commandline>
    </domain>
    

    一般建议使用 virsh edit 编辑虚拟机配置文件,避免文件被破坏。

  • 作为一名半调子系统管理员,XEN那dom0,domU还要编译内核,这简直要了我的亲命,KVM作为一个CentOS 6开始唯一内置支持的虚拟化,安装配置简单,很适合我。

    安装:

    KVM需要CPU支持vmx(Intel)或svm(AMD)。

    $ cat /proc/cpuinfo | egrep 'vmx|svm'
    flags: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 
    clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 
    3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor 
    cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a 
    misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save
    flags: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 
    clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 
    3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor 
    cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a 
    misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save

    安装KVM组件

    # yum groupinstall Virtualization
    # yum groupinstall "Virtualization Platform"

    重启后检查是否安装成功,若使用Intel CPU会显示 kvm_intel。

    # lsmod | grep kvm
    kvm_amd                37434  4 
    kvm                   292815  1 kvm_amd

    OK,就这么简单,KVM安装完成。

    周边工具:

    virt-manger与virt-viewer是基于X Window的图形化管理工具,优点呢就是操作简单、鼠标点点,坏处自然就是要装一堆图形组件,对于服务器来说这些东西有些太多余。

    服务器上最好用的当然是命令行工具

    yum install libvirt-client python-virtinst

    libvirt-client 提供了 virsh,主要功能为:启动、重启、停止等管理功能。

    python-virtinst 提供了 virt-install 安装工具。

    安装虚拟机

    #&nbsp;virt-install \
    --name gentoo6 \
    --ram 512 \
    --vcpus=1 \
    --disk path=/var/vps/gentoo6.img,size=4 \
    --network network:default \
    --os-variant=generic26 \
    --accelerate \
    --cdrom /var/vps/install-amd64-minimal-20111201.iso \
    --vnc \
    --vncport=5911 \
    --vnclisten=0.0.0.0

    --name 指定虚拟机名称,virsh操作指定虚拟机时所需要的参数,不可以重复。

    --ram 分配内存大小,安装完成后可以用 virsh 调整。

    --vcpus 分配CPU核心数,最大与实体机CPU核心数相同,安装完成后也可以用 virsh 调整。

    --disk 指定虚拟机镜像, size 指定分配大小单位为G。

    --network 网络类型,此处用的是默认,一般用的应该是 bridge 桥接,这个下次再说。

    --os-variant 指定操作系统类型,此处使用的是标准Linux 2.6,其他的可以通过 man virt-install 详细查看。

    --accelerate 呃,加速,具体什么原理还不太清楚。

    --cdrom 指定安装镜像所在。

    --vnc 启用VNC远程管理,一般安装系统都要启用。

    --vncport 指定 VNC 监控端口,默认端口为 5900。

    --vnclisten 指定 VNC 绑定IP,默认绑定127.0.0.1,这里将其改为 0.0.0.0 以便可以通过外部连接。

    执行后如果没有安装 virt-viewer 或没有 X Window 系统可能会提示 virt-viewer 启动失败,不过没关系,使用 VNC Viewer 或者 MAC 下使用Chicken of the VNC连接到实体机,端口使用上面指定的就可以操作安装过程。另外需要注意的是,某些系统安装盘有等待输入时间,超过时间会自动使用硬盘启动,所以VNC连接一定要快,否则就需要 virsh destroy 然后 virsh start 再启动,因为系统尚未安装成功,此时的 virsh reboot 执行是无效的。

    virsh 常用命令

    virsh list 列出当前虚拟机列表,貌似不包括未启动的。

    virsh start domain-name 启动指定虚拟机。

    virsh shutdown domain-name 停止指定虚拟机,执行此命令后 virsh list 里将不出现。

    virsh reboot domain-name 重新启动指定虚拟机,这个命令貌似必须系统安装完成后才有效。

    virsh autostart domain-name 指定虚拟机开机自动启动,需要 libvirtd 服务默认启动。

    还有更多,一时也没全搞明白,全写出来估计可以写本手册了。

    其他

    虚拟机配置存储在 /etc/libvirt/qemu 目录,配置文件为XML格式。

    自动启动的虚拟机在 /etc/libvirt/qemu/autostart 目录。