Tag Archives: rhel5

CentOS 5 on KVM: reduce host CPU load

To reduce host CPU usage with a CentOS 5 VM on KVM is important to add

divider=10

to grub.conf as kernel parameter

kernel /vmlinuz-2.6.18-348.1.1.el5 ro root=LABEL=/ console=ttyS0,115200 divider=10

This will reduce the internal kernel timer from 1000 Hz to 100 Hz.

Although additional parameters are not required, the divider=10 parameter can still be used. Guests with this parameter will produce less CPU load in the host, but will use more coarse-grained timer expiration. (http://s19n.net/articles/2011/kvm_clock.html)

On MicroServer the CPU load reduce is quite visible:

MicroServer CPU usage

MicroServer CPU usage (made with http://www.observium.org/)

For more info read http://s19n.net/articles/2011/kvm_clock.html.

 

Conversione VM RHEL5 da IDE a VirtIO

Recentemente ho avuto necessità di convertire una macchina virtuale KVM con Red Hat Enterprise 5.7 installata originariamente con emulazione IDE al più performante layer di I/O VirtIO.

Il kernel di RHEL5 (e derivate) per quanto vecchiotto supporta già VirtIO sia per i dischi, per la rete che genericamente per PCI e channels.

Per prima cosa, a macchina avviata ancora in modalità IDE è necessario aggiornare l’initrd inserendo il supporto ai moduli virtio desiderati. Ricordarsi di inserire virtio_blk per lo storage, altrimenti la VM modificata non sarà in grado di eseguire il boot su un disco VirtIO.

Da root eseguire il comando:

mkinitrd --with virtio_pci --with virtio_blk --with virtio_net --with virtio_balloon --with virtio_console --with virtio -f /boot/initrd-$(uname -r).img $(uname -r )

Una volta fermata la macchina, tramite virsh o la gui virt-install sarà sufficiente rimuovere il disco IDE e il controller e ri-aggiungere il disco selezionando come modalità virtio.

Se l’installazione di RHEL5 utilizza, come è di default, le LABEL (oppure un UUID) per identificare le partizioni dei dischi la macchina è pronta per essere utilizzata, basta semplicemente avviarla.
Se grub o l’fstab utilizzassero i nomi de devices (es. hda2) essi andranno modificati secondo lo standard vd (es. hda[n] -> vda[n], hdb -> vdb ecc…)