Performance issues with KVM – Redhat
The general performance issue with KVM is due to DISK I/O
- by default the Redhat KVM guest are created with x86_64 architecuture, if you installed 32 bit operating system change this to i686.
<os>
<type arch=’i686′ machine=’rhel5.6.0′>hvm</type>
<boot dev=’hd’/>
- Make sure the hypervisor used is correct in the configuration , either qemu or kvm
<domain type=’kvm’>
or
<domain type=’kvm’>
- Use virtio drivers if the guest is paravirtulized (http://www.ibm.com/developerworks/linux/library/l-virtio/index.html?ca=dgr-lnxw97Viriodth-LX&S_TACT=105AGX59&S_CMP=grlnxw97 , http://publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic=/liaat/liaatbpparavirt.htm)
./arun
Categories: Linux, Virtualization Tags: KVM, KVM Disk I/O slow, Redhat performance issue
Converting LVM virtual machine storage to image
To convert the LVM disk to qcow2 formatted disk image,
Use lvdisplay to get the Logical volume name
$ sudo lvdisplay
Use qemu-img to convert to the required image format
# qemu-img convert -O qcow2 /dev/mapper/lv_name <destination_file>.qcow2
eg:
# qemu-img convert -O qcow2 /dev/mapper/disk1 disk1.qcow2
This will be useful to replicate the virtual machines to other hardware.
./arun
Categories: Linux, Virtualization Tags: KVM, LVM, qcow2
IPv6 configuration for KVM guests
It is simple and straight forward to enable IPv6 on KVM guests
Configure the host machine with IPv6 Address on the bridge interface
cat ifcfg-br0
IPV6INIT=yes
IPV6ADDR=xxxx.xx::10
IPV6_DEFAULTGW=xxxx.xx::1
IPV6_AUTOCONF=no
Configure the interface on virutal machines with ipv6 address
cat ifcfg-eth0
IPV6INIT=yes
IPV6ADDR=xxxx.xx::11
IPV6_DEFAULTGW=xxxx.xx::1
IPV6_AUTOCONF=no
Add the the necessary firewall rules to ip6tables on the host machine
-A FORWARD -m physdev –physdev-is-bridged -j ACCEPT.
./arun
Categories: IPv6, Linux, Networking, Virtualization Tags: kvm bridge ipv6
NAT with port forwarding on Virtual Box
You can use the host-only-adapter networking, if you require the virtual machine to be accessible only from the host machine. In this case your virtual machine will not have access to anywhere outside the host. Read more about virtual box networking at http://www.virtualbox.org/manual/ch06.html
On the other hand NAT enabled interface can communicate with clients outside the host, but the host cannot access the services on the virtual machine directly. We need to enabled port forwarding with NAT interface to achieve this.
On Linux:
If you need to have ssh accessible from host machine to virtual machine,
$ VBoxManage modifyvm "VM Name" --natpf1 "openssh,tcp,127.0.0.1,2222,,22"
Where –natpf1 is for adapter1, openssh is just a anme, and you can also input the ip address of virtual machine like
$ VBoxManage modifyvm "VM Name" --natpf1 "openssh,tcp,127.0.0.1,2222,10.0.2.20,22"
(assume the virtual machine ip is 10.0.2.20)
Now you can make ssh connection from host like, $ ssh localhost -p 2222
We can use same port number for port number about 1024 , say for a service running on port 8080 we can forward it with
VBoxManage modifyvm "VM Name" --natpf1 "proxy,tcp,127.0.0.1,8080,10.0.2.20,8080"
These rules will be added to the .VirtualBox/Machines/machine_name/machine_name.xml file like:
< Forwarding name="openssh" proto="1" hostip="127.0.0.1" hostport="2222" guestip=10.0.2.20 guestport="2222"/>
You can forward connection to any port on virtual host like this.
Make sure that the virtual machine interface is closed and the vm is not running while you change it, otherwise the changes will not take effect.
On Windows:
VBoxManage setextradata "VM Name" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP
VBoxManage setextradata "VM Name" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22
VBoxManage setextradata "VM Name" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222
* Replace VM Name with your virtual instance name
./arun
Categories: Linux, Virtualization Tags: NAT with virtual box, portforwarding with virutal box
Convert KVM images to Virtual Box (VDI)
It took a while to get the KVM image working with Sun virtual box.
The advantages of a virtual box image is, you can run it on any platform (linux, mac or windows), works without virtualization enabled processor and will work on a 32bit machine
Here are the steps to create an image that works with virtual box:
From the KVM installed server
$ qemu-img convert kvm-os.img -O raw kvm-os-raw.img
Copy the image (kvm-os-raw.img) to virtual box machine
$ VBoxManage convertfromrow --format VDI kvm-os-raw.img vbox.vdi
Converting from raw image file=”kvm-os-raw.img” to file=”vbox.vdi”…
Creating dynamic image with size ….
This will create a virtual box compatible image
Incase required you can compact the image to actual size
$ VBoxManage modifyvdi /home/user/vbox.vdi compact
0%…10%…20%…30%…40%…50%…60%…70%
Here the path to vdi image must be absolute.
Now you can create a new virtual machine from virtual box console/command line, with the vdi image as storage.
Boot the machine and hope for the best ![]()
But it wasn’t easy for me even after this beautiful vdi image, boot hangs with a kernel panic, file system not found.
To fix this issue, we need to recreate the initrd image in the virtual machine:
instructions to do it for redhat:
- Boot the virtual machine in rescue mode with Redhat CD
> linux rescue
# chroot /mnt/sysimage
take a backup of existing initrd
# cp /boot/initrd-2.6.xxx.img initrd-2.6-old
create new initrd image
# mkinitrd -v /boot/initrd-new.img kernel-version
// eg: mkinitrd -v /boot/initrd-new.img 2.6.18-194.8.1.el5
edit the grub configuration and replace the initrd image name with new one
# cat /boot/grub/menu.lst
Reboot the machine and see if it boots
Hope this will be helpful for someone, I spent hours to get it working
.
./arun
Categories: Linux, Virtualization Tags:
Netboot KVM guest
To install the KVM guest operating system (eg: RHEL) from the network
- Create the bridge interface on the KVM host machine (http://arunnsblog.com/2010/04/09/virtualization-with-kvm-under-redhat-linux-migrate-vmware-virtual-images-to-kvm/)
- Make sure that the gateway is configured in the bridge interface (GATEWAY=).
- Make sure that you have the required rules added to the iptables:
-A FORWARD -m physdev --physdev-is-bridged -j ACCEPT
- Create virtual machine with supported network interface type (pcnet, rtl8139 used to work)
- Add the mac address of kvm guest to the dhcp server
Start the virtual machine and see if it can kick start from the network.
You can trouble shoot with a tcpdump on the KVM host machine:
tcpdump -i br0 port bootps -vvv -s 1500
./arun
Categories: Linux, Virtualization Tags: BOOTP, DHCP, KVM, TFTP, Virtualization
KVM image on LVM
Convert qcow2/raw images to LVM logical volume to use with KVM:
- Convert the qcow2 image to raw format (if it is in qcow2)
$ qemu-img convert image.qcow2 -O raw image.raw
- Create the physical volume for LVM
# pvcreate /dev/sdb
(replace the device with correspond to the system)
- Create the volume group
# vgcreate pool1 /dev/sdb
(replace pool1 with the name as required)
- Create Logical volume with same size as the image
# lvcreate -n justaname --size 50G pool1
(replace justaname and size as per the requirements)
Use lvresize incase you required the change the volume size
- dd the raw image to lvm logical volume
# dd if=image.raw of=/dev/pool1/justaname bs=8M
(Change the block size according to the requirements.
Edit the kvm xml configuration for the corresponding virutal machine to use the logical volume
< disk type='block' device='disk' >
< source dev='/dev/pool1/justaname'/ >
< /code >
./arun
Categories: Linux, Virtualization Tags: KVM LVM Virtualization
Virtualization with KVM under Redhat Linux, Migrate VMware virtual images to KVM
KVM (Kernel Based Virtual Machine) – http://www.linux-kvm.org/ , is one of the best choice to do virtualization under linux, and especially without extra licensing cost.
Install KVM
To install KVM on redhat enterprise linux:
- Install the machine with 64 bit version of EL5
- Register the machine with redhat (rhn_register)
- enable virtualization entitlement for the system in RHN
- Install KVM package:
# yum install kvm
# yum install virt-manager libvirt libvirt-python python-virtinst
Migration VMware virtual machines to KVM:
- Login to the vmware server
- make single vmdk image with vmware-diskmanager
eg:
# vmware-vdiskmanager -r path_to_vmware_virtualmachine.vmdk -t 0 destination_file_vmware.vmdk
Creating disk ‘destination_file_vmware.vmdk’
Convert: 100% done.
Virtual disk conversion successful.
- Copy the image to KVM server
- Convert the image to KVM supported format with qemu-img
# qemu-img convert destination_file_vmware.vmdk -O qcow2 kvm_supported.img
Create bridge interface to to share the network card.
* This section assumes that you have two nic in your server and would need to have bonding along with bridging and you have static ip required for virtual machines. incase you using dhcp and single network interface create the bridge interface accordingly.
- Create bridge interface:
$ cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
IPADDR=11.11.11.11
NETMASK=255.0.0.0
GATEWAY=1.1.1.1
- Configure the bond interface:
$ cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BRIDGE=br0
ONBOOT=yes
- Configure eth0 and eth1
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
MASTER=bond0
SLAVE=yes
ONBOOT=yes
- Change bonding to active-backup , i have faced some issues with xor – might be silly to fix
# cat /etc/modprobe.conf
options bond0 miimon=100 mode=active-backup
- Restart network interface and check the bridge status
# brctl show , it will show bond0 as an enabled interface.
Create KVM virtual machine:
- it can be done from the command line or with virt-manager
- open virt-manager application
- click create new, and select qemu hypervisor
- during disk selection, choose the converted vmware image path
- done, just start it.
Register the virtual machine with Redhat, save some license ![]()
- enabled network tools entitlement in RHN
- install the package rhn-virtualization-host on the core machine
– # yum install rhn-virtualization-host
- enable virtualization under the properties of host in RHN
- execute the following commands on host machine
# rhn_check
# rhn-profile-sync
- login to virtual machine and use rhn_register, now it will be registered as a virtual machine under the core license.
./arun
Categories: Linux, Virtualization Tags: Bonding with virutliaztion, KVM, Redhat viruatlization
Enable Full virtualization in HP DL servers (Intel)
You need to enable hardware virtualization in BIOS if you want to create Fully virtualized instances.
Enter BIOS (F9) –> Advanced Options –> Processor Options –> Enable intel Virtualization Technology
Now you should be able to create Fully virtualized virtual machines from XEN or similar virtualization packages without OS modifications.
./arun
Categories: Linux, Virtualization Tags: xen hypervisor fully virtulized guest





