Header image alt text

Kevin's Thoughts!

Maybe you agree, maybe you don't… find out!

KVM Paravirtualization

Posted by Kevin on August 28, 2011
Posted in Tech Talk  | Tagged With: , , , | No Comments yet, please leave one

In previous post I talked building my KVM machine. This was semi straight forward, turn on visualization support in the kernel , build a image (see my KVM Virtualization post) and boot.  Pretty easy to get a user-based networked server up and running.  In its simplest form, the command:

kvm -hda base-vm.img -curses -no-reboot

Starts a virtual machine whose image is stored in the .img file, with a text based console, and will return to the command prompt when the virtual machine is shutdown or rebooted.  The virtual machine will see the image file as its /dev/sda disk.  An eth0 device will be presented (presuming the image is built with a supported driver, like rtl8139) along with dhcp and name services being provided by the kvm hypervisor (which is what the kvm command really is).  If you are logged into this machine, there would be little to give you any hint that you were running in a VM rather than on dedicated hardware.

That’s all good, but its somewhat inefficient.  Linux and KVM support a number of paravirtualization features which reduce overhead within the guest support – if the guest enables such support.  My guest have been configured to use as much of this support as possible, giving up most chances of running native, but benefiting from a reduced kernel size and more efficient execution.

There are several kernel configuration switches that need to be set to fully utilize this support:

Under “Paravirtualized guest support” select:
KVM paravirtualized clock (CONFIG_KVM_CLOCK=Y)
Enable Paravirtualization code (CONFIG_PARAVIRT=Y)
Under “Device Drivers”, “Block Devices”, select Virtio block driver (CONFIG_VIRTIO_BLK=Y)
Under “Device Drivers”, “Network Device Support”, select Virtio network driver (CONFIG_VIRTIO_NET=Y)

So far, nothing you have done will stop your kernel from booting on real hardware, although it will have some extra overhead with the Enable Paravirtualization code feature on.  However, the next step commits you to running as a guest only:

You can remove all SCSI disk, Serial ATA, and Parallel ATA support as well as all network device support (I leave Network Console logging support enabled by habit, although I’ve yet to use it).  Presuming you use LVM, you will need to leave Device Mapper Support enabled.

Since we have eliminated all ATA and SCSI devices, obviously /dev/sda will no longer exist.  It has been replaced by /dev/vda (virtual disk #1).  You will need to change your /etc/fstab file to reference /dev/vda instead of /dev/sda, and change grub’s menu.lst and device.map file via your favorite editor.  If you forget this step, just boot the minimal.iso – it supports virtio devices – and fix these entries.

Now change your startup command to look like:

kvm -drive file=base-vm.img,if=virtio,boot=on -net nic,model=virtio -curses -no-reboot

Notice when you boot that there are no references to “eth0”, but the device will be there, now 100% virtual without any emulation overhead.  Likewise for storage, everything will be presented without the overhead of emulating SCSI or ATA.  Your kernel will also take advantage of many paravirtualization improvements now that you gave it the opportunity to.

Happy efficient computing!


KVM Bridging

Posted by Kevin on August 28, 2011
Posted in Tech Talk  | Tagged With: , , , , , | No Comments yet, please leave one

Spent more than a little time banging my head against the wall and freaking out that Google couldn’t help.  What was the problem?  I couldn’t get virtual network bridging to work between my KVM based guest and the rest of the world.

If I started my a KVM with -net user (or let it default), all was fine.  By default, KVM will create a private network and provide dhcp and name services to the virtual instance.  You can either use a dhcpd client or just hardcode ip addresses in the defined 10.0.2.x space.  However, this “user” mode is designed as its named – it allows the VM to get out to the Internet, but doesn’t allow anything in.  So it works great for building your image, and is even fine for running things like BOINC, but is rather limited.  For instance, you can not SSH into the machine, so it better either run things automagically, or you will need to start it in a window.

For reasons unknown, if I started a KVM using a tun/tap (tap in this case) device it behaved oddly.  Once in awhile, I’d see an eth0 device appear during boot (seen via reviewing the boot log using “dmesg”).  As I tried with various “model=” options, I would see the corresponding driver load and sometimes a reference to eth0, but seldom anything that “ifconfig” could see.

Per most of the documentation I found online, the following startup command should have worked:

kvm -net nic,macaddr=00:00:00:00:01:00,model=virtio -net tap,ifname=tap0,script=no -drive file=test.img,if=virtio,boot=on -curses -no-reboot

And in fact, on those odd occasions when some variation of the above actually generated an eth0 device, it would appear with the macaddr specified.  Still, in those cases, I could not ping or web (via links) outside to the world.  (fyi:  ping using ICMP, webbing using TCP, so it was good to check both given KVMs blocking of ICMP when using -net user).   It was also freaky inconsistent.  At one point I had two KVMs with eth0’s showing up on one but not the other.  I did a side-by-side kernel build comparison and the kernels were identical.  I did several reboots of each KVM, several kernal builds including a “make clean” pass, and it would work on one but not the other.  Even when it did work, at the host level I often saw errors about the bridge receiving packets with its own address.  I thought those were referring to TCP/IP addresses (and went down a path trying to figure that out), but in hindsight it was referring to MAC addresses!

Finally I decided to ignore the web help, and just start at the beginning using the man pages.  Strange how that sometimes helps <smile>.

The breakthrough occured when I used the ever so slightly simplier command:

kvm -net nic,model=virtio -net tap,ifname=tap0,script=no -drive file=test.img,if=virtio,boot=on -curses -no-reboot

Note, the only difference is the lack of specifying the mac address.

Here are the relevant bits from /etc/conf.d/net:

tunctl_tap0=”-u root”
bridge_br0=”eth1 tap0 tap1 tap2 tap3 tap4 tap5 tap6 tap7″
routes_br0=”default gw″

A couple of notes:  Using a mac address of all zeros generates a boot time error about not being able to reassign the hardware address the mac address represents.  Any non-all-zero address works fine.  Also, the bridge will take on the mac address of the first tap device defined.  Also, this is a test environment, so I’ve given myself a lot of tap devices to play with.  So, at the host level, we see:

ifconfig br0
br0       Link encap:Ethernet  HWaddr 00:00:00:00:01:00
          inet addr:  Bcast:  Mask:
          RX packets:75628 errors:0 dropped:4930 overruns:0 frame:0
          TX packets:22841 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:54238310 (51.7 MiB)  TX bytes:8638206 (8.2 MiB)

ifconfig tap0
tap0      Link encap:Ethernet  HWaddr 00:00:00:00:01:00
          RX packets:28733 errors:0 dropped:0 overruns:0 frame:0
          TX packets:53601 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:35590127 (33.9 MiB)  TX bytes:5638527 (5.3 MiB)

And within the KVM we see:

ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 52:54:00:12:34:56
          inet addr:  Bcast:  Mask:
          RX packets:44833 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28551 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3881750 (3.7 MiB)  TX bytes:35412015 (33.7 MiB)

Much to my delight – this worked!  KVM apparently uses the tap device, but assigns it a unique MAC address (the HWaddr shown in the ifconfig output).  Now all generated IP packets have different MAC source addresses from the bridge and everything works as expected!  My guest KVM can ping, web, and do anything else it wishes with the outside world (at least until I start configuring iptables, but that is another post).  One glitch remained, the outside world didn’t know how to get the virtual machine.  A quick route add -host gw allowed me to ssh into the vm.  Still couldn’t get to it from a windows machine though.  Emerging and starting mrouted seem to have fixed that.  Not 100% sure that was needed, but its working, and at this point I’m going with “if its not broke, don’t fix it” as a philosophy.

Сегодня мы снова идем на День Рождения к нашей бабушке Пенни! Ей исполняется 86 лет.

Габи приготовила для нее подарок:

Ну и чем  у меня дома на арт-студия?!

А вот и подарок готов!

Габи, правда, сильно расстраивается, что спинку “испортила”, сильно много цветочков нарисовала. А мне так даже нравится!

Гламурное кисо такое получилось! 🙂 Скромненькая такая кошечка. 🙂

Вообще-то я написала этот пост еще прошлым  летом. Один хороший человек попросил написать статью про американских пенсионеров для городской (одной из российских) газет. А у нас как раз маме Кевина только-только тогда исполнилось 85. Вот про нее и написалось.
Так что, если интересно,

Моя свекровь родилась в 1925 году. Моя бабушка родилась в 1924 году. Бабушки давно нет в живых, но я помню ее всегда: бабушкой, доброй, ласковой, уютной, вокруг которой всегда собиралась вся семья: она связывала вместе самых дальних родственников, а теперь, когда ее нет, и самые близкие уже не такие близкие… Вязанные кофточки , варежки и носочки, пирожки и блинчики каждый день, все лето – на даче, в огороде…Она умела слушать, она умела рассказывать, она обожала нас – внуков, а мы отвечали ей взаимностью… И я помню ее – бабушкой. Старенькой, маленькой, с лучиками-морщинками вокруг добрых глаз.

опубликованное пользователем изображение

И сейчас, когда я смотрю на свою свекровь, которой исполнилось на днях 85 лет, я не могу перестать сравнивать. И спрашивать себя риторически: «Как?» и «Почему?»
Свекровь зовут Пенни. Вообще-то ее имя Бесси Энн, но все всегда ее звали Пенни. Сама она уверяет, что это потому, что когда-то в юности у нее были туфельки с блестящими медными кругляшками, похожими на монетки 1 цент – пенни. Но ее муж, наш добрейший американский дедушка, раскрыл секрет: это имя очень подходит ей потому, что она очень любит денежки: не поленится нагнуться и поднять пенни на улице, и пустит ее в оборот! 
Когда они познакомились, его пальцы могли соединиться в кольцо на ее талии. Сейчас она живет одна (Гарри скончался три года назад) и конечно, уже не такая стройная, как прежде. Но и до пресловутой «тучности» американцев ей далеко, хотя она и любит побаловать себя шоколадом или печеньем. Ее дом — кухня, шесть комнат, две ванных и бейсмент — в идеальной чистоте. Что удивительно при ее страсти к коллекционированию. Она коллекционирует мягкие игрушки beanie babies, статуэтки, кружки, корзинки, декорирует дом к каждому сезону или празднику и у нее куча игрушек, которыми играли еще мой муж с его братом, их старшие дочери, и сейчас играют мои дети.

опубликованное пользователем изображение
Я люблю фотографировать ее сад в разное время года, но особенно весной, когда все цветет. И как замечательно, что Пасхальные праздники обычно выпадают на солнечные теплые дни, потому что тогда мои дети ищут по всему саду, в цветущих кустах и траве спрятанные разноцветные пластиковые яйца, которые она не поленилась разложить в саду заренее накануне.

опубликованное пользователем изображение

опубликованное пользователем изображение
А потом дома мы открываем их и достаем бумажки, на которых написаны названия подарков, и для кого этот подарок. Подарков – всякой всячины – достается в приличном количестве всем: и мне, и папе, и пятнадцатилетней Насте, и четырехлетней Габи, и двухлетнему Фрэнку… И даже собаке и кошкам перепадает порой. А потом наступает бабушкина любимая часть: она спрашивает, кому что понравилось больше всего, и тогда торжественным голосом рассказывает, где она это нашла и сколько заплатила. Меня это давно не шокирует, я знаю, что это предмет ее гордости: умение искать и находить ценные и редкие, или просто безумно красивые или приятные вещи на гаражных и прочих распродажах за копейки. То есть, за пенни morgalik.gif

опубликованное пользователем изображение

Ее невозможно просто пригласить в гости, или нагрянуть к ней, не договорившись заранее. Она должна внести все события в свой календарь, чтобы не запутаться и ничего не забыть. Ведь ей 85! Чем же заполнен ее календарь, помимо визитов к доктору и встреч с подругами?.. Да много чем! Два раза в неделю она ходит в бассейн (и да, занимается аквааэробикой и может проплыть по полосе десять раз туда и обратно разными стилями), два раза в неделю – тай-чи, если не получается с тренером и в группе, то под видеокассету, но не пропуская ни дня! Два раза в неделю она волонтерит в благотворительной организации, которая собирает, сортирует и раздает еду для малоимущих. И еще несколько часов в неделю занимается с ребятишками из подготовительного класса, у которых что-то не получается, а у родителей нету денег на репетиторов. И конечно, помогает своим соседям и друзьям, если у них есть проблемы со здоровьем.
Да, она водит машину: общественного транспорта здесь просто нет.

Мы навещаем ее через выходные.Разумеется, вести хозяйство одной нелегко, поэтому у нее всегда готов список дел: для моего мужа, для меня, для моей старшей дочери. Готовить ей тоже уже лень , поэтому мы или привозим что-то с собой, или везем ее в ресторан – но непременно с купонами на скидку. Она их вырезает ото всюду, и пользоваться не забывает. И мне каждые две недели передает конверт, полный купонов. Я, к стыду своему, их почти всегда в этом конверте и забываю .
Иногда она рассуждает о том, что может быть, пришла пора для нее перебраться в «дом престарелых». (Я не могу написать это без кавычек, потому что, конечно же, местные заведения ничего общего не имеют с подобными заведениями, известными нам.) Да, мы предлагали ей перебраться к нам, но она твердо уверена в правиле двух хозяек на одной кухне. А на «дом престарелых сврей мечты» давно откладывает деньги. Конечно, она хочет в частный, и два у нее давно на примете. Там она будет жить как бы в своей квартирке, с соседями, такими же стариками, плюс у них будет место, куда они в любое время дня могут пойти покушать (или заказать принести в комнату), и медицинские работники рядом. Да, она может взять туда с собой своего питомца: попугайчика в клетке.  До тех пор, пока она владеет своим телом и разумом, она свободна в своих пердвижениях.
Но ведь известно, что дОма и стены лечат, поэтому она не торопится расстаться со своим садом, домом, своими коллекциями. Так что поздравления с 85-летием она принимала от своих сестер из другого штата и старшего сына из другого города по телефону, а мы повезли ее в ресторан – завтракать! И она позвала нас с Настей, моей старшей дочкой 15 лет, в комнату, чтобы мы помогли ей определиться, какие бусы подходят больше к ее наряду (мы выбрали одни из 7 подходящих, еще штук 30 висит на крючочках возле ее зеркала), накрасила губи и брови, и скоро уже наслаждалась кофе, омлетом и именинным тортом с карамелью, который в этом ресторане подают бесплатно тем, кто празднует день рождения. И не забыла достать из сумочки купон на скидку в пять долларов, когда принесли счет

А потом повезла нас в аквапарк, где плавала три часа без устали — с сыном наперегонки, и с малышами в безопасных жилетах.
А потом дома достала из холодильника арбуз…
опубликованное пользователем изображение

…А я все смотрю на нее, радуюсь, и опять и опять  вспоминаю свою бабушку. Которой нет со мной уже много лет. Меня не оставляет чувство, что кто-то нас обокрал. Украли ее здоровье, годы ее жизни, право наслаждаться и дышать полной грудью. За что?.. Ведь она тоже была красавицей. И наверняка длинные пальцы моего двухметрового деда могли сомкнуться кольцом на ее талии…