<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8388514</id><updated>2012-01-25T00:01:07.494-08:00</updated><title type='text'>Tales of a Code Monkey</title><subtitle type='html'>Rants about Open Source virtualization, and whatever else comes to mind.  The following is my opinion and does not represent the opinions of IBM in any way.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>75</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8388514.post-6847287617219220107</id><published>2008-06-18T14:21:00.000-07:00</published><updated>2008-06-18T14:31:55.017-07:00</updated><title type='text'>Red Hat announces "next-generation" virtualization based on KVM</title><content type='html'>&lt;p&gt;Today, at the &lt;a href="http://www.redhat.com/promo/summit/2008/virtualization/?intcmp=70160000000HTJJ"&gt;Red Hat Summit&lt;/a&gt;, Red Hat announced three virtualization initiatives including &lt;a href="http://www.ovirt.org"&gt;oVirt&lt;/a&gt;.  The press release is &lt;a href="http://www.redhat.com/about/news/prarchive/2008/virtualization.html"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Some choice quotage:&lt;/p&gt;

&lt;blockquote&gt;
KVM technology has rapidly emerged as the next-generation virtualization technology, following on from the highly successful Xen implementation.
&lt;/blockquote&gt;

&lt;p&gt;Another good one:&lt;/p&gt;

&lt;blockquote&gt;
We continue to see huge improvements in functionality, performance and time to market because of our close relationship with our open source partners. For example, Intel and IBM have worked with us for many years covering virtualization technologies that span from Red Hat Enterprise Linux 5 to today's KVM-based announcements.
&lt;/blockquote&gt;

&lt;p&gt;And of course:&lt;/p&gt;

&lt;blockquote&gt;
"IBM works closely with Red Hat and the open source community to drive innovation within the Linux kernel," said Daniel Frye, vice president, open systems development at IBM. "IBM has a heterogenous approach toward virtualization, with KVM one of several options. KVM leverages the core features of the Linux kernel, including paravirtualization interfaces contributed by IBM engineers. By combining Linux virtualization infrastructure with open management interfaces such as CIM and libvirt, we gain a solution that eliminates lock-in and open source community innovations, we are able to offer our customers a solution with outstanding performance, scalability and agility."
&lt;/blockquote&gt;

&lt;p&gt;If you want to see what all the fuss is about, check out &lt;a href="http://kvm.qumranet.com/kvmwiki"&gt;KVM&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-6847287617219220107?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/6847287617219220107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=6847287617219220107' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/6847287617219220107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/6847287617219220107'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2008/06/red-hat-announces-next-generation.html' title='Red Hat announces &quot;next-generation&quot; virtualization based on KVM'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-396905120938814827</id><published>2008-06-09T12:20:00.000-07:00</published><updated>2008-06-09T12:26:28.885-07:00</updated><title type='text'>KVM and Green Computing</title><content type='html'>&lt;p&gt;A ran across &lt;a href="http://www.networkworld.com/research/2008/060908-green-virtual-machines.html"&gt;this article&lt;/a&gt; today from Tom Henderson that draws attention to the fact that most existing hypervisors (ESX, Xen, Hyper-V) do not support frequency scaling and therefore are not very eco-friendly.&lt;/p&gt;

&lt;p&gt;This is partly true.  There has been some recent work in Xen to add deep sleep state support and I believe even some work on frequency scaling.  It is certainly not true though that virtualization and power-consciousness are at odds with each other.  KVM is able to leverage all of the work that's been invested into Linux to manage power wisely.  Good power management does not cause any sort of performance drop.  Reducing the performance of your workload is only going to make the machine run longer and consume more power.&lt;/p&gt;

&lt;p&gt;The reason most hypervisors don't support power management is that it's very hard.  When inventing a new Operating System, there's a lot of things you have to focus on before you can even start looking at power management.  Again, we see the benefits of using an existing Operating System for virtualization.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-396905120938814827?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/396905120938814827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=396905120938814827' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/396905120938814827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/396905120938814827'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2008/06/kvm-and-green-computing.html' title='KVM and Green Computing'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-742225634789930207</id><published>2008-05-09T15:16:00.001-07:00</published><updated>2008-05-09T16:01:19.705-07:00</updated><title type='text'>The truth about KVM and Xen</title><content type='html'>&lt;p&gt;When I saw this &lt;a href="http://virtualization.com/news/2008/05/09/kvm-vs-xen-who-will-win-the-fight/"&gt;article&lt;/a&gt; in my inbox, I knew I shouldn't bother reading it.
I really couldn't help myself though.  I'm weak for gossip and my flight was
delayed so boredom got the best of me.&lt;/p&gt;

&lt;p&gt;I can't blame the tech media for the wild reporting though.  The situation
surrounding KVM, Xen, and Linux virtualization is pretty confused right now.
I'll attempt to do my best to clear things up.  I'll make an extra disclaimer
though that this is purely my own opinions and does not represent any official
position of my employer.&lt;/p&gt;

&lt;p&gt;I'm think we can finally admit that we, the Linux community, made a very big
mistake with Xen.  Xen should have never been included in a Linux distribution.
There, I've said it.  We've all been thinking it, have whispered it in closed
rooms, and have done our bests to avoid it.&lt;/p&gt;

&lt;p&gt;I say this, not because Xen isn't useful technology and certainly not because
people shouldn't use it.  Xen is a very useful project and can really make a
huge impact in an enterprise environment.  Quite simply, Xen is not, and will
never be, a part of Linux.  Therefore, including it in a Linux distribution has only led to massive user confusion about the relationship between Linux and Xen.&lt;/p&gt;

&lt;p&gt;Xen is a hypervisor that is based on the Nemesis microkernel.  Linux
distributions ship Xen today and by default install a Linux guest (known as
domain-0) and do their best to hide the fact that Xen is not a part of Linux.
They've done a good job, most users won't even notice that they are running an
entirely different Operating System.  The whole situation is somewhat absurd
though.  It's like if the distributions shipped a NetBSD kernel automatically
and switched to using it when you wanted to run a LAMP stack.  We don't ship a
plethora of purpose-built kernels in a distribution.  We ship one kernel and
make sure that it works well for all users.  That's what makes a Linux
distribution Linux.  When you take away the Linux kernel, it's not Linux any
more.&lt;/p&gt;

&lt;p&gt;There is no shortage of purpose-built kernels out there.  NetBSD is a
purpose-built kernel for networking workloads.  QNX is a purpose-built kernel
for embedded environments.  VxWorks is a purpose-built kernel for real-time
environments.  Being purpose-built doesn't imply superiority and Linux
currently is very competitive in all of these areas.&lt;/p&gt;

&lt;p&gt;When the distros first shipped Xen, it was done mostly out of desperation.
Virtualization was, and still is, the "hot" thing.  Linux did not provide any
native hypervisor capability.  Most Linux developers didn't even really know
that much about virtualization.  Xen was a pretty easy to use purpose-built
kernel that had a pretty good community.  So we made the hasty decision to
ship Xen instead of investing in making Linux a proper hypervisor.&lt;/p&gt;

&lt;p&gt;This decision has come back to haunt us now in the form of massive confusion.
When people talk about Xen not being merged into Linux, I don't think they
realize that Xen will *never* be merged into Linux.  Xen will always be a
separate, purpose-built kernel.  There are patches to Linux that enable it to
run well as a guest under Xen.  These patches are likely to be merged in the
future, but Xen will never been a part of the Linux kernel.&lt;/p&gt;

&lt;p&gt;As a Linux developer, it's hard for me to be that interested in Xen--for the
same reasons I have no interest in NetBSD, QNX, or VxWorks.  The same is true
for the vast majority of Linux developers.  When you think about it, it is
really quite silly.  We advocate Linux for everything from embedded systems,
to systems requiring real-time performances, to high-end mainframes.  I trust
Linux to run on my dvd player, my laptop, and to run on the servers that manage
my 401k.  Is virtualization so much harder than every other problem in the
industry that Linux is somehow incompatible of doing it well on its own?  Of
course not.  Virtualization is actually quite simple compared to things like
real-time.&lt;/p&gt;

&lt;p&gt;This does not mean that Xen is dead or that we should have never encouraged
people to use it in the first place.  At the time, it was the best solution
available.  At this moment in time, it's still unclear whether Linux as
hypervisor is better than Xen in every scenario.  I won't say that all users
should switch en-masse from Xen to Linux for their virtualization needs.  All
of the projects I've referenced here are viable projects that have large user
bases.&lt;/p&gt;

&lt;p&gt;I'm a Linux developer though, and just as others Linux hackers who are trying
to make Linux run well in everything from mainframes to dvd players, I will
continue to work to make Linux work well as a hypervisor.  The Linux community
will work toward making Linux the best hypervisor out there.  The Linux distros
will stop shipping a purpose-built kernel for virtualization and instead rely
on Linux for it.&lt;/p&gt;

&lt;p&gt;Looking at the rest of the industry, I'm surprised that other kernels haven't
gone in the direction of Linux in terms of adding hypervisor support directly
to the kernel.&lt;/p&gt;

&lt;p&gt;Why is Windows not good enough to act a hypervisor such that Microsoft had to
write a new kernel from scratch (Hyper-V)?&lt;/p&gt;

&lt;p&gt;Why is Solaris not good enough to act as a hypervisor requiring Sun to ship
Xen in xVM?  Solaris is good enough to run enterprise workloads but not good
enough to run a Windows VM?  Really?  Maybe :-)&lt;/p&gt;

&lt;p&gt;Forget about all of the "true hypervisor" FUD you may read.  The real question
to ask yourself is what is so wrong with these other kernels that they aren't
capable of running virtual machines well and instead have to rely on a
relatively young and untested microkernel to do their heavy lifting?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; modified some of the text for clarity.  Flight delayed more so another round of editing :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-742225634789930207?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/742225634789930207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=742225634789930207' title='54 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/742225634789930207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/742225634789930207'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2008/05/truth-about-kvm-and-xen.html' title='The truth about KVM and Xen'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>54</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-5257629480339586266</id><published>2008-04-07T21:22:00.000-07:00</published><updated>2008-04-07T21:27:24.543-07:00</updated><title type='text'>KVM Forum 2008 Call For Presentations</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;This is the Call for Presentations for the second annual KVM Developer's Forum, to be held on June 10-13, 2008, in Napa, California, USA [1].  We are looking for presentations on KVM development, quality assurance, management, security, interoperability, architecture support, and interesting use cases.  Presentations are 50 minutes in length; there are also 25-minute mini-presentation slots available.&lt;p&gt;

&lt;p&gt;KVM Forum presentations are an excellent way to inform the KVM development community about your work, and to gather valuable  feedback about your approach.&lt;/p&gt;

&lt;p&gt;Please send your presentation proposal to the KVM Forum 2008  Content Committee at kf2008-cfp@qumranet.com by April 20th.&lt;/p&gt;

&lt;p&gt;KVM Forum 2008 Content Committee:
&lt;ul&gt;&lt;li&gt;Dor Laor
&lt;li&gt;Anthony Liguori
&lt;li&gt;Avi Kivity&lt;/ul&gt;&lt;/p&gt;

[1] http://kforum.qumranet.com/KVMForum/about_kvmforum.php
&lt;/blockquote&gt;

&lt;p&gt;On a personal note, I found KVM Forum 2007 to be one of the best run conferences I've attended.  The facilities were great and each talk was interesting.  There was a great deal of discussion during each talk.  Definitely worth the trip.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-5257629480339586266?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/5257629480339586266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=5257629480339586266' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/5257629480339586266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/5257629480339586266'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2008/04/kvm-forum-2008-call-for-presentations.html' title='KVM Forum 2008 Call For Presentations'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-8076407084130707531</id><published>2008-04-06T16:31:00.000-07:00</published><updated>2008-04-06T16:50:48.659-07:00</updated><title type='text'>KVM for the Mainframe</title><content type='html'>&lt;p&gt;kvm-65 was &lt;a href="http://marc.info/?l=kvm-devel&amp;m=120751136412110&amp;w=2"&gt;released&lt;/a&gt; today.  The most interesting feature in this release is support for the s390 architecture, more specifically, the &lt;a href="http://www-03.ibm.com/systems/z/hardware/z9ec/index.html"&gt;System z9&lt;/a&gt; line of mainframes.&lt;/p&gt;

&lt;p&gt;The s390 is the grand-daddy of virtualization.  Everything started there.  In so many ways, everything we're doing with x86 virtualization is just playing catch-up.  The new exciting features like hardware virtualization support and hardware paging support have been in s390 forever.&lt;/p&gt;

&lt;p&gt;s390 clearly has a very mature hypervisor.  What many people may not know though is that it's normal to run two hypervisors at any given time on s390.  At the bottom level, there's PR/SM which divides the machine into rather coarse partitions.  Within a PR/SM partition, you can run z/OS or Linux.  You can also run z/VM within a PR/SM partition.  z/VM is another hypervisor that allows for much more sophisticated features like memory overcommit and processor overcommit.  The user has the ability to decide how much hypervisor they need to maximize the efficiency of their workloads.&lt;/p&gt;

&lt;p&gt;Within a z/VM partition, you can run z/OS or Linux.  The beauty of s390 is that this configuration has been supported in the hardware for many years and is very fast.&lt;/p&gt;

&lt;p&gt;When Linux adopted native support for virtualization, it became obvious that this could be easily supported on the s390.  The hardware has long supported this sort of nested virtualization and the implementation turned out to be very straight forward.  It helps that the x86 virtualization extensions were inspired by a paper written about s370 almost 30 years ago :-)&lt;/p&gt;

&lt;p&gt;What do you get from a platform that has supported virtualization for longer than I've been alive?  In this very first release of KVM for s390, it already supports 64-way guests.  After two years of development, we've just gotten to supporting 16-way guests on x86.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-8076407084130707531?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/8076407084130707531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=8076407084130707531' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/8076407084130707531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/8076407084130707531'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2008/04/kvm-for-mainframe.html' title='KVM for the Mainframe'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-4710158731983981699</id><published>2008-03-19T08:40:00.001-07:00</published><updated>2008-03-19T08:54:47.930-07:00</updated><title type='text'>Exploiting live migration</title><content type='html'>&lt;p&gt;Apparently at this year's BlackHat, someone presented a paper about attacking live migration traffic.  The &lt;a href="http://www.eecs.umich.edu/techreports/cse/2007/CSE-TR-539-07.pdf"&gt;paper&lt;/a&gt; describes a tool called &lt;a href="http://www.thetechherald.com/article.php/200812/437/Xensploit-–-all-the-FUD-from-a-research-demo-you-will-ever-need"&gt;Xensploit&lt;/a&gt; which uses a man-in-the-middle attack on live migration traffic to do all sorts of bad things.  The core problem is that Xen live migration is not encrypted.  Neither is VMotion traffic so the exploits are equally applicable.&lt;/p&gt;

&lt;p&gt;While there's already been a lot of commentary suggesting that live migration shouldn't happen over insecure networks, that's not good enough for me.  If you are sending the memory of a VM over the network unencrypted, you might as well not have any passwords on any of your machines since you are exposing all of the VM's sensitive data to anyone on the network.&lt;/p&gt;

&lt;p&gt;For &lt;a href="http://www-03.ibm.com/systems/management/director/extensions/vm.html"&gt;IBM Director Virtualization Manager&lt;/a&gt;, we go to great lengths to always ensure that Xen live migration traffic is always encrypted.  As far as I know, no other Xen management tool is capable of encrypting live migration traffic.  If you are using Virtualization Manager, you are protected from Xensploit style attacks.&lt;/p&gt;

&lt;p&gt;For KVM, we were careful not to make the same mistakes that had been made for Xen.  KVM supports live migration over SSH by default and provides a mechanism for third-parties to encrypt migration traffic in anyway they please.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-4710158731983981699?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/4710158731983981699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=4710158731983981699' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/4710158731983981699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/4710158731983981699'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2008/03/exploiting-live-migration.html' title='Exploiting live migration'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-5251581109100745272</id><published>2008-01-12T10:16:00.000-08:00</published><updated>2008-01-12T10:32:29.183-08:00</updated><title type='text'>A preview of gtk-vnc v0.3.3</title><content type='html'>&lt;p&gt;Since &lt;a href="http://berrange.com/personal/diary/2007/12/new-gtk-vnc-release-032"&gt;Dan&lt;/a&gt; beat me to blogging about the &lt;a href="http://gtk-vnc.sf.net"&gt;gtk-vnc&lt;/a&gt; 0.3.2 release, I decided to co-opt him for 0.3.3 and post a full two weeks before the release actually happens :-)&lt;/p&gt;

&lt;p&gt;The 0.3.3 release will add support for the Tight encoding which is perhaps the most widely supported compressed encoding out there.  This was really the last piece in making gtk-vnc a first class VNC client supporting all the protocol options that one would expect a good client to support.  Much to my surprise, 0.3.3 will also contain a Firefox plugin that allows a VNC widget to be embedded within your web browser thanks to &lt;a href="http://annexia.org/"&gt;Rich Jones&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At first, a VNC web-browser plugin may sound like a silly idea.  Of course, both RealVNC and TightVNC ship a Java applet VNC client.  Clearly, there is demand for embedding a VNC session within a web browser.  Besides the obvious concerns about performance, Java applets are severely limited in what they can do.  You cannot grab the mouse and you cannot grab arbitrary key events.  You really can't build a first class VNC client as a Java applet.&lt;/p&gt;

&lt;p&gt;With a gtk-vnc based plugin, you can have a first class VNC client in your web browser.  An exciting application of such a technology would be a rich web-based management application for virtualization.  Things that were not possible in Java, like full-screening a VNC session, supporting copy/paste and drag-n-drop, are all within the realm of possibility using a gtk-vnc plugin.&lt;/p&gt;

&lt;p&gt;There's still a fair bit of work to do to harden the plugin and gtk-vnc, such that it could be trusted to be invoked by any web page, but I'm looking forward to see what this leads to.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-5251581109100745272?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/5251581109100745272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=5251581109100745272' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/5251581109100745272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/5251581109100745272'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2008/01/preview-of-gtk-vnc-v033.html' title='A preview of gtk-vnc v0.3.3'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-8585860457218867866</id><published>2007-12-05T14:23:00.000-08:00</published><updated>2007-12-05T14:38:07.544-08:00</updated><title type='text'>First release of extboot</title><content type='html'>&lt;p&gt;Today I released the first set of patches for &lt;a href="http://lists.gnu.org/archive/html/qemu-devel/2007-12/msg00128.html"&gt;extboot&lt;/a&gt;.  extboot is an option ROM that allows booting a guest from virtually any type of block device.&lt;/p&gt;

&lt;p&gt;Historically, the PC BIOS is only capable of booting from IDE devices.  The PC BIOS doesn't need a special driver for every type of IDE controller simply because every IDE controller supports a compatibility mode that dates back to the earliest IBM PCs.  The PC BIOS uses this compatibility mode to access the disk thus avoiding having to support dozens of different IDE controllers.  When SCSI was introduced, to allow these devices to used for boot, option ROM support was added to the PC BIOS.  Every PCI device can provide a piece of ROM memory that the BIOS runs before booting.  These ROMs can do horrible things to overwrite portions of the BIOS and trick the BIOS and bootloaders into thinking they are booting from an IDE device when it's really booting from a SCSI device.&lt;/p&gt;

&lt;p&gt;Most virtualization solutions offer support for IDE and SCSI devices and include SCSI option ROMs to enable booting from SCSI.  Some products, like Xen, also provide paravirtual disk drivers.  Up until now, these devices were not bootable.  This required guests to have a bootable IDE partition and then another PV disk partition.  It's a real pain from an administration perspective.  Beyond performance, there are a few reasons to prefer PV disk drivers over SCSI.  PV disk drivers allow unlimited support for adding new features whereas with SCSI you are limited to whatever hardware supports.&lt;/p&gt;

&lt;p&gt;extboot is an option ROM that can trick the PC BIOS into thinking that any block device is actually an IDE drive.  It can be used not only for booting from SCSI devices but also from true PV disk drivers.  This is something that, to the best of my knowledge, has never been possible in any x86 virtualization solution.&lt;/p&gt;

&lt;p&gt;extboot support should be available in QEMU, KVM, and Xen in the near future so keep an eye out for it :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-8585860457218867866?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/8585860457218867866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=8585860457218867866' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/8585860457218867866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/8585860457218867866'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2007/12/first-release-of-extboot.html' title='First release of extboot'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-8769488157301508171</id><published>2007-11-05T08:39:00.001-08:00</published><updated>2007-11-06T07:48:37.243-08:00</updated><title type='text'>CIM support for KVM and Xen</title><content type='html'>As announced on the &lt;a href="http://www.libvirt.org"&gt;libvirt&lt;/a&gt; list today:

&lt;blockquote&gt;This is the announcement of a new open-source project called libvirt-cim based on libvirt and aiming at offering the complete functionality of libvirt via a CIM provider implementing the DMTF SVPC virtualization model and released under an LGPL licence.

A CIM [1] provider is an implementation of a set of standardized interfaces (Common Information Model) whose goal are to provide well defined entry points allowing easier and interoperable management tools to be built. In the case of libvirt-cim, the goal is of course to export the SVPC virtualization model, which then can be used to manage storage, hosts and domains remotely.&lt;/blockquote&gt;

Since this new CIM provider is based on libvirt, it supports QEMU, KVM, Xen, and potentially much more.  The provider is already quite functional and was developed at IBM by Dan Smith, Jay Gagnon, and Heidi Eckhart.  See the &lt;a href="https://www.redhat.com/archives/libvir-list/2007-November/msg00023.html"&gt;announcement&lt;/a&gt; for more information. &lt;b&gt;Update:&lt;/b&gt; For clarification, the CIM provider only supports Xen today but it should very easy to add support for the other VMMs supported by libvirt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-8769488157301508171?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/8769488157301508171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=8769488157301508171' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/8769488157301508171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/8769488157301508171'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2007/11/cim-support-for-kvm-and-xen.html' title='CIM support for KVM and Xen'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-8773938724572909421</id><published>2007-10-29T15:55:00.000-07:00</published><updated>2007-10-29T16:17:55.637-07:00</updated><title type='text'>TPR patching</title><content type='html'>&lt;p&gt;I'm heading off to Japan tomorrow morning for the &lt;a href="http://www.linux-foundation.jp/modules/tinyd5/"&gt;Linux Foundation Japan Symposium&lt;/a&gt; but instead of packing like I should, I figured I'd post about an exciting new feature in KVM.&lt;/p&gt;

&lt;p&gt;First, a little background.  Even when doing hardware accelerated virtualization (using VT or SVM), there is a lot of emulation that is required for IO devices.  While there are probably at least 15-20 different devices that must be emulated for a virtual machine, there are only a few that are performance sensitive.  The two most notable are the network card and disk controller.  Since all Operating Systems support a wide variety of these devices, we can create a fake network card driver that we can emulate in a high performance way and everything works out nicely (these are commonly called paravirtual device drivers).&lt;/p&gt;

&lt;p&gt;There are some devices in the modern PC that you cannot write drivers for because there simply aren't that many of them.  For instance, there are really only a couple kinds of interrupt controllers so most Operating Systems don't provide a mechanism for loading interrupt controller device drivers.  Instead, these devices are baked in deeply within the Operating System's core.&lt;/p&gt;

&lt;p&gt;For the most part, none of these devices affect performance significantly.  The notably exception is the local APIC.  The local APIC is a per-processor interrupt controller whose interface is memory-mapped.  This means that an OS communicates with the local APIC by writing to a special memory location.  In particular, the local APIC has a feature called the TPR (task priority register).  Certain OS's (namely, Windows), access the TPR extremely frequently.  If you've used Windows under KVM, you may be familiar with the &lt;a href="http://kvm.qumranet.com/kvmwiki/Windows_ACPI_Workaround"&gt;ACPI work-around&lt;/a&gt; which effectively tricks Windows into thinking there isn't a local APIC.  The result is a significant increase in performance since we no longer have to emulate thousands of TPR accesses per-second.  Unfortunately, ACPI is a useful thing.  You can't have SMP without it.  Disabling it is not really a great solution to the problem.&lt;/p&gt;

&lt;p&gt;At this past &lt;a href="http://kvm.qumranet.com/kvmwiki/KvmForum2007"&gt;KVM Forum&lt;/a&gt;, Ben Serebin , from AMD, shared an interesting observation.  Windows guests only access the TPR with instructions that are at least 5 bytes.  The significance of 5 bytes is that that happens to be the size of an absolute call on the x86.  This means that you can replace any of the TPR access instructions with an absolute call without the need to do fancy dynamic translation.  If you're very clever about hiding routines within the BIOS (it turns out, Windows always has a valid virtual mapping to the BIOS), you can actually rewrite TPR access instruction to instead be calls to functions, that you provide, that access the TPR in a more efficient way.&lt;/p&gt;

&lt;p&gt;Avi Kivity posted an implementation of this to KVM recently.  The results are quite dramatic.  Windows XP installs are at least twice as fast--perhaps even faster.  The very latest Intel processors have a hardware feature that ends up with the same result but the nice thing about a purely software approach is that it will work with older processors.&lt;/p&gt;

&lt;p&gt;This code hasn't made it's way into a KVM release yet as it needs a bit more testing and clean-up.  I suspect we won't see it in a release for a couple more weeks but once it's there, you can reenable ACPI in your Windows guests and enjoy good performance :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-8773938724572909421?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/8773938724572909421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=8773938724572909421' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/8773938724572909421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/8773938724572909421'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2007/10/tpr-patching.html' title='TPR patching'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-3849905137248545717</id><published>2007-10-08T13:42:00.001-07:00</published><updated>2007-10-08T14:15:19.712-07:00</updated><title type='text'>The Myth of Type I and Type II Hypervisors</title><content type='html'>&lt;p&gt;This has been something that has bothered me for a while that I have never gotten a chance to articulate.  In the virtualization community, the terms "type-1" and "type-2" hypervisors get thrown around a lot--often carrying different meanings.  Lately, "type-2" is being used as a derogatory term suggesting that a virtualization solution is "lesser" than a true "type-1" hypervisor.&lt;/p&gt;

&lt;p&gt;The most common definition of "type-1" and "type-2" seem to be that "type-1" hypervisors do not require a host Operating System.  In actuality, all hypervisors require an Operating System of some sort.  Usually, "type-1" is used for hypervisors that have a micro-kernel based Operating System (like Xen and VMware ESX).  In this case, a macro-kernel Operating System is still required for the control partition (Linux for both Xen and ESX).&lt;/p&gt;

&lt;p&gt;The whole argument of micro-kernel vs macro-kernel hosts is a different blog post (just as a spoiler, I think one can make a better argument for macro-kernel hypervisors).  I want to focus, instead, on why we have these terms and what they really mean.&lt;/p&gt;

&lt;p&gt;Virtualization theory really started with a paper from Gerald Popek and Robert Goldberg called &lt;i&gt;Formal Requirements for Virtualizable Third Generation Architectures&lt;/i&gt;.  The paper is a mathematical proof of the architectural requirements to allow virtualization.  It is very terse and I don't expect most people have read it.  The paper focuses on implementing full virtualization on native hardware and focuses on things like whether privileged instructions are trappable.  It was written in 1974 and Operating Systems were not actually all that common back then.  Many people think the terms "type-1" and "type-2" originated from this paper but that is simply not the case.  The paper does mention the concept of recursive virtualization and briefly discusses the requirements to allow one virtual machine to run within another virtual machine.&lt;/p&gt;

&lt;p&gt;As best as I can tell, the terms "type-1" and "type-2" originate from a paper by John Robin called &lt;i&gt;Analyzing the Intel Pentium's Capability to Support a Secure Virtual Machine Monitor&lt;/i&gt;.  This paper was Robin's master thesis at the Naval Postgrade School.  There are two versions of the paper available, the actual &lt;a href="http://handle.dtic.mil/100.2/ADA370812"&gt;master's thesis&lt;/a&gt; and a &lt;a href="http://portal.acm.org/citation.cfm?id=1251316&amp;dl=ACM&amp;coll=portal&amp;CFID=15151515&amp;CFTOKEN=6184618"&gt;condensed version&lt;/a&gt; for USENIX 2000.&lt;/p&gt;

&lt;p&gt;This paper is really an application of the Popek/Goldberg proof to the Pentium architecture.  A few points were missed, but it does a rather good analysis of why the Pentium architecture did not satisfy the Popek/Goldberg requirements for virtualization.  Now, some folks at VMware have made a rather compelling case that this is in fact incorrect because the Popek/Goldberg proof does not eliminate the possibility of using dynamic translation.  At any rate, Robin makes a distinction between "type-1" and "type-2" VMMs.  The reason for the distinction is simple.  When discussing "type-1" VMMs that access hardware directly, the set of requirements to enable Secure Virtualization entirely depends on the hardware.  When discussing "type-2" VMMs, however, you do not have direct access to hardware so the requirements to enable virtualization are actually at the Operating System interface.  A true "type-2" VMM is just a process in an Operating System and is not capable of accessing hardware directly.&lt;/p&gt;

&lt;p&gt;The important point to take away here is that all modern virtualization solutions (except for unaccelerated QEMU maybe) are technically "type-1" VMMs according to Robin.  The things commonly cited as "type-2" VMMs like VMware Workstation, Parallels, VirtualPC, and KVM all rely on kernel modules which means they do have direct access to hardware.  This makes all of these solutions "type-1" VMMs.  What's more important though is that the distinction of "type-1" and "type-2" has absolutely no bearings on performance, robustness, or any other qualitative factor.  It is merely a distinction made when attempting to formulate a proof about whether virtualization is possible or not.  It starts to lose meaning too when an Operating System is capable of supporting a true "type-2" VMM (which arguable, the KVM interface in Linux enables).  Does that mean that Linux is a "type-1" VMM and QEMU using the KVM interface is a "type-2" VMM?  How can the same solution be both though?  IMHO, the introduction of the term "type-2" was really a mistake on Robin's part perhaps as a misunderstanding of the section of the Popek paper regarding recursive virtualization.  That's just speculating though.  The distinction really just doesn't make much sense in my mind.&lt;/p&gt;

&lt;p&gt;So if you've made it this far, I'll hope you agree that these terms really have no practical meaning and will join me in refraining from using them in the future :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-3849905137248545717?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/3849905137248545717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=3849905137248545717' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/3849905137248545717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/3849905137248545717'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2007/10/myth-of-type-i-and-type-ii-hypervisors.html' title='The Myth of Type I and Type II Hypervisors'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-7113245165613443973</id><published>2007-02-28T23:20:00.000-08:00</published><updated>2007-02-28T23:32:29.578-08:00</updated><title type='text'>Coherence for QEMU</title><content type='html'>&lt;p&gt;As I have &lt;a href="http://blog.codemonkey.ws/2006/12/coherence-for-rest-of-us.html"&gt;previously&lt;/a&gt; discussed, I have been fascinated by the idea of &lt;a href="http://www.parallels.com/products/coherence"&gt;Coherence&lt;/a&gt; that Parallels has now officially supporting.  After some digging, I think I have a pretty good idea of how it works.&lt;/p&gt;

&lt;p&gt;Very similar technologies exist.  &lt;a href="http://www.cendio.com/seamlessrdp/"&gt;SeamlessRDP&lt;/a&gt; is a special program you can run in a Terminal Services session to expose only a single application over RDP.  It works by replacing the normal Shell program (explorer.exe) with a process that uses &lt;a href="http://msdn2.microsoft.com/en-us/library/ms644990.aspx"&gt;SetWindowsHookEx&lt;/a&gt; to keep track of window creation, destruction, resizing, and movement events.  For SeamlessRDP, this information is sent over a special RDP channel.&lt;/p&gt;

&lt;p&gt;The RDP session is always full screen and this window position information is used to only show the portion of the RDP session that the window occupies.  Since the RDP session is full screen, and the window positions are mapped at the same location in the host as in the RDP session, things like z-order and window dragging Just Work.&lt;/p&gt;

&lt;p&gt;To just get the taskbar, you just have to launch explorer and track it's children being careful to not display the desktop window.  &lt;a href="http://test.codemonkey.ws/qemu-coherence.png"&gt;Here&lt;/a&gt; is a screenshot demonstrating this with QEMU, KQEMU, SeamlessRDP, and a slightly modified rdesktop.&lt;/p&gt;

&lt;p&gt;I'd like to integrate this all a little more into QEMU.  The first thing I'd like to do is eliminate the need for RDP.  We can use a paravirtual channel to communicate the windowing information and then just use VNC extensions to communicate that data to the client.  A tricky problem is that the session has to be full screen for this to work and QEMU does not provide VGA emulation that supports some weird resolutions (1400x1050--which my laptop uses!).  I think this can be solved with software scaling though.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-7113245165613443973?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/7113245165613443973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=7113245165613443973' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/7113245165613443973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/7113245165613443973'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2007/02/coherence-for-qemu.html' title='Coherence for QEMU'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-6422648815443179577</id><published>2007-02-06T07:30:00.000-08:00</published><updated>2007-02-06T07:34:37.732-08:00</updated><title type='text'>KQEMU is now free software!</title><content type='html'>&lt;p&gt;As part of the 0.9.0 release, Fabrice Bellard released &lt;a href="http://www.qemu.org/kqemu-changelog.html"&gt;KQEMU&lt;/a&gt; under the GPL.  KQEMU is an accelerator for QEMU that works on older hardware (without hardware virtualization).  As part of this release, Fabrice also published detailed &lt;a href="http://www.qemu.org/kqemu-tech.html"&gt;technical notes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can get the GPLv2 version of KQEMU &lt;a href="http://www.qemu.org/download.html"&gt;here&lt;/a&gt;.  I want to thank Fabrice for doing this.  There are a lot of people in the QEMU community who are very happy about this.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-6422648815443179577?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/6422648815443179577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=6422648815443179577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/6422648815443179577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/6422648815443179577'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2007/02/kqemu-is-now-free-software.html' title='KQEMU is now free software!'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-5524802146472106406</id><published>2007-02-06T07:28:00.000-08:00</published><updated>2007-02-06T07:30:39.329-08:00</updated><title type='text'>QEMU 0.9.0 is now available</title><content type='html'>&lt;p&gt;This release has been in the works for quite a while.  A whole bunch of changes went in.  The official changelog is:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
version 0.9.0:

  - Support for relative paths in backing files for disk images
  - Async file I/O API
  - New qcow2 disk image format
  - Support of multiple VM snapshots
  - Linux: specific host CDROM and floppy support
  - SMM support
  - Moved PCI init, MP table init and ACPI table init to Bochs BIOS
  - Support for MIPS32 Release 2 instruction set (Thiemo Seufer)
  - MIPS Malta system emulation (Aurelien Jarno, Stefan Weil)
  - Darwin userspace emulation (Pierre d'Herbemont)
  - m68k user support (Paul Brook)
  - several x86 and x86_64 emulation fixes
  - Mouse relative offset VNC extension (Anthony Liguori)
  - PXE boot support (Anthony Liguori)
  - '-daemonize' option (Anthony Liguori)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;But this is just scratching the surface.  You can obtain it from the usual &lt;a href="http://www.qemu.org/download.html"&gt;place&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-5524802146472106406?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/5524802146472106406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=5524802146472106406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/5524802146472106406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/5524802146472106406'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2007/02/qemu-090-is-now-available.html' title='QEMU 0.9.0 is now available'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-1926927190258973317</id><published>2007-02-06T07:15:00.000-08:00</published><updated>2007-02-06T07:25:41.265-08:00</updated><title type='text'>KVM, Xen, and the Linux kernel</title><content type='html'>&lt;p&gt;I stumbled upon an &lt;a href=" http://www.devxnews.com/article.php/3658001"&gt;article&lt;/a&gt; from DevX where Ian Pratt is quoted on a number of topics including KVM and upstream merge.  I thought what he said about KVM was a little odd, but what disturbed me was that I think the interviewer misinterpreted what Ian said re: upstream merge.  Ian said:&lt;/p&gt;

&lt;blockquote&gt;Putting Xen into Linux doesn't make sense: hypervisors are different beasts from operating systems, so they share little code.&lt;/blockquote&gt;

&lt;p&gt;He's referring to putting the actual hypervisor into the kernel.  Unfortunately, the interviewer took this to mean:&lt;/p&gt;

&lt;blockquote&gt;Pratt also explained that Xen is no longer actively seeking inclusion in the mainline Linux kernel either.&lt;/blockquote&gt;

&lt;p&gt;Which is totally missing the point.  We've never wanted the hypervisor to be included in mainline Linux.  It's not a part of Linux so I don't even see how we would do it without major rewrites.  What we've been trying to get into the kernel is the &lt;i&gt;Linux changes&lt;/i&gt; for guest that run on top of the hypervisor.&lt;/p&gt;

&lt;p&gt;We are still very interested in getting the &lt;i&gt;Linux changes&lt;/i&gt; upstream.  In fact, this is a major priority.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-1926927190258973317?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/1926927190258973317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=1926927190258973317' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/1926927190258973317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/1926927190258973317'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2007/02/kvm-xen-and-linux-kernel.html' title='KVM, Xen, and the Linux kernel'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-7271883142668830359</id><published>2007-01-17T11:54:00.000-08:00</published><updated>2007-01-17T12:03:43.818-08:00</updated><title type='text'>Migration in QEMU</title><content type='html'>&lt;p&gt;For a long time, I've thought about QEMU migration.  For KVM, Qumranet added a static form of migration to QEMU.  I've been working with Xen migration for a while now (mostly in the scope of IBM products) and I certainly have learned a lot from it.  Honestly, I don't really like how KVM is doing migration so after spending a weekend heads down on V2E, I decided to take some time and implement migration for QEMU.&lt;/p&gt;

&lt;p&gt;The biggest problem I have with KVM and Xen's migration is that it uses open TCP ports.  This is just such a bad idea.  It's a security nightmare to transfer the contents of memory over an unencrypted channel.  For QEMU, I decided to allow the user to spawn an external program to setup the channel to send the migration traffic over.  This lets a user just use SSH or RSH if they want something that works.  This also let's management tools implement their own mechanism.  This may use OpenSSL, CIM, or any other mechanisms out there.  It also provides a mechanism for implementing some interesting things like light weight checkpointing (although that's another topic).&lt;/p&gt;

&lt;p&gt;This does make things a bit more complicated though.  Instead of just saying 'migrate hostname' you now have to construct a rather long command like 'migrate "ssh hostname qemu -loadvm -"'.  A nice side effect though is that you can completely change the command line arguments in case you have NFS mounts at different locations.&lt;/p&gt;

&lt;p&gt;At the moment, I have a static migration patch.  I'd like to implement live migration real soon.  I think it will be pretty easy.  It's just a matter of adding a new set of callbacks to allow devices that may take a long time to save/restore to instead, provide a "live" save/restore callback.  We'll just run through the live callbacks first and when they've signaled that they're done, we'll go ahead and activate the non-live callbacks.  This probably will only touch the RAM save/restore code at first which seems more than okay to me.&lt;/p&gt;

&lt;p&gt;If you're interested in taking a peak, you can just take a look in my QEMU &lt;a href="http://hg.codemonkey.ws/qemu-pq"&gt;patch queue&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-7271883142668830359?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/7271883142668830359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=7271883142668830359' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/7271883142668830359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/7271883142668830359'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2007/01/migration-in-qemu.html' title='Migration in QEMU'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-4458308302050288626</id><published>2006-12-13T19:45:00.000-08:00</published><updated>2006-12-13T20:24:02.295-08:00</updated><title type='text'>Binary kernel modules are dead in 2008--now what</title><content type='html'>&lt;p&gt;It was decided today on &lt;a href="http://www.kroah.com/log/2006/12/13/#2006_12_13"&gt;LKML&lt;/a&gt; that starting in January 2008, binary modules are no longer going to be loadable in the Linux kernel.  This has some rather major consequences for a number of virtualization technologies.&lt;/p&gt;

&lt;p&gt;Parallels, Win4Lin, kqemu, and VMware rely on binary modules for their Linux products.  I suspect all of these products will have a hard time moving their code out of kernel space seeing that it's performance sensitive.  So what are they all going to do?  I see three possible options: 1) drop Linux support (Win4lin and kqemu disappear completely) 2) build a minimal kernel interface to privilege state and try to develop fast userspace interfaces.  I can't see how one could do a fast userspace shadow paging implementation though.  3) open source the kernel bits.&lt;/p&gt;

&lt;p&gt;Everyone's focused on management now right?  Can you imagine if the VMware binary translator was GPL'd?  Kudos to the kernel developers for finally doing the right thing here.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; Linus is &lt;a href="http://article.gmane.org/gmane.linux.kernel/475824"&gt;insisting&lt;/a&gt; that the distros merge this patch first before he'll take it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-4458308302050288626?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/4458308302050288626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=4458308302050288626' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/4458308302050288626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/4458308302050288626'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/12/binary-kernel-modules-are-dead-in-2008.html' title='Binary kernel modules are dead in 2008--now what'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-6000866832694911240</id><published>2006-12-06T20:20:00.000-08:00</published><updated>2006-12-06T20:30:27.750-08:00</updated><title type='text'>Coherence for the rest of us?</title><content type='html'>There's quite a buzz about &lt;a href="http://www.parallels.com"&gt;Parallels&lt;/a&gt; new &lt;a href="http://www.flickr.com/photos/jflint/313613949/"&gt;coherence&lt;/a&gt; technology.  In principle, there's nothing that exciting going on here from a technology perspective but what we have is the result of competition.  Basiclally, Parallels is serving a very useful market that VMware has forgotten -- the minority home user.

Coherence allows you to run a virtual machine and have individual applications display their windows in the host OS.  Essentially, you have a small program running in the guest OS that exposes the window for an app in the host.  This is similar to what &lt;a href="http://metavnc.sf.net"&gt;Meta-VNC&lt;/a&gt; is already doing with VNC.  The nice thing is that they've packaged it all up in an easy to use form.

So, running Windows apps on Mac OS X is nice and all but what about us Linux users?  Well, I've done a little bit of research here and it looks like there are a number of tricks you can do in Windows to get an image of an app.  The best way seems to be WM_PRINT/WM_PRINTCLIENT except that it requires support from the application.  I don't know how many apps support this since WM_PRINTCLIENT is not handled by the default message handler.

I'm thinking of starting though with the opposite case.  Let's expose a single application from a Linux guest via VNC.  The obvious way to do this is with a special X server.  You simply launch your VNC X server on a new display, and then launch your app with the proper DISPLAY environmental variable set.  We'll need a custom X server that can actually know how to render the individual windows of course.  Plus, popups are going to require some VNC extensions.  It should end up being pretty neat though.  Definitely a fun little project.

Is it useful to run Linux apps under Windows?  I don't know.  It's a fun project though :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-6000866832694911240?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/6000866832694911240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=6000866832694911240' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/6000866832694911240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/6000866832694911240'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/12/coherence-for-rest-of-us.html' title='Coherence for the rest of us?'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-116252784756555768</id><published>2006-11-02T20:22:00.000-08:00</published><updated>2006-11-02T20:24:07.576-08:00</updated><title type='text'>Novell Sells Out (In the name of virtualization)?</title><content type='html'>&lt;a href="http://www.groklaw.net/article.php?story=20061102175508403"&gt;Groklaw&lt;/a&gt; says it best.  Maybe the GPLv3 isn't so bad after all...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-116252784756555768?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/116252784756555768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=116252784756555768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/116252784756555768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/116252784756555768'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/11/novell-sells-out-in-name-of.html' title='Novell Sells Out (In the name of virtualization)?'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-116027572858430232</id><published>2006-10-07T19:35:00.000-07:00</published><updated>2006-10-07T19:48:48.613-07:00</updated><title type='text'>Common Neutral Hypervisor? Trademarks and the GPL</title><content type='html'>I love Free Software.  Like many free software developers, I'm rather concerned about the recent debates regarding the role of trademarks and free software.  Just five years ago, the idea that trademarks would be a problem with free software was almost laughable.  With high profile projects like Firefox developing &lt;a href="http://en.wikipedia.org/wiki/Iceweasel"&gt;questionable&lt;/a&gt; trademarking policies, the question of how trademarks affect free software is becoming very important.

As I write this, there's a heated &lt;a href="http://lists.xensource.com/archives/html/xen-devel/2006-10/msg00289.html"&gt;debate&lt;/a&gt; within the Xen community over XenSource's new &lt;a href="http://www.xensource.com/xen-tm-faq.html"&gt;trademark terms&lt;/a&gt; specifically regarding the Xen trademark.  Suffice to say, that the terms concern RedHat enough that they've announced that they're considering renaming Xen to CNH, or Common Neutral Hypervisor.  They appear to be concerned that they can not live up to the trademarking terms.

Personally, I'm not in a position to comment about the new trademark policy.  I try to keep my nose clean of this sort of thing.  However, it's times like this that I realize how important the GPL is in defining what free software is and how lost we would be without it (or at least, how much arguing there would be).  I wonder if there's enough room in the GPLv3 process to introduce trademark terms...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-116027572858430232?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/116027572858430232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=116027572858430232' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/116027572858430232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/116027572858430232'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/10/common-neutral-hypervisor-trademarks.html' title='Common Neutral Hypervisor? Trademarks and the GPL'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-115992776307173551</id><published>2006-10-03T19:01:00.000-07:00</published><updated>2006-10-03T19:09:23.080-07:00</updated><title type='text'>Optimizing VNC for localhost</title><content type='html'>I've got some free time now and have been thinking recently about revisiting QEMU GUI support.  Previously, I had a set of patches that implemented a shared memory transport for QEMU's graphic interface.  The first change I wanted to make to my old patches, was to use a TCP transport instead of QEMU's char device interface.  I quickly realized though that there would be a lot of shared code between this new transport and the VNC transport.

At this point, I started thinking about what it would take to add a shared memory transport to VNC.  Conceptionally, all this would require is a new encoding type that can send back a shared memory ID.  The client would have to send a little more than just a SetPixelFormat though since the bytes-per-line is also needed.  What this would allow though, is for the server to allocate a shared memory segment, hand that info over to the client, and the client could then hand that over to the X server.  This would have fantastic performance on the localhost case.

Reusing the VNC protocol means a much simpler client.  I sent off a note to the VNC folks asking to reserve a pseudo-encoding range.  Once I get a response, I should be able to hack something up fairly soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-115992776307173551?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/115992776307173551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=115992776307173551' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115992776307173551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115992776307173551'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/10/optimizing-vnc-for-localhost.html' title='Optimizing VNC for localhost'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-115827290618006877</id><published>2006-09-14T15:26:00.000-07:00</published><updated>2006-09-14T15:28:26.190-07:00</updated><title type='text'>Finally back to normal</title><content type='html'>While it took a bit longer than it should have, I've finally gotten my IBM accounts straightened out again.  I've decided to ditch one of them but chances are if you've ever sent me mail at my IBM address, you were using that one.  If you gotten a vacation message from my IBM email address or a bounce, you shouldn't have a problem anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-115827290618006877?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/115827290618006877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=115827290618006877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115827290618006877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115827290618006877'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/09/finally-back-to-normal.html' title='Finally back to normal'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-115798374575234997</id><published>2006-09-11T07:06:00.000-07:00</published><updated>2006-09-11T07:09:05.763-07:00</updated><title type='text'>Back in Austin</title><content type='html'>I'm now back in Austin after quite a lot of travel.  I'm officially back at IBM now and should resume blogger as before about my work on Open Source virtualization.  My email should now be back to normal.  I will be going through the unanswered mail in my INBOX over the next few days.  I've had a lot of email trouble lately (which has all now been resolved) so if you don't get a response to something you think I should have responded to, I may have not seen it (or I'm just being lazy :-)).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-115798374575234997?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/115798374575234997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=115798374575234997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115798374575234997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115798374575234997'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/09/back-in-austin.html' title='Back in Austin'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-115624953718944902</id><published>2006-08-22T05:22:00.000-07:00</published><updated>2006-08-22T05:25:48.740-07:00</updated><title type='text'>More email nonsense</title><content type='html'>Someone gave me a heads up that aliguori at us ibm com is bouncing right now.  I took some time off before switching to being a full timer at IBM (to spend some time w/family and do a little traveling).  I go back to IBM on September 6th.  I was expecting that my ibm accounts would stick around until then but it doesn't seem that way...

Either way, my codemonkey.ws or utexas accounts can be used instead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-115624953718944902?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/115624953718944902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=115624953718944902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115624953718944902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115624953718944902'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/08/more-email-nonsense.html' title='More email nonsense'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-115620591496931161</id><published>2006-08-21T17:14:00.000-07:00</published><updated>2006-08-21T17:18:34.980-07:00</updated><title type='text'>Email Glitch</title><content type='html'>My cable modem gave out late last night and since I'm out of town I won't be able to restart the stupid thing until September.  Fortunately, I was able to bring up a quick relay so that @codemonkey.ws email is now going somewhere.  I don't think it was down long enough for retries to timeout but if you sent me an email between midnight-8pm CST today, you may have to resend.  If mail servers are caching the MX record aggressively, it'll definitely bounce.

On a positive note, I discovered that I can use my utexas account as an authenticated SMTP relay for @codemonkey.ws.  Lately, I've been getting a lot of outgoing mail rejected b/c my cable modem's network is on a few blacklists since they're dynamic IPs.  This should provide a solution until I get back to Austin and colocate a real server somewhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-115620591496931161?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/115620591496931161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=115620591496931161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115620591496931161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115620591496931161'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/08/email-glitch.html' title='Email Glitch'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-115223277012166712</id><published>2006-07-06T17:23:00.000-07:00</published><updated>2006-07-06T17:39:30.160-07:00</updated><title type='text'>Spend more time reading, less time watching "The Matrix"</title><content type='html'>I was recently pointed to two different programs that attempt to detect the presence of a VMM and produce an undetectable VMM.  These are called "red pill" and "blue pill" respectively and both are by Joanna Rutkowska of &lt;a href="http://www.invisiblethings.org/"&gt;invisiblethings.org&lt;/a&gt;.

"red pill" claims to detect modern VMM's by checking the results of a sidt.  Since most VMM's hide themselves in upper memory, the claim is that if the IDT (which is of course being shadowed) is in the upper 256MB of memory, you're in a VMM.

Most operating systems tend to use the upper portion of memory to map physical pages so this is probably going to work more often than not.  However, it's quite easily defeatable since in the VMM you could either 1) move yourself to a lower bit of memory or 2) just use a full emulator and avoid any shadowing.  Therefore, the "red pill" is really not that useful.

This doesn't mean that you can't detect a VMM's presence.  If you go all the way back to the Popek/Goldberg paper (which is 30 years old), they make it quite clear that any program that depends on timing will no longer function as expected in a virtual machine.  One can exploit this fact to detect the presence of a VMM in a generic way.

This is exactly what is done in &lt;a href="http://portal.acm.org/affiliated/citation.cfm?id=1095810.1095812&amp;coll=ACM&amp;dl=ACM&amp;type=series&amp;idx=1095810&amp;part=Proceedings&amp;WantType=Proceedings&amp;title=ACM%20Symposium%20on%20Operating%20Systems%20Principles&amp;CFID=15151515&amp;CFTOKEN=6184618"&gt;Pioneer&lt;/a&gt;.  Pioneer makes use of a checksumming algorithm that also incorporates EFLAGS.  Since pushf is not trappable and EFLAGS is really hard to rewrite with a JIT (since you have to keep track of condition flags), one can easily detect (by checking how long the checksum takes to compute) the presence of a VMM.

So what about "blue pill".  The author seems to think that SVM is impossible to detect because the VMM no longer has to shadow things like the IDT.  Of course, this is naive since the one can still do a timing analysis.

Okay, so I'm being pretty harsh here.  This is all very obscure stuff.  I'm somewhat amazed though because I've seen references to these things in a number of places now (including major news sites).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-115223277012166712?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/115223277012166712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=115223277012166712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115223277012166712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/115223277012166712'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/07/spend-more-time-reading-less-time.html' title='Spend more time reading, less time watching &quot;The Matrix&quot;'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114870611578650977</id><published>2006-05-26T21:59:00.000-07:00</published><updated>2006-05-26T22:01:55.836-07:00</updated><title type='text'>Ajax terminals</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I recently ran across &lt;a href="http://antony.lesuisse.org/qweb/trac/wiki/AjaxTerm"&gt;AjaxTerm&lt;/a&gt;.  It's pretty neat.  It got me rather excited as I think it would be a really cool part of a xen Web-based management console.&lt;/p&gt;

&lt;p&gt;I was rather curious how it worked with respect to updates.  Clearly, when you send console data it requires an HTTP request.  That's unavoidable.  However, how do you detect when it's time to receive console data?  There's no such thing as a reverse HTTP connection so that's out of the question.  A naive solution would be to poll the server.  That seems rather wasteful though.  More importantly, there is an inevitable lag depending on how tightly you loop.&lt;/p&gt;

&lt;p&gt;That got me thinking about an alternative approach this evening.  What if you started a request (asynchronous of course) and the server simply didn't respond right away.  Even if the browser eventually times out the connection, as long as it lasts for a pretty good portion of time, you could use this as a way to wait (without polling) for new data to arrive.  So far, some experiments have shown promise.  We'll see whether this results in a noticeable effect on latency.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114870611578650977?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114870611578650977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114870611578650977' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114870611578650977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114870611578650977'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/05/ajax-terminals.html' title='Ajax terminals'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114848038111892913</id><published>2006-05-24T07:16:00.000-07:00</published><updated>2006-05-24T07:19:41.250-07:00</updated><title type='text'>Turning on optimization gives better warnings?</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;This could be one of those things that everyone knows except for me, but I learned a very hard lesson today.  We had a code review internally for a bit of code I've been doing.  A very embarrassing bug turned up that was the result of a poorly tested last minute query-replace.&lt;/p&gt;

&lt;p&gt;The crazy thing was that it *should* have been caught by the compiler as an uninitialized variable.  I had -Wall in my CFLAGS.  Sure enough though, no matter how blatant I made the uninitialized usage, the compiler said nothing.&lt;/p&gt;

&lt;p&gt;I looked in the info pages and discovered that uninitialized values are only reported if -O is present.  -O does the necessary bookkeeping to allow data flow analysis which is clearly required for reporting of uninitialized values.  I typically don't enable -O but I guess most projects I work on do.  I will certainly be using -O from now on though.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114848038111892913?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114848038111892913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114848038111892913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114848038111892913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114848038111892913'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/05/turning-on-optimization-gives-better.html' title='Turning on optimization gives better warnings?'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114805704241667526</id><published>2006-05-19T09:41:00.000-07:00</published><updated>2006-05-19T09:44:02.563-07:00</updated><title type='text'>Some interesting stats on sensitive instruction usage</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;One surprising thing about x86 virtualization is that while there is a small number of instructions that require special effort (around 17 depending on what you count), there are an even smaller number that make 95% of all the calls to these instructions.&lt;/p&gt;

&lt;p&gt;These four instructions are cli, sti, pushf, popf (which probably isn't all that surprising).  An interesting result of this is that you only really have to focus on making these instructions fast.  This is an important conclusion when discussing the performance trade-offs of supporting a transparently paravirtualizable kernel.&lt;/p&gt;

&lt;p&gt;Rusty Russell posted some stats that confirm this &lt;a href="http://kernel.org/pub/linux/kernel/people/rusty/Paravirt/stats/"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114805704241667526?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114805704241667526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114805704241667526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114805704241667526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114805704241667526'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/05/some-interesting-stats-on-sensitive.html' title='Some interesting stats on sensitive instruction usage'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114782266843481520</id><published>2006-05-16T16:35:00.000-07:00</published><updated>2006-05-16T16:37:48.486-07:00</updated><title type='text'>Xen Becoming a Microkernel?</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://x86vmm.blogspot.com"&gt;Keith Adams&lt;/a&gt; has posted an entry about his thoughts on microkernels.  I completely agree with his argument.  He makes a curious point though at the end of the article:&lt;/p&gt;

&lt;p&gt;&lt;blockquote&gt;Xen has been carefully, and somewhat silently transmogrifying itself into a microkernel.&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;What I find curious about this statement is that I think the inverse is actually true.  Historically, starting in the 2.0.x series, Xen owes quite a bit of it's design to the &lt;a href="http://www.cl.cam.ac.uk/Research/SRG/netos/old-projects/pegasus/publications/osdi99/paper.html"&gt;Nemesis exokernel&lt;/a&gt;.  A lot of the things that seem out of place in a hypervisor (event channels and usage of the nomenclature of domains) are actually vestiges of Nemesis.&lt;/p&gt;

&lt;p&gt;Xen is not becoming a microkernel, rather it was an exokernel and is becoming more monolithic.  This leads to a more interesting topic of debate (that I think Keith is partially alluding to).  Do the same arguments about about microkernel vs. monolithic kernel apply to hypervisors?&lt;/p&gt;

&lt;p&gt;I've always thought an interesting patch to Linux would be one that allowed the kernel to exist in 64mb.  However, even this may be unnecessary.  As VT/SVM hardware improves over time, and the cost of a switching address spaces during an exit decreases (thanks to tagged TLBs), it really stops mattering.&lt;/p&gt;

&lt;p&gt;It's an interesting thing to think about...&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114782266843481520?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114782266843481520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114782266843481520' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114782266843481520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114782266843481520'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/05/xen-becoming-microkernel.html' title='Xen Becoming a Microkernel?'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114774442953331383</id><published>2006-05-15T18:51:00.000-07:00</published><updated>2006-05-15T18:53:49.590-07:00</updated><title type='text'>Some thoughts on the Xen Virtual Framebuffer</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I have about a day of free time before my family comes in for graduation.  I've figured I'd use some of this to do a little work on the Xen framebuffer.  Unfortunately, it's very low on my priority list so I've not gotten very much time at all to work on it.&lt;/p&gt;

&lt;p&gt;The one required task I have to complete is to bring the current code up to date and to make it use XenStore.  That's pretty straight forward.&lt;/p&gt;

&lt;p&gt;Another thing I'd like to do is finally address some of the nagging performance problems I've seen.  The first fix is to implement a shadow framebuffer to reduce the size of the update regions.  Instead of doing a full shadow (like I did in QEmu), I'm thinking of instead just allocating a page when a portion of the framebuffer is write faulted.  I'll copy the original contents of the page to the allocated page and then when it comes time to invalidate, I'll have something kosher to compare to.&lt;/p&gt;

&lt;p&gt;I also want to implement the dirty bitmap.  I like that approach much better because it lets dom0 decide how to break the region into rectangles.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114774442953331383?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114774442953331383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114774442953331383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114774442953331383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114774442953331383'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/05/some-thoughts-on-xen-virtual.html' title='Some thoughts on the Xen Virtual Framebuffer'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114753405923740127</id><published>2006-05-13T08:25:00.000-07:00</published><updated>2006-05-13T08:30:06.160-07:00</updated><title type='text'>Analysis of RealVNC Vulnerability</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;As many of you may have saw, Slashdot ran a &lt;a href="http://it.slashdot.org/article.pl?sid=06/05/11/2344217"&gt;story&lt;/a&gt; about a flaw found in RealVNC 4.1.1 that allowed an attacker to gain access to a password protected VNC server without any credentials.&lt;/p&gt;

&lt;p&gt;By the time I saw this article, the site was already Slashdotted so I wasn't able to get a packet trace.  The disclosure of the flaw was a bit troubling as there was no explanation of how it worked.  Moreover, it sounded like it was stumbled upon by accident.  My first thought was buffer overflow or integer overflow but it takes a very carefully crafted packet to exploit such flaws.  Plus, VNC doesn't really have many variable length strings and certainly doesn't have any in the right parts of the protocol to explain this vulnerability.&lt;/p&gt;

&lt;p&gt;Then it dawned on me while on campus the other day.  Starting in version 3.7 of the RFB protocol, the security type negotiation was changed.  It used to be that the server just sent back whatever security type it wanted to use.  Common security types are rfbAuthNone (no password) and rfbAuthVnc (triple-des challenge/response).  The new security type negotiation allowed the server to send back a list of security types letting the client choose which one it wanted to use.&lt;/p&gt;

&lt;p&gt;Obviously, this makes supporting new security types more backwards compatible.  A really silly mistake to make in the server would be to not check to make sure that the security type the client chooses is actually part of the original list the server supports.  I looked at the RealVNC source code and sure enough, they weren't checking.  What happened here is that the person who found this hole must have had a bug in his client where it sent the wrong security type (one that wasn't in the list).&lt;/p&gt;

&lt;p&gt;This brings up a pretty interesting question.  Why wasn't there a test case for this?  This seems like a rather obvious thing to check for.  Fortunately, this is really limited to RealVNC 4.1.x as all other VNC codebases branched off before the rewrite for 4.1.x and this problem was introduced in that rewrite.  If you're using RealVNC, and you do not want password-less access to your machine, you should visit &lt;a href="http://www.realvnc.com"&gt;RealVNC&lt;/a&gt; and pick up the new version that fixes this problem.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114753405923740127?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114753405923740127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114753405923740127' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114753405923740127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114753405923740127'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/05/analysis-of-realvnc-vulnerability.html' title='Analysis of RealVNC Vulnerability'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114670892065229708</id><published>2006-05-03T19:13:00.000-07:00</published><updated>2006-05-03T19:16:22.216-07:00</updated><title type='text'>QEMU 0.8.1 is out</title><content type='html'>Fabrice posted the following today:

&lt;blockquote&gt;&lt;pre&gt;
QEMU version 0.8.1 is available at &lt;a href="http://bellard.org/qemu/download.html"&gt;http://bellard.org/qemu/download.html&lt;/a&gt;.

version 0.8.1:

  - USB tablet support (Brad Campbell, Anthony Liguori)
  - win32 host serial support (Kazu)
  - PC speaker support (Joachim Henke)
  - IDE LBA48 support (Jens Axboe)
  - SSE3 support
  - Solaris port (Ben Taylor)
  - Preliminary SH4 target (Samuel Tardieu)
  - VNC server (Anthony Liguori)
  - slirp fixes (Ed Swierk et al.)
  - USB fixes
  - ARM Versatile Platform Baseboard emulation (Paul Brook) 
&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114670892065229708?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114670892065229708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114670892065229708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114670892065229708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114670892065229708'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/05/qemu-081-is-out.html' title='QEMU 0.8.1 is out'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114644709822693145</id><published>2006-04-30T18:29:00.000-07:00</published><updated>2006-04-30T18:31:38.260-07:00</updated><title type='text'>VNC support in QEMU CVS</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Fabrice just committed it this afternoon.  I broke the Win32 build (whoops) but Fabrice quickly fixed it.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114644709822693145?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114644709822693145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114644709822693145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114644709822693145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114644709822693145'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/04/vnc-support-in-qemu-cvs.html' title='VNC support in QEMU CVS'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114585484385032852</id><published>2006-04-23T21:58:00.000-07:00</published><updated>2006-04-23T22:00:43.893-07:00</updated><title type='text'>VNC in QEmu</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;As I mentioned in a previous post, I have been developing a VNC patch for QEmu.  QEmu is a really great platform to explore different ideas as it's entirely in userspace and therefore is somewhat sane to debug.  The two ideas I've been examining are both accelerations for VNC and so far have shown promising results.&lt;/p&gt;

&lt;p&gt;The first is what I'll refer to as subtiling.  A fundamental VNC optimization is to only transmit the portions of the screen that change to the client.  The easiest way to do that is to keep track of which portions of the screen change and then transmit those portions during your normal update event.  In a virtualized environment, it's a bit harder to keep track of which regions change because it's just memory being written to.  This means you usually end up with oversized dirty regions.  This tends to result in 1-2 orders of magnitude more data being marked dirty than there really is.  To eliminate this, it becomes necessary to maintain a copy of the client framebuffer (that is, the framebuffer that you think the client has).  When it comes time to transmit an update, instead of blindly transmitting dirty regions, I've implemented a "subtiling" algorithm which compares against our copy of the client framebuffer to determine which regions have really changed.&lt;/p&gt;

&lt;p&gt;The second optimization I've implemented is video-to-video blit acceleration.  The basic idea is that most modern VGA hardware (and more important, the Cirrus card that QEmu emulates) implements 2d acceleration routines.  In the case of the Cirrus card, this is a fast copy between video memory (optionally using one of a number of ROP operators).  With the right filtering and a little magic, we can convert this video-to-video copy into a VNC CopyRect operation.  I suspected that this would be a useful optimization but I had no idea how much of a difference it would make.  I was surprised to learn just how many places a modern operating system makes use of accelerated copying.  When you scroll a web page in internet explorer, Windows uses 2d acceleration.  The result is an extremely usable interface that is awfully pleasant to use even over the network.  In fact, even with a poor encoding, the interface is at least as responsive on my local LAN as a real VNC server.&lt;/p&gt;

&lt;p&gt;Tonight I got a chance to talk to Fabrice about this patch and he seemed to be happy with it.  In fact, it looks like I've got a shot of getting it in for the next release.  The code is quite ugly right now but hopefully I'll have something that's much cleaner by the end of the week.  Then I can start looking at reusing it for Xen so I can finally get rid of the libvncserver dependency for the VFB.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114585484385032852?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114585484385032852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114585484385032852' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114585484385032852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114585484385032852'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/04/vnc-in-qemu.html' title='VNC in QEmu'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114576627246796354</id><published>2006-04-22T21:22:00.000-07:00</published><updated>2006-04-22T21:24:32.503-07:00</updated><title type='text'>Xen, VMware, and upstream merge</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;There's been a whole lot of articles about Xen, VMware, and the on going upstream merge effort.  I just want to point out a couple things.  The first is that a number of the articles are a bit misleading/speculative.  The second is that there is much more common ground than the articles seem to suggest.&lt;/p&gt;

&lt;p&gt;There are only a very small number of areas where VMI and Xen differ.  Most of these differences are superficial.  One thing to keep in mind is that neither set of patches is complete at all.  Neither support SMP (fully), writable page tables, or management mode stuff.  Both Zach and Chris tried to make this very clear in the initial posts.&lt;/p&gt;

&lt;p&gt;There's a lot of work to do and a lot of hard problems to solve.  In any case, even though neither set of patches is really complete, they are still way to big.  Far too big to go into Linux all at once.  Upstream merge is going to require a large number of small changes to incrementally add support for virtualization into Linux.  That's what's going to be interesting over the next year.  Once we figure out how to break things up, we'll start doing it.&lt;/p&gt;

&lt;p&gt;The whole VMI vs. Xen thing is overrated.  This is really just about what's the best interface for Linux.  The actual underlying hypervisor doesn't really matter.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114576627246796354?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114576627246796354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114576627246796354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114576627246796354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114576627246796354'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/04/xen-vmware-and-upstream-merge.html' title='Xen, VMware, and upstream merge'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114573655507967987</id><published>2006-04-22T13:07:00.000-07:00</published><updated>2006-04-22T13:09:15.116-07:00</updated><title type='text'>Ambiguoity in RFB (VNC) specification</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;In the RFB protocol specification (the protocol used by VNC), the best non-compressed protocol is by far Hextile.  Hextile tile's the screen and provides a mechanism to cheaply enough solid tiles, or tiles that contain subrects.  One of the optimizations is that each tile can have a background and foreground color and if they aren't specified, they are implicitly assumed to be the previous tiles color.&lt;/p&gt;

&lt;p&gt;There is a special tile mode called SubrectsColoured (or SubrectsColored for us Yankees).  In this mode, each sub rectangle has its own color specified before the subrect coordinates.  What the specification doesn't make clear, is that this color is treated to be a "foreground" color such that if the next tile relies on an implicit foreground color, the foreground color should be the very last colored subrectangle's color.&lt;/p&gt;

&lt;p&gt;I wasted a good part of a day on this and most certainly much longer when I was previously working on a client.  I'm going to try and request that the spec be clarified to make this very explicit.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114573655507967987?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114573655507967987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114573655507967987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114573655507967987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114573655507967987'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/04/ambiguoity-in-rfb-vnc-specification.html' title='Ambiguoity in RFB (VNC) specification'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114498880509924294</id><published>2006-04-13T21:25:00.000-07:00</published><updated>2006-04-13T21:26:45.126-07:00</updated><title type='text'>3.0.2 is *finally* out</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;After a number of problems (a couple of last minute regressions and an outbreak of the flu), we've finally cut a 3.0.2 release.  Major features include SVM (Pacifica) support, a fresh 2.6.16 Linux guest kernel, XML-RPC support in the userspace tools, and lots of bug fixes and enhancements.&lt;/p&gt;

&lt;p&gt;You can download 3.0.2 from bit torrent &lt;a href="http://www.xensource.com/xen/downloads/dl_x30tarball_bt.html"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114498880509924294?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114498880509924294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114498880509924294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114498880509924294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114498880509924294'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/04/302-is-finally-out.html' title='3.0.2 is *finally* out'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114459858156315949</id><published>2006-04-09T09:01:00.000-07:00</published><updated>2006-04-09T09:03:01.596-07:00</updated><title type='text'>Absolute Mouse Support in Xorg</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I've been reading bugzilla entries and Xorg code and finally have a pretty good idea of the general support for absolute USB mice.  Windows apparently supports absolute mice natively (although both axis' have to be absolute or relative).  I don't know how Windows interprets these coordinates (whether it converts them to relative movement or actually as absolute positions).&lt;/p&gt;

&lt;p&gt;The Linux kernel supports absolute mice just fine.  Of course, the Xorg I'm running on my system doesn't.  Fortunately, there's a bugzilla entry against the evdev driver and initial support for absolute mouse events is present in Xorg CVS.  To me, this means that it is a viable solution to this problem.  It's at least as good of a solution as writing a custom Xorg input driver for Xen.  It has the additional benefit of not requiring me to maintain a new X driver and I like that very much :-)&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114459858156315949?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114459858156315949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114459858156315949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114459858156315949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114459858156315949'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/04/absolute-mouse-support-in-xorg.html' title='Absolute Mouse Support in Xorg'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114455464336921127</id><published>2006-04-08T20:49:00.000-07:00</published><updated>2006-04-08T20:50:43.413-07:00</updated><title type='text'>USB HID--The perfect match for virtualization?</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;An interesting discussion has emerged on qemu-devel about a topic dear to my heart.  Anyone who has done anything with input device emulation knows that mice are a big pain to virtualize as PS/2 only supports relative input coordinates.  This requires the all-to-familar "input grabbing" mode that things like QEmu and VMware both require since the emulator has no idea where the mouse actually is within the guest (and therefore doesn't know when the mouse "leaves" the window).&lt;/p&gt;

&lt;p&gt;The most accepted solution to this is to paravirtualize the input driver.  This is the approach VMware takes and is the approach I'm currently taking in Xen.  Another approach that I've explored is emulating a drawing tablet.  These devices use absolute coordinates (as you want exactly what you draw to appear on the screen).  I even implemented a proof-of-concept Wacom emulator for QEmu.  Alas, these devices tend to be serial-based so you get no automatic probing on guest install.  This means users have to manually configure the devices which is a no-go for a large set of our target user-base.&lt;/p&gt;

&lt;p&gt;Someone on qemu-devel pointed out that the USB HID specification allows devices to be either relative or absolute.  A compliant HID driver would therefore Just Work.  Best of all, USB tends to be probed automatically so it satisfies that requirement.  This got me thinking about how useful HID could be in general.  Besides keyboards and mice, the HID also specifies things like USB speakers.  This may be a practical way of having cross-platform plug-n-play sound.  Plus, with things like USB over IP, there's an awful lot of potential for remoting these things.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114455464336921127?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114455464336921127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114455464336921127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114455464336921127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114455464336921127'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/04/usb-hid-perfect-match-for.html' title='USB HID--The perfect match for virtualization?'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114341361987472247</id><published>2006-03-26T14:52:00.000-08:00</published><updated>2006-03-26T14:53:39.900-08:00</updated><title type='text'>News on the 3.0.2 release</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;From Ian Pratt as seen on xen-devel:&lt;/p&gt;

&lt;p&gt;"We were just going to sweep -unstable into -testing and call a 3.0.2 release, but it was felt that since there had been some significant changes in the previous few days letting it sit in unstable for a few days wouldn't be a bad thing."&lt;/p&gt;

&lt;p&gt;Just in case you were wondering...&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114341361987472247?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114341361987472247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114341361987472247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114341361987472247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114341361987472247'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/03/news-on-302-release.html' title='News on the 3.0.2 release'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114299196430859861</id><published>2006-03-21T17:44:00.000-08:00</published><updated>2006-03-21T17:46:04.346-08:00</updated><title type='text'>Xen 3.0.2 will be going out soon</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I dropped my latest (and hopefully final) version of the XML-RPC enablement for Xend this afternoon.  The XML-RPC support is one of the last features to be merged before the 3.0.2 release so I expect we'll see 3.0.2 go out sometime this week.&lt;/p&gt;

&lt;p&gt;I'm quite happy that we're actually keeping to our 4-8 week release cycle.  Unfortunately, we're probably going to slip a tiny regression into the 3.0.2 release.  Last week, I noticed that our block-attach code is failing.  Apparently, we had some problems in our test suite that were masking the fact that it has been failing for quite some time now.  block-attach isn't an extremely important feature so I don't think it's something that will hold up 3.0.2 but it would be nice to fix before releasing.&lt;/p&gt;

&lt;p&gt;I'm pretty sure it's hotplug related.  Our use of hotplug for device bring up definitely has been a pain for us.  Hopefully Rusty's new drivers won't require these sort of things and we'll hopefully gain some robustness.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114299196430859861?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114299196430859861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114299196430859861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114299196430859861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114299196430859861'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/03/xen-302-will-be-going-out-soon.html' title='Xen 3.0.2 will be going out soon'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114149114899775944</id><published>2006-03-04T08:51:00.000-08:00</published><updated>2006-03-04T08:52:29.050-08:00</updated><title type='text'>Xgl is now my default desktop</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I finally got around to figuring out why emacs wouldn't start.  Now it will.  The only thing left that would make things just perfect is if I could figure out how to have compiz start automatically.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114149114899775944?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114149114899775944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114149114899775944' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114149114899775944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114149114899775944'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/03/xgl-is-now-my-default-desktop.html' title='Xgl is now my default desktop'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114145749297763032</id><published>2006-03-03T23:30:00.000-08:00</published><updated>2006-03-03T23:31:33.010-08:00</updated><title type='text'>Getting NetworkManager to work under Dapper</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Just FYI, if you have a network interface configured in /etc/network/interfaces then the new NetworkManager won't touch it.&lt;/p&gt;

&lt;p&gt;I've been racking my brain for weeks over this one (well not really).&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114145749297763032?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114145749297763032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114145749297763032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114145749297763032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114145749297763032'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/03/getting-networkmanager-to-work-under.html' title='Getting NetworkManager to work under Dapper'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114140962968404685</id><published>2006-03-03T10:13:00.000-08:00</published><updated>2006-03-03T10:13:49.706-08:00</updated><title type='text'>Some times you just have to derive it yourself</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I've got my shared memory QEMU interface working really well.  So well, in fact, that I'm looking for the next hard thing to do.  One of the neatest features of my old QEMU GTK gui was that it supported software scaling using GDK pixbuf.&lt;/p&gt;

&lt;p&gt;GDK pixbuf is kind of annoying though because it's a client side image.  The scaling code
in GDK is very pixbuf specific too.  Also, I never was able to figure out how to do partial updates of a scaled image without getting artifacts.&lt;/p&gt;

&lt;p&gt;Last night I started reading about bilinear scaling.  The first thing I learned is that is not really scaling, but filtering, but not really filtering, actually interpolation.  Last night I finally came across a site that gave a good explaination of it in terms of graphics but lacked the math.  The only sites that I found that had the math provided it in either a heavily solved form (solving for different things that I was looking for mind you) or just made no sense at all.&lt;/p&gt;

&lt;p&gt;This morning, I decided to see about deriving this myself so that I'd actually understand it.  The idea is pretty simple, given a point of unknown color that lies in the middle of four points of known color, calculate relative distance from each known point to the unknown point.  Then use the distances (with the total distance of all points normalized to 1) as a factor for each known color and simply sum the known colors to obtain the unknown colors.&lt;/p&gt;

&lt;p&gt;This may sound obtuse but it's really intuitive when you see it in action.  It's just saying that the closer an unknown point is to a known point, the more that known point's color should contribute to the unknown point's color.&lt;/p&gt;

&lt;p&gt;Know that I understand the algorithm and have an implementation, I've thought of many interesting optimizations.  For instance, the amount that a known point contributes to an unknown point is orthagonal to the actual color of the known points.  This means it can be computed once.  This reduces the actual operations per update to 4 multiples and 5 adds per pixel.  This seems like the sort of thing that I should be doing with MMX so I'll be looking into that.&lt;/p&gt;

&lt;p&gt;The other part of this algorithm that requires computation is determining which known points surround an unknown point.  The cool thing here is that this not only independent of the color of the pixels but computing the X coordinates of the known points given an unknown point's X coordinate is independent of the Y coordinates of the unknown point and vice versa.  This means that it can be precompute once for a single row and then once for a single column!  That requires very little memory (which is good because I'm slightly concerned that caching the color factors will take up an enormous amount of memory).&lt;/p&gt;

&lt;p&gt;Fun stuff!&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114140962968404685?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114140962968404685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114140962968404685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114140962968404685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114140962968404685'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/03/some-times-you-just-have-to-derive-it.html' title='Some times you just have to derive it yourself'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-114085162860272120</id><published>2006-02-24T23:12:00.000-08:00</published><updated>2006-02-24T23:13:48.706-08:00</updated><title type='text'>Host filesystem for Qemu</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I hacked together a simple host filesystem for Qemu this afternoon using fuse.  This now becomes yet another project on my plate that needs cleanup and working through the submission process.&lt;/p&gt;

&lt;p&gt;I use Qemu a lot and have some fancy scripts to automatically build disk images based on directories so I can easily test Xen and such.  Of course, it's a real pain for things like Xend testing b/c I cannot just simply make a quick source code change and test again.&lt;/p&gt;

&lt;p&gt;Even this it's a very primative hostfs (read only, single user), it's actually more than enough for what I need.  I have to get my new webserver in line so I can make this stuff visible.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-114085162860272120?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/114085162860272120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=114085162860272120' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114085162860272120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/114085162860272120'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/02/host-filesystem-for-qemu.html' title='Host filesystem for Qemu'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113963160389649934</id><published>2006-02-10T20:19:00.000-08:00</published><updated>2006-02-10T20:20:03.930-08:00</updated><title type='text'>Touchscreen Emulation</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Today I implemented emulation for the Wacom Touchpad.  The idea behind implementing this was that many remote display protocols wish to deal with the mouse in absolute coordinates whereas PS/2 mice report in relative coordinates.  Stephen Tweedie had the brillant idea at the recent XenSummit of just emulating a Touchscreen instead of a PS/2 mouse which solves this problem since Touchpads use absolute coordinates.&lt;/p&gt;

&lt;p&gt;After milling around, I finally got around to it today.  All in all, it took a few hours going from zero knowledge to a functional emulated Wacom device.  Having an X driver really helped.  I talked a bit to some folks in IRC about how to expose it in QEmu so now I just have to throw a patch together.&lt;/p&gt;

&lt;p&gt;Without the source for X, this would have easily taken me a couple weeks to do...&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113963160389649934?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113963160389649934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113963160389649934' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113963160389649934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113963160389649934'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/02/touchscreen-emulation.html' title='Touchscreen Emulation'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113946637856135226</id><published>2006-02-08T22:24:00.000-08:00</published><updated>2006-02-08T22:26:18.596-08:00</updated><title type='text'>More framebuffer goodness</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Well, for starters, I've reach 100% pass rate with xm-test for the Xend XML/RPC code so I can take a break from that for a little bit while Xen settles down after the huge HVM merge.  This leaves some time to work on the framebuffer again.&lt;/p&gt;

&lt;p&gt;I talked to Ian for some time today about the framebuffer and in what form it should be merge.  Ian has a very valid concern that we don't introduce things that are immediately deprecated (seeing something like the Cirrus FB emulated by the device model as a prime example of this).  I think we were able to reach an agreement that as long as the framebuffer can provide good VNC performance (this means ARGB cursor, copy operations, etc.) it's good for quite a while (5 year time frame).&lt;/p&gt;

&lt;p&gt;It was quite productive although a bit draining.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113946637856135226?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113946637856135226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113946637856135226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113946637856135226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113946637856135226'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/02/more-framebuffer-goodness.html' title='More framebuffer goodness'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113841483211148513</id><published>2006-01-27T18:20:00.000-08:00</published><updated>2006-01-27T18:20:32.120-08:00</updated><title type='text'>Can't get enough of previrtualization</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I spend a lot of my time pursuing ideas that I find interesting but do not necessarily pan out into anything.  Over the past year, I've spent a lot of time looking into previrtualization.  Previrtualization is an automated paravirtualization technique that uses the assembler to automatically convert sensitive instructions into more friendly versions.&lt;/p&gt;

&lt;p&gt;The afterburning macros are pretty cool and I've explored a number of enhancements to that technique.  However, it's fundamentally limited by the need to use a patched assembler.  I'm currently exporing a simplistic post-processor approach that uses some interesting gas magic (without requiring a new assembler).  We'll see how it works.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113841483211148513?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113841483211148513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113841483211148513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113841483211148513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113841483211148513'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/01/cant-get-enough-of-previrtualization.html' title='Can&apos;t get enough of previrtualization'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113841454417953115</id><published>2006-01-27T18:15:00.000-08:00</published><updated>2006-01-27T18:15:44.210-08:00</updated><title type='text'>Wrapping up the XenSummit</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I still haven't blogged about the Summit.  I really intend to.  Perhaps I'll begin tomorrow.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113841454417953115?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113841454417953115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113841454417953115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113841454417953115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113841454417953115'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/01/wrapping-up-xensummit.html' title='Wrapping up the XenSummit'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113832708837190964</id><published>2006-01-26T17:56:00.000-08:00</published><updated>2006-03-27T08:43:31.153-08:00</updated><title type='text'>Simon Crosby is a dink.</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;He makes Xen look bad by spewing XenSource marketing crap &lt;a href="http://x86vmm.blogspot.com/2006/01/hola-amigos.html"&gt;all over the place&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Sigh.&lt;/p&gt;

&lt;p&gt;FWIW, Keith, I think, is assuming that we switch the full page table out to provide isolated userspace/kernelspace memory environments.  We don't do this.  We simply bring in a PGD for kernelspace on switch.  This doesn't invalidate the whole TLB so it really isn't that bad.  The problem is that the kernel has to run in ring 3 to ensure that it cannot get at the hypervisor's memory because segmentation was removed from x86-64.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt;  I should point out that Simon is a nice guy overall.  I'm somewhat bothered because I'm afraid that Xen does not get the respect it ought to get because there is so much FUD surrounding it in the press.  Everytime someone claims that Xen is the only robust, enterprise-ready, virtualization solution we lose a little more credibility.  The truth of the matter is that Xen is a young Open Source project with a lot of promise.  It's not nearly as robust as other more mature projects (like the Linux kernel) and it's certainly not as robust as enterprise hypervisors like IBM's PHYP.  That's not to say that it won't be in time but I think we would do better as a project if everyone involved in the project was a bit more forthright.
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113832708837190964?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113832708837190964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113832708837190964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113832708837190964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113832708837190964'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/01/simon-crosby-is-dink.html' title='Simon Crosby is a dink.'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113735168812166629</id><published>2006-01-15T11:01:00.000-08:00</published><updated>2006-01-15T11:01:28.163-08:00</updated><title type='text'>Almost there</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I'm very close to having a patch ready for xen-devel with the VFB.  I just have to integrate the vncfb into the build tree and do some general cleanup.&lt;/p&gt;

&lt;p&gt;Whew.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113735168812166629?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113735168812166629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113735168812166629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113735168812166629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113735168812166629'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/01/almost-there.html' title='Almost there'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113713126304019541</id><published>2006-01-12T21:47:00.000-08:00</published><updated>2006-01-12T21:47:43.060-08:00</updated><title type='text'>Major VFB refinements</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I've switched the XenVFB over to write-fault updating (thanks to Gerd Hoffman).  Write-faulting is a method to provide partial framebuffer updates by removing write permission on the framebuffer.  When a write-fault occurs, the page is brought in and a timer is activated (if not already active).  When the timer goes off, all of the faulted in pages are collected up and write-protected again and an update event is triggered for the rectangle that contains all of these pages.&lt;/p&gt;

&lt;p&gt;It's a pretty clever technique that Gerd uses for the UML framebuffer.  Its going to require a bit of tweaking to get right for VNC though.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113713126304019541?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113713126304019541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113713126304019541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113713126304019541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113713126304019541'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2006/01/major-vfb-refinements.html' title='Major VFB refinements'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113534894992539150</id><published>2005-12-23T06:42:00.000-08:00</published><updated>2005-12-23T06:42:29.943-08:00</updated><title type='text'>In Joisey</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I'm currently in Jersey and have found some time to do a little hacking.  The current distraction is &lt;a href="http://hg.codemonkey.ws/libxend"&gt;libxend&lt;/a&gt;.  There are a few reasons I'm spending time on it.  The first is that it's a lot of easy work which makes it ideal for a few minutes here and there of hacking.  Second is that I need it for a project I'm working on at IBM.  A big part of this is too is that I really want to build my own tool chain again--not a public one like vm-tools but just something that I can use.  I really dislike the xm interface.  I don't want to use configuration files or anything of that junk.  I particularly despise the xm networking mechanism too.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113534894992539150?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113534894992539150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113534894992539150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113534894992539150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113534894992539150'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/12/in-joisey.html' title='In Joisey'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113493203784315388</id><published>2005-12-18T10:52:00.000-08:00</published><updated>2005-12-18T10:53:57.873-08:00</updated><title type='text'>A Good VM Widget</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;There's four display modes that I care about for running virtual machines.  These names are made up and probably in use by noone but me.  The first mode of interest is serial mode.  In this case, you assume the guest thinks you have a vt100 terminal connect to the serial port and tell the guest to display the console to that.  When dealing with serial mode, you need something capable of rendering a vt100 terminal (which is no small task!).&lt;/p&gt;

&lt;p&gt;The second, closely related, mode is CGA mode.  In CGA mode, the guest thinks it has a VGA screen attached to it but since it's just displaying text, it uses the old CGA compatibility mode supported by VGA.  In this mode, instead of rendering pixels to the screen, the screen is divided into characters with a few simply attributes (and a foreground/background color).  There are some aspects of CGA mode that make it far superior to serial mode.  Namely, the experience identical to being in front of a physical computer (scroll back works as does VT switching).  A down side is that it is identical to being in front of an actually computer (so scroll back is really short and goes away on VT switching).  Only some simply drawing primatives are needed to implement CGA mode (rendering a font with certain colors).&lt;/p&gt;

&lt;p&gt;The third mode is local VGA mode.  In local VGA mode, you're rendering the VGA display (in whatever depth it's setup in) to the local display.  In this mode, you can do some interesting pass through of 2d or 3d drawing primatives.&lt;/p&gt;

&lt;p&gt;The final mode is remote display mode.  In remote display mode, you're on a completely different machine than the VM and the display has to be sent across the network via something like VNC.&lt;/p&gt;

&lt;p&gt;Clearly, these four modes present interesting challenges and *no* virtualization solution implements them all well.  What would be really cool to see in the future is a single GTK widget that was capable of handling any of these modes.  This would help make it possible to build a really nice GUI that Just Worked either as a local or remote management interface.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113493203784315388?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113493203784315388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113493203784315388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113493203784315388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113493203784315388'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/12/good-vm-widget.html' title='A Good VM Widget'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113480254536750145</id><published>2005-12-16T22:55:00.000-08:00</published><updated>2005-12-16T22:55:45.483-08:00</updated><title type='text'>A neat VFB feature</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;A patch was recently posted on qemu-devel that allows for the VGA device (when in CGA mode) to be rendered directly by ncurses.  It's a pretty neat effect and given a more complete implementation would be really cool.&lt;/p&gt;

&lt;p&gt;In fact, I think that long term, for Xen, what I would like is to support this by default and only use the virtual framebuffer if it's enabled by the guest.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113480254536750145?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113480254536750145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113480254536750145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113480254536750145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113480254536750145'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/12/neat-vfb-feature.html' title='A neat VFB feature'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113475976701643762</id><published>2005-12-16T11:02:00.000-08:00</published><updated>2005-12-16T11:02:47.046-08:00</updated><title type='text'>Userspace VFB Updates</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Gerd Knorr pointed me to a VFB driver he recently wrote for UML.  The similiarities are pretty interesting and a good sign that I'm going in a plausible direction.  Gerd is doing one thing in his driver that peeks my interest quite a bit.&lt;/p&gt;

&lt;p&gt;Userspace VFB writes (ala X) are challenging because userspace gets to map the framebuffer directly into its address space.  Since there is not update notification mechanism, this makes it very challenging to determine when the framebuffer should be blitted on screen (and which portions should be blitted).  Its terribly wasteful to blit the entire framebuffer 30 times a second and even more wasteful to try and map that to something like VNC.&lt;/p&gt;

&lt;p&gt;I had briefly considered using demand paging to work around this problem.  Linux's mmap() is lazy in that it only maps pages when they are first read/written.  You could potentially trap writes by changing the mappings to be read-only or even just not actually map the pages.&lt;/p&gt;

&lt;p&gt;Of course, you want to avoid taking a hit for every single byte read/write.  I figured this was going to be challenging and put it off.  Gerd, however, has found a simple and clever approach.  Gerd uses a timer that fires at the FPS rate and if there was a page that has been mapped in since then, he removes the mapping and issues appropriate updates.  That's it.  It's quite simple and yet also quite powerful.  It has all the right properties too of little-to-no performance overhead when the display is idle.  I'll certainly be adopting it for the Xen VFB.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113475976701643762?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113475976701643762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113475976701643762' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113475976701643762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113475976701643762'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/12/userspace-vfb-updates.html' title='Userspace VFB Updates'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113471275066391637</id><published>2005-12-15T21:58:00.000-08:00</published><updated>2005-12-15T21:59:10.700-08:00</updated><title type='text'>A Bit ADD</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I can definitely be ADD sometimes.  I haven't worked on the VFB for a few days now mostly from studying.  I have some free time today which resulted in me playing around with iCal.  It's pretty cool stuff.&lt;/p&gt;

&lt;p&gt;It makes me wonder why we don't have /var/spool/calendar and proccalendar...&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113471275066391637?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113471275066391637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113471275066391637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113471275066391637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113471275066391637'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/12/bit-add.html' title='A Bit ADD'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113383887955843683</id><published>2005-12-05T19:13:00.000-08:00</published><updated>2005-12-05T19:14:39.580-08:00</updated><title type='text'>Xen Attracts a Crowd</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;One of the really interesting things about the Xen project is that there are a ton of big name folks involved in it in some way or another.  While this is generally an awesome thing (you get a bunch of awesome information you could get nowhere else), it sometimes means simple conversations end up becoming major holy wars.
&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113383887955843683?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113383887955843683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113383887955843683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113383887955843683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113383887955843683'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/12/xen-attracts-crowd.html' title='Xen Attracts a Crowd'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113382970516292283</id><published>2005-12-05T16:41:00.000-08:00</published><updated>2005-12-05T16:41:45.206-08:00</updated><title type='text'>Xen Virtual Framebuffer</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I posted my first version of a Xen Virtual Framebuffer today.  Hopefully this will lead to lots of pretty GUIs that makes Xen as accessible to the average user as a product like VMware.  It's amazing how much people love VMware.  This weekend someone who I had never met before spent 10 minutes telling me how his company couldn't exist without it.&lt;/p&gt;

&lt;p&gt;I think a large part of that is ease of use.  He really didn't care if it was slow, or expensive, or whatever.  It Just Works.  It's a bit early for New Years resolutions, but focusing on ease-of-use is going to be mine.&lt;/p&gt;

&lt;p&gt;If you're interested in the VFB stuff, check out &lt;a href="http://wiki.xensource.com/xenwiki/VirtualFramebuffer"&gt;http://wiki.xensource.com/xenwiki/VirtualFramebuffer&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113382970516292283?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113382970516292283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113382970516292283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113382970516292283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113382970516292283'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/12/xen-virtual-framebuffer.html' title='Xen Virtual Framebuffer'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113349794002259431</id><published>2005-12-01T20:31:00.000-08:00</published><updated>2005-12-01T20:32:20.046-08:00</updated><title type='text'>Virtual Framebuffers</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;One really neat thing that we do at IBM is have weekly architecture calls often with guest speakers.  This combines the LTC and Research together and is often a place where really cool things are discussed.&lt;/p&gt;

&lt;p&gt;Jimi was able to arrange for Ricardo Baratto from the NCL at Columbia to give a presentation on THINC this week.  I wasn't able to attend due to class but after reading a couple of the papers on it, I grew a new interest in a different approach to para-virtual framebuffers.&lt;/p&gt;

&lt;p&gt;Apparently, the framebuffer interface in Linux is butt-simple and I was able to hack up a pretty quick vmalloc() based framebuffer.  I'm currently plumbing it up within Xen and will hopefully have a demo soon.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113349794002259431?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113349794002259431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113349794002259431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113349794002259431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113349794002259431'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/12/virtual-framebuffers.html' title='Virtual Framebuffers'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113281626262805912</id><published>2005-11-23T23:10:00.000-08:00</published><updated>2005-11-23T23:11:02.656-08:00</updated><title type='text'>PyGTK VncView Wrapper</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;It was amazingly easy once I fonud a developersWorks article on it.  In a 34 line python app, I have a fully functioning VNC viewer that supports tabbing :-)  Swank!&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113281626262805912?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113281626262805912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113281626262805912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113281626262805912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113281626262805912'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/pygtk-vncview-wrapper.html' title='PyGTK VncView Wrapper'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113281309906107453</id><published>2005-11-23T22:17:00.000-08:00</published><updated>2005-11-23T22:18:19.083-08:00</updated><title type='text'>SetName VNC Encoding</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I decided to hold off on the zlib reset VNC encoding extension.  I'm contemplating whether recompressing is an option (I want to avoid protocol extensions at all cost).&lt;/p&gt;

&lt;p&gt;However, one extension that I know is necessary is and not terribly contraversarily is updating the name of the desktop.  This extension is very simple, a new pseudo-encoding that is sent as a U32 that is the size of the new name, followed by the name.&lt;/p&gt;

&lt;p&gt;That's it.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113281309906107453?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113281309906107453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113281309906107453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113281309906107453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113281309906107453'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/setname-vnc-encoding.html' title='SetName VNC Encoding'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113279601397948004</id><published>2005-11-23T17:33:00.000-08:00</published><updated>2005-11-23T17:33:34.006-08:00</updated><title type='text'>Extending the RFB Protocol</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I just realized that I needed to add a new extension to the RFB protocol to support my proxy.  The problem is that each client maintains one or more zlib streams that are used to decrypt the data.  These streams must be maintained used to process the data in order.&lt;/p&gt;

&lt;p&gt;Proxying VNC sessions then can cause stream corruption because there's no way to signal the client to clear out the stream.  How do we fix this?&lt;/p&gt;

&lt;p&gt;Introduce a new encoding that the server issues to signal a switch to a new set of streams.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113279601397948004?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113279601397948004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113279601397948004' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113279601397948004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113279601397948004'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/extending-rfb-protocol.html' title='Extending the RFB Protocol'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113263272498138609</id><published>2005-11-21T20:11:00.000-08:00</published><updated>2005-11-21T20:13:16.050-08:00</updated><title type='text'>My old university happens to be in the most dangerous city in the US</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;According to &lt;a href="http://today.reuters.com/news/newsArticle.aspx?type=domesticNews&amp;storyID=2005-11-21T201303Z_01_SIB172696_RTRUKOC_0_US-CRIME-CAMDEN.xml"&gt;Reuters&lt;/a&gt;, Camden, NJ, the home of the Rutgers campus I attended before transfering to UT, is the most dangerous city in the country for the second year in a row.  The muder rate was 10 times the national average and the robbery rate was 7 times the national average.&lt;/p&gt;

&lt;p&gt;And people asked why I transferred...&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113263272498138609?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113263272498138609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113263272498138609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113263272498138609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113263272498138609'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/my-old-university-happens-to-be-in.html' title='My old university happens to be in the most dangerous city in the US'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113263188281257907</id><published>2005-11-21T19:57:00.000-08:00</published><updated>2005-11-21T19:58:02.860-08:00</updated><title type='text'>And from nowhere, SMP support in QEMU</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Being on qemu-devel is like having a monthly Christmas present.  Out of nowhere, Fabrice just checks in amazing things.  A few weeks ago it was USB, and this evening, it was SMP support.&lt;/p&gt;

&lt;p&gt;It's currently just guest SMP (the virtual CPUs are all multiplexed in the same process) but I wouldn't be surprised to see host SMP appear in the near future.&lt;/p&gt;

&lt;p&gt;I wonder if SMP Xen will work under QEMU.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113263188281257907?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113263188281257907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113263188281257907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113263188281257907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113263188281257907'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/and-from-nowhere-smp-support-in-qemu.html' title='And from nowhere, SMP support in QEMU'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113261719553089108</id><published>2005-11-21T15:53:00.000-08:00</published><updated>2005-11-21T15:56:18.436-08:00</updated><title type='text'>A really nasty bug</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;The Tight VNC Encoding has a number of different filters to improve data compression quality. One of those filters is "palette" which converts the pixel data into an indexed 8-bit representation. Before sending the data, the size of the palette (minus 1) is sent as a single byte and then the palette is sent followed by the filtered pixel data.&lt;/p&gt;

&lt;p&gt;I had code that looked something like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
uint8_t palette_size = ptr[0] + 1;
uint8_t *palette = ptr + 1;
uint8_t *pixel_data = ptr + palette_size * bpp + 1;

decode_length(pixel_data);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Strangely, when attempting to decode the length, I was getting an impossibly large number which resulted in garbage being passed to zlib resulting in a decompression error. So where's the error? It's subtle. If palette_size == 256, or ptr[0] == 255, then palette_size silently overflows to 0 resulting in pixel_data actually being the palette. Curiously, I used a int for palette_size in the protocol parser so I wasn't having a problem there. Doh!&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113261719553089108?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113261719553089108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113261719553089108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113261719553089108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113261719553089108'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/really-nasty-bug.html' title='A really nasty bug'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113259930956973696</id><published>2005-11-21T10:55:00.000-08:00</published><updated>2005-11-21T10:55:09.580-08:00</updated><title type='text'>VNC client library needs some work</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;The last real feature I needed for my vncviewer widget was Tight Encoding.  As I mentioned in an earlier post, I had worked out a protocol parser so today I decided to sit down and write a decoder.&lt;/p&gt;

&lt;p&gt;I ran into pixel format hell though as Tight uses packed RGB pixels as a special case when bits_per_pixel == 4.  ZRLE uses it too but it's considerably easier to deal with in that case.  This has led me to believe that it's time to factor out the decoding routines into a completely different library.  Instead of providing drawing primatives, I think I really have to just give it a buffer like with QEmu.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113259930956973696?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113259930956973696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113259930956973696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113259930956973696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113259930956973696'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/vnc-client-library-needs-some-work.html' title='VNC client library needs some work'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113254715328980084</id><published>2005-11-20T20:25:00.000-08:00</published><updated>2005-11-20T20:25:53.313-08:00</updated><title type='text'>I'm done for the night</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;My wrists are giving out.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113254715328980084?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113254715328980084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113254715328980084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113254715328980084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113254715328980084'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/im-done-for-night.html' title='I&apos;m done for the night'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113253431841602587</id><published>2005-11-20T16:51:00.000-08:00</published><updated>2005-11-20T16:51:58.426-08:00</updated><title type='text'>I just can't help myself</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I've been using gnome-blog-poster for my posts so far and while it's mostly nice, it uses the old XML-RPC interface for blogger which doesn't support titles.  So, I've written my own that uses the new Atom based API.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113253431841602587?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113253431841602587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113253431841602587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113253431841602587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113253431841602587'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/i-just-cant-help-myself.html' title='I just can&apos;t help myself'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113251666660488980</id><published>2005-11-20T11:57:00.000-08:00</published><updated>2005-11-20T16:52:36.363-08:00</updated><title type='text'>Tight encoding and a new approach to proxying</title><content type='html'>I finished implementing support for Tight encoding in my VNC protocol library today. This is exciting because Tight is clearly the best encoding scheme that's supported by the largest number of servers out there.&lt;p&gt;
I also had an interesting thought about how this should all work within Xen. I was envisioning a single daemon that was told to open a PTY and listen on two sockets (one for the incoming connections and one for the reverse connection).&lt;/p&gt;&lt;p&gt;
I'm now thinking that a much more generic proxy is a better answer. The idea would be to have a VNC proxy that can be given an arbitrary number of VNC connections to multiplex (that are normal or reverse). A config file of some sort could define the key bindings used for switching. The key bindings would obviously have to be directional (alt-f7 to go from session 1-&gt;2 and ctrl-alt-f1 to go from session 2-&gt;1).&lt;/p&gt;&lt;p&gt;
I would then just implement a VNC terminal program and run that as a normal VNC server.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113251666660488980?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113251666660488980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113251666660488980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113251666660488980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113251666660488980'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/tight-encoding-and-new-approach-to.html' title='Tight encoding and a new approach to proxying'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113245353656088952</id><published>2005-11-19T18:25:00.000-08:00</published><updated>2005-11-19T18:26:59.810-08:00</updated><title type='text'>An interesting idea</title><content type='html'>I just had a rather interesting idea. One downside of using Xvnc for a paravirtual framebuffer is that it requires a TCP connection to dom0. This is problematic for a few reasons. The first is that it assumes networking is up which is generally a big fat assumption. Imagine the use-case of a distro installation.&lt;p&gt;
The second problem is that Xen supports network interface crediting which is going to be an important feature for a lot of users. A paravirtual framebuffer is going to use a lot of bandwidth so this is not practical.&lt;/p&gt;&lt;p&gt;
While thinking about how much work it would be to port Xvnc to user a shared memory ring queue, I had a revelation. Why not create a daemon that listens on a socket in domain-U and then transfers all the data on that socket via a ring queue to then expose it (as another socket) in domain-0. You now have a dedicated shared memory transport that doesn't require networking. It should be relatively high performance (certainly better than just using a vif).&lt;/p&gt;&lt;p&gt;
Much more elegant than something like dedicating a vif.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113245353656088952?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113245353656088952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113245353656088952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113245353656088952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113245353656088952'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/interesting-idea.html' title='An interesting idea'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113244682022447756</id><published>2005-11-19T16:33:00.000-08:00</published><updated>2005-11-19T16:34:49.573-08:00</updated><title type='text'>VNC Everywhere</title><content type='html'>I've been working with VNC a &lt;strong&gt;lot&lt;/strong&gt; lately.  You may or may not know that I rewrote QEMU's GUI to be a native GTK application (more info &lt;a href="http://qemu.codemonkey.ws/"&gt;here&lt;/a&gt;).  After seeing how easy this was and how much I enjoyed it, I decided I really wanted the same thing for Xen.&lt;p&gt;
This means that the virtual framebuffer problem has to be solved. It's a big one that noone's wanted to touch so far and that we get an awful lot of criticism for.&lt;/p&gt;&lt;p&gt;
A few of the Cambridge guys want to do the obvious. Implement a paravirtual framebuffer driver in Linux. They even have some smart ideas about strifing it across pages to identify update regions. I don't like this approach though because it's going to have a noticable performance impact (event if noone's connected, we still have to render the console text to the buffer) and it's a lot of work.&lt;/p&gt;&lt;p&gt;
I have a different approach. The idea is to leverage Xvnc (as many do right now with Xen). In domain-0, we would have a fake VNC server that connects a domain-U's emergency console and renders the console to VNC. This is essentially a VNCTerm program and not an amazingly new concept. The clever part in this story though is having this fake VNC server also play the role of a VNC proxy by setting up the domain-U's X server to actually be Xvnc configured to use reverse VNC to connect back to the fake VNC server. When X starts up in the domain, the fake VNC server would accept the reverse connection and do a virtual VT switch and begin acting just a VNC proxy.&lt;/p&gt;&lt;p&gt;
By utilizing the DesktopSize VNC psuedo-encoding, this would give the appearance of Just Working. The fake VNC server can also trap ctrl-alt-fN key events to switch back to the emergency console.&lt;/p&gt;&lt;p&gt;
If the distro's are willing to play ball here, this can be easily extended for graphical installers too since SUSE has had support for installations over VNC for quite some time and RedHat would simply have to launch Xvnc to run Anaconda in.&lt;/p&gt;&lt;p&gt;
I'm somewhere between the proof-of-concept and alpha stage right now. I've written my own VNC protocol parsing library (that's a whole other post), a GTK VNC viewing widget, a VNCTerm server, and a VNC proxy (using the protocol library). Everything needs a lot of cleanup and some bug fixes. The performance is already very good so I'm quite happy about that. With any luck, Xen 3.1 will be extremely easy to use.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113244682022447756?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113244682022447756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113244682022447756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113244682022447756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113244682022447756'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/vnc-everywhere.html' title='VNC Everywhere'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113244378398804696</id><published>2005-11-19T15:43:00.000-08:00</published><updated>2005-11-19T16:35:29.133-08:00</updated><title type='text'>A little introspective</title><content type='html'>I've maintained many blogs in my time but they all have been self-hosted and using software that I wrote. This meant blogging involved quite a bit of work on my part.&lt;p&gt;
I've been wanting to start blogging about Xen development for some time now but have not wanted to invest the time in blogging again so I thought I'd give using blogger a go.&lt;/p&gt;&lt;p&gt;
We'll see how I like it.  For now, please use &lt;a href="http://blog.codemonkey.ws/"&gt;http://blog.codemonkey.ws&lt;/a&gt; to access this blog and you'll always go to the right place.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113244378398804696?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113244378398804696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113244378398804696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113244378398804696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113244378398804696'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/little-introspective.html' title='A little introspective'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8388514.post-113244363359884841</id><published>2005-11-19T15:38:00.000-08:00</published><updated>2005-11-19T15:40:33.610-08:00</updated><title type='text'>first post</title><content type='html'>first post!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8388514-113244363359884841?l=blog.codemonkey.ws' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.codemonkey.ws/feeds/113244363359884841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8388514&amp;postID=113244363359884841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113244363359884841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8388514/posts/default/113244363359884841'/><link rel='alternate' type='text/html' href='http://blog.codemonkey.ws/2005/11/first-post.html' title='first post'/><author><name>Anthony Liguori</name><uri>http://www.blogger.com/profile/14951928049865210496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
