<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
 <title>planet-ltc.org aggregator</title>
 <link>http://planet-ltc.org/aggregator</link>
 <description>planet-ltc.org - aggregated feeds</description>
 <language>en</language>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/PlanetLtc" type="application/rss+xml" /><item>
 <title>Lucas Meneghel Rodrigues: Linux on Power: Problems booting OpenSUSE on IBM system p machines</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/342932126/</link>
 <description>One of these days I was trying to boot the latest OpenSUSE image on one of my p series machines, to see how the new release was doing on power. However, I hit a problem: I was not able to boot the installation program on my openfirmware based machine. My friend Carlos figured out what [...]&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/342932126" height="1" width="1"/&gt;</description>
 <pubDate>Tue, 22 Jul 2008 13:47:00 -0700</pubDate>
<feedburner:origLink>http://mybravenewworld.wordpress.com/2008/07/22/problems-booting-opensuse-on-ibm-system-p-machines/</feedburner:origLink></item>
<item>
 <title>Bill Buros: Improving Performance on Linux: RHEL 5.2 and HPC performance hints</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/338036339/rhel-52-and-hpc-performance-hints.html</link>
 <description>Building on the SLES 10 sp2 kernel build post from a couple of weeks ago, we got the equivalent RHEL 5.2 page posted under the developerWorks umbrella.   Mostly the same conceptual steps, but a little different in the specifics.   And of course, in the RHEL 5.2 example, we reverse the example from SLES 10 by building a 4KB kernel where "normally" the RHEL 5.2 kernel is based on the 64KB pages.   It's a good experiment to play with when you want to see the performance gains that emerge from leveraging larger page sizes. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/wikis/display/LinuxP/Re-building+a+RHEL+5+kernel+for+Power"&gt;Re-building a RHEL 5 kernel for Power&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;We linked this in under the HPC Central wiki page where several of us are playing around with adding descriptive how-to's for HPC workloads based on practical experience.&lt;br /&gt;&lt;p&gt;See &lt;a href="http://www.ibm.com/developerworks/wikis/display/hpccentral/HPC+Central"&gt;HPC Central&lt;/a&gt;, follow the link to the &lt;a href="http://www.ibm.com/developerworks/wikis/display/hpccentral/Red+Hat+Enterprise+Linux"&gt;Red Hat Enterprise Linux&lt;/a&gt; page, which is where the kernel page is linked in.     We plan to replicate these pieces for SUSE Linux Enterprise Server next month.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/338036339" height="1" width="1"/&gt;</description>
 <pubDate>Thu, 17 Jul 2008 05:10:00 -0700</pubDate>
<feedburner:origLink>http://well-itdepends.blogspot.com/2008/07/rhel-52-and-hpc-performance-hints.html</feedburner:origLink></item>
<item>
 <title>Jeremy Kerr: asynchronous spu contexts, initial designs</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/336778622/</link>
 <description>&lt;p&gt;I've recently been working on some changes to the &lt;a
 href="http://git.kernel.org/?p=linux/kernel/git/jk/spufs.git"&gt;spufs&lt;/a&gt;
code, and thought I'd write-up some of the details.&lt;/p&gt;
&lt;p&gt;At present, the &lt;code&gt;spu_run&lt;/code&gt; syscall (used to run a SPU context)
blocks until the SPU program has exited (or some other event has happened,
such as a non-serviceable fault). This means that to take advantage of the
SPUs, you really need to start a new thread for each SPU context that you
create, otherwise your application will be sitting around waiting for each SPU
context to complete.&lt;/p&gt;

&lt;p&gt;In fact, we have an invariant in the spufs code at the moment that only
contexts that are currently being &lt;code&gt;spu_run&lt;/code&gt; will ever be runnable
(and, at the moment, schedulable).&lt;/p&gt;

&lt;p&gt;Ben H and I have been chatting about some ideas about asynchronous spu
contexts. This means that the userspace app can start the context, then later
retrieve the status of the SPU context (to see if it has stopped, faulted, or
whatever). We can then use standard POSIX semantics like &lt;code&gt;poll()&lt;/code&gt; to
see if a context is still running or has generated any "events", then handle
these events when they become available.&lt;/p&gt;

&lt;p&gt;In effect, this is similar to &lt;code&gt;spu_run&lt;/code&gt;: currently, the
&lt;code&gt;spu_run&lt;/code&gt; syscall runs the SPU, then blocks until an event happens,
which is then returned to userpsace as the return value of
&lt;code&gt;spu_run&lt;/code&gt;. The main difference is that we don't block in the kernel
while the SPU is running.&lt;/p&gt;

&lt;p&gt;So, I've been coding up an experimental change to spufs. Firstly, we have
to explicitly tell the kernel that we want a context to operate in asynchronous
mode, so I've added a new flag to the &lt;code&gt;spu_create&lt;/code&gt; syscall:
&lt;code&gt;SPU_CREATE_ASYNC&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I've opted for a file-based interface to these asynchronous contexts -
SPU events are retrieved by reading from a file. Contexts that are created with
the &lt;code&gt;SPU_CREATE_ASYNC&lt;/code&gt; flag have an extra file present (called
something like "&lt;code&gt;event&lt;/code&gt;") in their context directory in the
spufs mount. Reading from this file allows applications to retreive events
that the SPU program has raised.&lt;/p&gt;

&lt;p&gt;We need to define a format for the data read from this events file, so
here's something to get started with:&lt;/p&gt;
&lt;pre class="shaded code"&gt;
&lt;span class="ty"&gt;struct&lt;/span&gt; spu_event {
	&lt;span class="ty"&gt;uint32_t&lt;/span&gt; event;
	&lt;span class="ty"&gt;uint32_t&lt;/span&gt; status;
	&lt;span class="ty"&gt;uint32_t&lt;/span&gt; npc;
};
&lt;/pre&gt;
&lt;p&gt; - where the &lt;code&gt;event&lt;/code&gt; member specifies which event happened - a
stop-and-signal for example.&lt;/p&gt;

&lt;p&gt;The status and npc members return the status of the SPU and the next program
counter register, respectively. While not strictly necessary (this information
is available from other files in spufs), it's very likely that the application
will need these values in order to handle the event.&lt;/p&gt;

&lt;p&gt;So, users of this interface may look something like this:&lt;/p&gt;

&lt;pre class="shaded code"&gt;
&lt;span class="ty"&gt;uint32_t&lt;/span&gt; npc = &lt;span class="cs"&gt;0&lt;/span&gt;;
&lt;span class="ty"&gt;struct&lt;/span&gt; context {
        &lt;span class="ty"&gt;int&lt;/span&gt; fd;
        &lt;span class="ty"&gt;int&lt;/span&gt; event_fd;
} context;

&lt;span class="cm"&gt;/* create the context */&lt;/span&gt;
context.fd = spu_create(&lt;span class="cs"&gt;"/spu/ctx"&lt;/span&gt;, &lt;span class="cs"&gt;NULL&lt;/span&gt;, SPU_CREATE_ASYNC);

&lt;span class="cm"&gt;/* open the events file */&lt;/span&gt;
context.event_fd = openat(context.fd, &lt;span class="cs"&gt;"event"&lt;/span&gt;, O_RDWR);

&lt;span class="cm"&gt;/* start the context running. unlike the spu_run syscall,
 * this function does not block for the duration of the
 * spu program */&lt;/span&gt;
run_context(&amp;amp;context, npc);

&lt;span class="st"&gt;for&lt;/span&gt; (;;) {
        &lt;span class="ty"&gt;struct&lt;/span&gt; spu_event event;

        &lt;span class="cm"&gt;/* get the next event caused by the SPU */&lt;/span&gt;
        read(context.event_fd, &amp;amp;event, &lt;span class="st"&gt;sizeof&lt;/span&gt;(event));

        &lt;span class="st"&gt;if&lt;/span&gt; (event.event == SPU_EVENT_STOP)
                &lt;span class="st"&gt;break&lt;/span&gt;;

        &lt;span class="cm"&gt;/* handle other event ... */&lt;/span&gt;
}
&lt;/pre&gt;

&lt;p&gt;Note that the userspace examples here are not what we'd present to
Cell application developers. They're more low-level examples of how the
new asynchronous kernel interface works. In fact, the changes could be
completely transparent to applications which use the &lt;a
href="http://sourceforge.net/projects/libspe/"&gt;libSPE&lt;/a&gt; interface.&lt;/p&gt;

&lt;p&gt;This isn't far from the API provided by the current &lt;code&gt;spu_run&lt;/code&gt;
syscall, except that we're not waiting in the kernel while the SPU is
running.&lt;/p&gt;

&lt;p&gt;Also, we're going to need to control the SPU somehow - for example, we need
to implement the &lt;code&gt;run_context&lt;/code&gt; function in the pseudocode above.
Rather than overloading the &lt;code&gt;spu_run&lt;/code&gt; syscall, I've opted to use the
same event file - writes to this file will allow userspace to control the SPU.
I'm still working out the exact format of these writes, but the way I've
implemented it at the moment is that the application can write structures of
this layout to the file:&lt;/p&gt;

&lt;pre class="shaded code"&gt;
&lt;span class="ty"&gt;struct&lt;/span&gt; spu_control {
	&lt;span class="ty"&gt;uint32_t&lt;/span&gt; op;
	&lt;span class="ty"&gt;char&lt;/span&gt; data[];
};
&lt;/pre&gt;

&lt;p&gt;The contents of the &lt;code&gt;data&lt;/code&gt; member depends on the operation
requested (specified by the &lt;code&gt;op&lt;/code&gt; member). For example, a 'start spu'
operation would have four extra bytes - a &lt;code&gt;uint32_t&lt;/code&gt; containing the
NPC to start the SPU execution from. A 'stop spu' operation doesn't require any
extra parameters, so the &lt;code&gt;data&lt;/code&gt; member would be 0 bytes long.&lt;/p&gt;

&lt;p&gt;This would allow us to implement the &lt;code&gt;run_context&lt;/code&gt; function
as follows:&lt;/p&gt;
&lt;pre class="shaded code"&gt;
&lt;span class="ty"&gt;void&lt;/span&gt; run_context(&lt;span class="ty"&gt;struct&lt;/span&gt; context *context, &lt;span class="ty"&gt;uint32_t&lt;/span&gt; npc)
{
        &lt;span class="ty"&gt;uint32_t&lt;/span&gt; buf[2];

        buf[0] = SPU_CONTROL_START_SPU;
        buf[1] = npc;

        write(context.event_fd, buf, &lt;span class="st"&gt;sizeof&lt;/span&gt;(buf));
}
&lt;/pre&gt;
&lt;p&gt;There are plenty of other issues to deal with (like signals, and debugging),
but I have a basic prototype working at the moment. More to come!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/336778622" height="1" width="1"/&gt;</description>
 <pubDate>Tue, 15 Jul 2008 22:21:51 -0700</pubDate>
<feedburner:origLink>http://ozlabs.org/~jk/diary/tech/cell/spufs/asynchronous-spu-contexts-initial-designs.diary/</feedburner:origLink></item>
<item>
 <title>Bill Buros: Improving Performance on Linux: The building blocks of HPC</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/336068609/building-blocks-of-hpc.html</link>
 <description>Top 500 again.  Linpack HPL.    Hitting half a teraflop on a single system.&lt;br /&gt;&lt;br /&gt;Using RHEL 5.2 on a single IBM Power 575 system, Linux was able to hit half a teraflop with Linpack.   These water-cooled systems are pretty nice.   Thirty-two POWER6 cores packed into a fairly dense 2U rack form factor.   These systems are designed for clusters, so 14 nodes (14 single systems) can be loaded into a single rack.    Water piping winds its way into each system and over the cores (we of course had to pop one open to see how things looked and worked).   The systems can be loaded with 128GB or 256GB of memory.   A colleague provided a nice summary of the Linpack result over on IBM's &lt;a href="http://www.ibm.com/developerworks/blogs/page/linuxonpower"&gt;developerWorks&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For Linux, there are several interesting pieces, especially as we look at Linpack as one of the key workloads that takes advantage of easy HPC building blocks.   RHEL 5.2 comes with &lt;a href="http://www.ibm.com/developerworks/wikis/display/hpccentral/64KB+pages+on+Linux+for+Power+systems"&gt;64KB pages&lt;/a&gt;.    The 64KB pages provides easy performance gains out of the box.    The commercial compilers and math libraries provide the tailored and easy exploitation of the POWER6 systems.    Running Linpack on clusters is the whole basis for the Top 500 workloads.&lt;br /&gt;&lt;br /&gt;It's easy to take advantage of the building blocks in RHEL 5.2.  OpenMPI in particular, the Infiniband stack, libraries tuned for the POWER hardware are all included.    When we fire up a cluster node, we automatically install these components.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;openmpi including -devel packages&lt;br /&gt;&lt;/li&gt;&lt;li&gt;openib&lt;/li&gt;&lt;li&gt;libehca&lt;br /&gt;&lt;/li&gt;&lt;li&gt;libibverbs-utils&lt;/li&gt;&lt;li&gt;openssl&lt;/li&gt;&lt;/ul&gt;These building blocks allow us to take the half-a-teraflop single system Linpack result and begin running it "out-of-the-box" on multiple nodes.    There are cluster experts around that I'm learning from.   Lots of interesting new challenges in the interconnect technologies and configurations.   In this realm, I'm learning that one of the technology shifts emerging is the 10GBe (10GB Ethernet) interconnect vs Infiniband.   Infiniband has all sorts of learning curves associated with it.   Everytime I try to do something with Infiniband, I'm finding another thing to learn.   It'll be interesting to see whether the 10GBe technology will be more like simply plugging in an Ethernet cable and off we go.   A good summer project...&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/336068609" height="1" width="1"/&gt;</description>
 <pubDate>Tue, 15 Jul 2008 05:04:00 -0700</pubDate>
<feedburner:origLink>http://well-itdepends.blogspot.com/2008/07/building-blocks-of-hpc.html</feedburner:origLink></item>
<item>
 <title>Thiago Bauermann: Linux on Power: GCC Summit 2008 - been there, got the t-shirt</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/334850903/</link>
 <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;I have finally found some time to write a bit about the &lt;a href="http://www.gccsummit.org/2008/"&gt;GCC Developer&amp;#8217;s Summit 2008&lt;/a&gt;, which happened one month ago in Ottawa, Canada (well, I didn&amp;#8217;t really find time, since it&amp;#8217;s past 1:30 AM now but still&amp;#8230;).&lt;/p&gt;
&lt;p&gt;In summary, I had a blast there! I was in last year&amp;#8217;s summit and enjoyed it and learned a lot from it. But this time I already knew GDB people and they knew me, and I am involved in a couple of current developments and have more experience with the project, all of which made some difference. And everybody there is very friendly, of course, even if they never heard of you before. &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt; In fact, Ian Taylor in his welcome presentation urged people to be friendly to newcomers since GCC and the GNU toolchain need new blood.&lt;/p&gt;
&lt;p&gt;There was a good number of&lt;strong&gt; GDB-related events&lt;/strong&gt;:  a GDB talk and two debugging information talks, a debug information BoF, an informal GDB get-together and a GDB BoF. Unfortunately I know squat about GCC internals (I intend to learn more about it, but didn&amp;#8217;t have a chance yet) so the two debugging information were above my head, and I absorbed little. The GDB talk was interesting but since I follow the GDB mailing lists I already knew most of what was presented.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;debug information BoF&lt;/strong&gt; was interesting, especially since the discussion didn&amp;#8217;t focus so much on the two competing approaches to improve debug information (which was the original point of the BoF), but mostly on what should be expected from debug information generated by GCC (i.e., what a debugger should be able to do with it, especially at higher optimization levels), and how its quality can be tested in the GCC testsuite.&lt;/p&gt;
&lt;p&gt;The most interesting events for me were of course the &lt;strong&gt;GDB get-together&lt;/strong&gt; and the GDB BoF. The former was a table reserved for us at lunch one day (thanks for organizing this, Joel Brobecker!) where folks interested in GDB would get to see each other faces and talk about random stuff (GDB-related or not). It was fun, and we were able to throw some ideas around about things such as conversion of the GDB repository from CVS to Subversion, the patch review process, and even about rewriting GDB in C++ (which is a hot thread in the GDB mailing list today!). I have a picture of the event:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/bauermann/2592177410/"&gt;&lt;img class="aligncenter size-full wp-image-133" src="http://bauermann.files.wordpress.com/2008/07/gdb_hackers.jpg?w=500&amp;h=375" alt="" width="500" height="375" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you follow the link you can see the notes with the name of each person in the photo above.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;GDB BoF&lt;/strong&gt; was very interesting, and it felt weird to be at the front (thanks for inviting me Daniel!) discussing &lt;a href="http://sourceware.org/ml/gdb/2008-06/msg00191.html"&gt;current GDB issues&lt;/a&gt; with Daniel Jacobowitz, Tom Tromey, Pedro Alves (the other people at the front) and the other GDB maintainers and developers in the room.&lt;/p&gt;
&lt;p&gt;We nailed down some pending issues that were being discussed in the mailing list at the time regarding &lt;a href="http://sourceware.org/gdb/wiki/PythonGdb"&gt;Python scripting support&lt;/a&gt; (man, it&amp;#8217;s so much easier to decide things face to face rather than by e-mail!), and also discussed a bit of reversible debugging, multithreading GDB itself, GDB scalability, what to do regarding the next release (in a nutshell: wait about a year from the last release so that all the cool stuff which is being worked on right now gets in and settle down), moving the bugs database from GNATS to bugzilla (thanks for doing this Tromey!) etc.&lt;/p&gt;
&lt;p&gt;Also after the BoF Pedro Alves gave a very good improvised tutorial on the GDB event loop which he has been studying for the past few months. It felt like cheating, to get all that knowledge in what, half an hour? &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt; Thanks so much Pedro, it was awesome.&lt;/p&gt;
&lt;p&gt;And of course all the interaction with the people who were there, like Joel Brobecker (playing tennis is more serious than I thought!), Gaius Mulley (Pink Floyd!), Anmol Paralkar, Ramana Radhakrishnan and many others (I don&amp;#8217;t even try to enumerate, just a random sample).&lt;/p&gt;
&lt;p&gt;I shared a suite in Ottawa with David Edelsohn and Kenneth Zadeck, which was an interesting thing in itself. Heading back to the hotel felt like going to an extended GCC summit. &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt; I almost learned something about GCC internals (SSA, LTO, register allocation) and also had very interesting conversations in general.&lt;/p&gt;
&lt;p&gt;And of course my one week of backpacking in Canada after the summit, which was another blast. &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt;&lt;/p&gt;
&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bauermann.wordpress.com/132/" /&gt; &lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bauermann.wordpress.com/132/" /&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bauermann.wordpress.com/132/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bauermann.wordpress.com/132/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bauermann.wordpress.com/132/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bauermann.wordpress.com/132/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bauermann.wordpress.com/132/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bauermann.wordpress.com/132/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bauermann.wordpress.com/132/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bauermann.wordpress.com/132/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bauermann.wordpress.com/132/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bauermann.wordpress.com/132/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bauermann.eng.br&amp;blog=1857072&amp;post=132&amp;subd=bauermann&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/334850903" height="1" width="1"/&gt;</description>
 <pubDate>Sun, 13 Jul 2008 23:05:08 -0700</pubDate>
<feedburner:origLink>http://blog.bauermann.eng.br/2008/07/14/gcc-summit-2008-been-there-got-the-t-shirt/</feedburner:origLink></item>
<item>
 <title>Daniel Ferber: Software Tools, Eclipse, and Programming on Linux: Browsing your Creative Zen Vision M mp3 player with MTPfs</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/333039768/</link>
 <description>Written by Daniel Felix Ferber (techtavern.wordpress.com)
This article explains how to browse your Creative Zen mp3 player from Linux command line, using MTPfs. MTPfs is a fuse file system implementation that wraps libmtp. libmtp is an open source implementation of the MTP (Media Transfer Protocol), intended to transfer for media files from/to players.
With MTPfs, you can [...]&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/333039768" height="1" width="1"/&gt;</description>
 <pubDate>Fri, 11 Jul 2008 11:10:00 -0700</pubDate>
<feedburner:origLink>http://techtavern.wordpress.com/2008/07/11/browsing-your-creative-zen-vision-m-mp3-player-with-mtpfs/</feedburner:origLink></item>
<item>
 <title>Darren Hart: Real Time: My Book World: Linux NAS done well (almost...)</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/331069204/my_book_world_linux_nas_done_well_almost</link>
 <description>&lt;p&gt;&lt;span class='filter-thumb' style='float: left;'&gt;&lt;a href="/content/wdfmybook_world_1n_jpg"&gt;&lt;img src="http://www.dvhart.com/sites/www.dvhart.com/files/active/13/1716_thumb.jpg" alt="wdfMyBook_World_1N.jpg" title="wdfMyBook_World_1N.jpg"  class="acidfree-plain " style="height: 120px; " /&gt;&lt;/a&gt;&lt;/span&gt; I picked up a &lt;a href="http://www.wdc.com/en/products/products.asp?driveid=347"&gt;1 TB Western Digital My Book World&lt;/a&gt; from Fry's today - that's a 1 Terabyte Gigabit Network Attached Storage box - for $220.  I've seen a few consumer technical appliances that run Linux under the covers, and haven't been terribly impressed with many of them.  So far however, this box is slick.  While WD doesn't support Linux officially (bad WD!) it is pretty trivial to get the box into a techie-friendly state.&lt;/p&gt;
&lt;p&gt;With only an hour or so of tinkering, I was able to enable ssh, disable the java server, add my own users, and mount my partitions via sshfs.  The info on doing this is already covered by "Paul" at his &lt;a href="http://henman.livejournal.com/1161953.html?view=1433313#t1433313"&gt;How to setup My Book World Edition II&lt;/a&gt; page so I won't duplicate that here.  Should also probably link to &lt;a href="http://martin.hinner.info/mybook/sshaccess.php"&gt;Martin Hinner's My Book Howto&lt;/a&gt; directly as he appears to have done the hard work.  I'll spend the next few days figuring out how to best make use of this device; most likely looking into something like rdiff-backup.&lt;/p&gt;
&lt;p&gt;Something they don't mention are the specs of this little beauty, for those of you who might care, read on...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dvhart.com/content/blog/dvhart/linux/my_book_world_linux_nas_done_well_almost"&gt;read more&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/331069204" height="1" width="1"/&gt;</description>
 <pubDate>Sat, 05 Jul 2008 22:18:15 -0700</pubDate>
<feedburner:origLink>http://dvhart.com/content/blog/dvhart/linux/my_book_world_linux_nas_done_well_almost</feedburner:origLink></item>
<item>
 <title>Michael Strosaker: Power RAS: SystemTap Without Debug Info</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/325235355/</link>
 <description>Just a short post today to mention a new feature in SystemTap that I should have mentioned a while ago.  A primary barrier to the adoption of SystemTap has been the requirement that SystemTap have access to the DWARF debug information for the kernel and modules.   This is no longer the case; as of [...]&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/325235355" height="1" width="1"/&gt;</description>
 <pubDate>Wed, 02 Jul 2008 14:31:00 -0700</pubDate>
<feedburner:origLink>http://zombieprocess.wordpress.com/2008/07/02/systemtap-without-debug-info/</feedburner:origLink></item>
<item>
 <title>Ted Tso: Kernel Hacker: Ext4 is now the primary filesystem on my laptop</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/323469622/</link>
 <description>&lt;p&gt;Over the weekend, I converted my laptop to use the ext4 filesystem.  So far so good!  So far I&amp;#8217;ve found one bug as a result of my using ext4 in production (if delayed allocation is enabled, i_blocks doesn&amp;#8217;t get updated until the block allocation takes place, so files can appear to have 0k blocksize right after they are created, which is confusing/unfortunate), but nothing super serious yet.  I will be doing backups a bit more frequently until I&amp;#8217;m absolutely sure things are rock solid, though!&lt;/p&gt;
&lt;p&gt;I am using the latest ext4 patches and the tip of the e2fsprogs git repository.  Hopefully when we get the bulk of the patches merged into the mainline kernel after the 2.6.26 ships and the 2.6.27 merge window opens, and after I ship out e2fsprogs 1.41 (I have one work-in-progress pre-release, with another coming soon), it&amp;#8217;ll be ready for much more wide-spread testing.&lt;/p&gt;
&lt;p&gt;In addition to the excellent crew of ext4 developers, I&amp;#8217;d like to call out for special thanks Gary Howco and Holger Kiehl, two early users/benchmarkers of ext4 who tried our latest code, and reported bugs that had previously escaped attention by developers (who had been mostly testing the code via the same old test suites); their additional workloads and benchmarks flushed out a few additional bugs.   Thanks, guys!!&lt;/p&gt;
&lt;p&gt;Hopefully after a few weeks of my using ext4 for real-live work, I&amp;#8217;ll find a few last few bugs to be fixed, and/or feel much more confident it&amp;#8217;s ready for me to recommend to others for &lt;em&gt;their&lt;/em&gt; production data.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ThoughtsByTed?a=CXd2KI"&gt;&lt;img src="http://feeds.feedburner.com/~f/ThoughtsByTed?i=CXd2KI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ThoughtsByTed?a=AvW3Ii"&gt;&lt;img src="http://feeds.feedburner.com/~f/ThoughtsByTed?i=AvW3Ii" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ThoughtsByTed?a=SkyKqi"&gt;&lt;img src="http://feeds.feedburner.com/~f/ThoughtsByTed?i=SkyKqi" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThoughtsByTed/~4/323459605" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/323469622" height="1" width="1"/&gt;</description>
 <pubDate>Mon, 30 Jun 2008 12:06:33 -0700</pubDate>
<feedburner:origLink>http://feeds.feedburner.com/~r/ThoughtsByTed/~3/323459605/</feedburner:origLink></item>
<item>
 <title>Jeremy Kerr: debian on a qs22 cell blade</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/322985204/</link>
 <description>&lt;p&gt;Seeing as the &lt;a
href="http://ibm.com/systems/bladecenter/hardware/servers/qs22/index.html"
&gt;QS22 blades&lt;/a&gt; are out, here's a short guide to getting debian installed.
&lt;/p&gt;
&lt;pre class="shaded"&gt;
&lt;span class="prompt"&gt;[jk@qs22 ~]$ &lt;/span&gt;grep -m1 ^cpu /proc/cpuinfo
cpu             : Cell Broadband Engine, altivec supported
&lt;span class="prompt"&gt;[jk@qs22 ~]$ &lt;/span&gt;lsb_release -d
Description:    Debian GNU/Linux unstable (sid)
&lt;/pre&gt;
&lt;h3&gt;kernel&lt;/h3&gt;
&lt;p&gt;You'll need a kernel that has support for the IBM Cell blades. If you
configure your kernel with the 'cell_defconfig' target, you should have all
the necessary options:&lt;/p&gt;
&lt;pre class="shaded"&gt;
&lt;span class="prompt"&gt;[jk@pingu linux-2.6.25]$ &lt;/span&gt;make cell_defconfig
&lt;/pre&gt;
&lt;p&gt;Specifically, you need:&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;code&gt;CONFIG_PPC_IBM_CELL_BLADE&lt;/code&gt;;&lt;/li&gt;
 &lt;li&gt;&lt;code&gt;CONFIG_SERIAL_OF_PLATFORM&lt;/code&gt;;&lt;/li&gt;
 &lt;li&gt;&lt;code&gt;CONFIG_FUSION_SAS&lt;/code&gt;;&lt;/li&gt;
 &lt;li&gt;&lt;code&gt;CONFIG_ROOT_NFS&lt;/code&gt;;&lt;/li&gt;
 &lt;li&gt;&lt;code&gt;CONFIG_IP_PNP_DHCP&lt;/code&gt; and&lt;/li&gt;
 &lt;li&gt;&lt;code&gt;CONFIG_SPU_FS&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;root filesystem&lt;/h3&gt;
&lt;p&gt;The QS22s have no internal disk (they're compute nodes, right?), so you'll
have to either:
&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;use a remote root filesystem, like NFS; or&lt;/li&gt;
 &lt;li&gt;add a LSI SAS adaptor to the blade, and use an external SAS disk
  for the root filesystem.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The installation process will be different depending on which you choose,
so just skip to the appropriate section here.&lt;/p&gt;

&lt;h4&gt;NFS root&lt;/h4&gt;

&lt;p&gt;For the first option, there's a number of &lt;a
href="http://www.google.com/search?q=NFS+root+howto"&gt;NFS-root howtos&lt;/a&gt;
around. First up, we need to build the actual debian filesystem, using
&lt;code&gt;debootstrap&lt;/code&gt;. For example:&lt;/p&gt;

&lt;pre class="shaded"&gt;
&lt;span class="prompt"&gt;[jk@pingu ~]$ &lt;/span&gt;sudo debootstrap --arch=powerpc --foreign sid /srv/nfs/qs22/
&lt;/pre&gt;

&lt;p&gt;This will create an entire debian filesystem in &lt;code&gt;/srv/nfs/qs22&lt;/code&gt;.
We need to make a few modifications though:&lt;/p&gt;

&lt;ol&gt;
 &lt;li&gt;add the following line to &lt;code&gt;/etc/inittab&lt;/code&gt;:
  &lt;pre class="shaded"&gt;T0:23:respawn:/sbin/getty -L ttyS0 19200 vt100&lt;/pre&gt;
 &lt;/li&gt;
 &lt;li&gt;and couple of extra device nodes:
  &lt;pre class="shaded"&gt;
&lt;span class="prompt"&gt;[jk@pingu ~]$ &lt;/span&gt;cd /srv/nfs/qs22/dev
&lt;span class="prompt"&gt;[jk@pingu dev]$ &lt;/span&gt;sudo mknod console c 5 1
&lt;span class="prompt"&gt;[jk@pingu dev]$ &lt;/span&gt;sudo mknod ttyS0 c 4 64&lt;/pre&gt;
 &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once this is done, we need to complete the bootstrap on the QS22. Set up
your NFS server, and export the appropriate directory. Boot the QS22 with the
nfs root kernel options, plus "&lt;code&gt;rw init=/bin/sh&lt;/code&gt;" (eg
&lt;code&gt;root=/dev/nfs nfsroot=server_ip:/srv/nfs/qs22 ip=dhcp rw
init=/bin/sh&lt;/code&gt;). Then, once the machine has booted:&lt;/p&gt;

&lt;pre class="shaded"&gt;
&lt;span class="prompt"&gt;sh-3.2# &lt;/span&gt;PATH=/:/bin:/usr/bin:/sbin:/usr/sbin /debootstrap/debootstrap --second-stage
&lt;/pre&gt;

&lt;p&gt;This should finish the bootstrap. After it has completed (it should finish
 with "&lt;code&gt;I: Base system installed successfully&lt;/code&gt;"), reboot the
machine with the same kernel command line, minus the &lt;code&gt;rw
init=/bin/sh&lt;/code&gt; arguments. Once it boots, you should have the debian login
prompt. Login as root (there will be no password, but don't forget to set one)
and away you go.&lt;/p&gt;

&lt;h4&gt;SAS disk&lt;/h4&gt;

&lt;p&gt;If you're using SAS, the install is much more straightforward, as you
can just use the standard debian installer. However, you may need to use a
custom kernel which supports the QS22s. This is a matter of building your own
kernel, using the &lt;a
href="http://ftp.us.debian.org/debian/dists/testing/main/installer-powerpc/current/images/powerpc64/netboot/initrd.gz"&gt;powerpc64
debian installer image&lt;/a&gt; as the initramfs:&lt;/p&gt;
&lt;pre class="shaded"&gt;
&lt;span class="prompt"&gt;[jk@pingu linux-2.6.25]$ &lt;/span&gt;wget http://ftp.us.debian.org/debian/dists/testing/main/installer-powerpc/current/images/powerpc64/netboot/initrd.gz
&lt;span class="prompt"&gt;[jk@pingu linux-2.6.25]$ &lt;/span&gt;gunzip -c &lt; initrd.gz &gt; initrd
&lt;span class="prompt"&gt;[jk@pingu linux-2.6.25]$ &lt;/span&gt;make cell_defconfig
&lt;span class="prompt"&gt;[jk@pingu linux-2.6.25]$ &lt;/span&gt;sed -ie 's,^CONFIG_INITRAMFS_SOURCE=".*",CONFIG_INITRAMFS_SOURCE="'$PWD'/initrd",' .config
&lt;span class="prompt"&gt;[jk@pingu linux-2.6.25]$ &lt;/span&gt;make
&lt;/pre&gt;

&lt;p&gt;Then, just boot the kernel in &lt;code&gt;arch/powerpc/boot/zImage.pseries&lt;/code&gt;. The debian installer should start, and guide you through the rest of the
installation. Since you're netbooting, you can ignore any messages about not
having a bootstrap partition, or not being able to install a kernel or
yaboot&lt;/p&gt;

&lt;h3&gt;software&lt;/h3&gt;
&lt;p&gt;Entirely optional, but you'll probably get the most out of your QS22 with a
few extra packages:&lt;/p&gt;
&lt;pre class="shaded"&gt;
&lt;span class="prompt"&gt;[jk@qs22 ~]$ &lt;/span&gt;sudo apt-get install openssh-server libspe2-dev spu-gcc build-essential
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/322985204" height="1" width="1"/&gt;</description>
 <pubDate>Sun, 29 Jun 2008 21:25:28 -0700</pubDate>
<feedburner:origLink>http://ozlabs.org/~jk/diary/tech/cell/debian-on-qs22.diary/</feedburner:origLink></item>
<item>
 <title>Bill Buros: Improving Performance on Linux: Building a distro kernel on Power - not so bad</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/322815224/building-distro-kernel-on-power-not-so.html</link>
 <description>This should be simple.   And when you know all the steps, it is.  But I was surprised how challenging it's been to find easy examples of the steps to re-build a commercially shipping "distro" kernel, in this case the SLES 10 sp1 kernel.&lt;br /&gt;&lt;br /&gt;It's probably documented cleverly in the end user documentation - but I'm far too addicted to the ease of googling compared to the inevitable drudgery of digging through user documentation.  I always wonder when the "documentation community" will simply shift to wiki pages to document, but more importantly, maintain the correctness and accessibility, of end user documentation. &lt;br /&gt;&lt;br /&gt;For this exercise, turns out we wanted to do something simple to a SLES 10 kernel shipping on Power.   In our case, we wanted to see if we could re-build the distro kernel to support the 64KB pages available in the Power6 hardware systems.  For the performance angle, 64KB pages can often significantly improve the performance of applications.      Normally, when working with the Linux community, we simply snag the latest mainline kernel and work with that, but in this case, we were really interested in the specific performance differences between 4KB today and the expected performance of 64KB pages on the same base.&lt;br /&gt;&lt;br /&gt;Out of that exercise, we created a new wiki page which documented the steps to re-build the SLES 10 kernel.  A peer, Peter Wong, has already documented the RHEL 5.2 steps, we're just waiting for some web site maintenance to complete on the IBM developerWorks infrastructure to get that page posted as well.&lt;br /&gt;&lt;br /&gt;For the SLES 10 sp1 (and sp2) kernel re-build instructions, see&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/wikis/display/LinuxP/Re-building+a+SLES+10+kernel+for+Power"&gt;http://www.ibm.com/developerworks/wikis/display/LinuxP/Re-building+a+SLES+10+kernel+for+Power&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Recently Jon Tollefson was playing around on the SLES 10 sp2 kernel and found that there's a missing file in the SLES 10 sp2 kernel package, so we had to comment out a line in the kernel-ppc64.spec file (modprobe.d-qeth).  &lt;br /&gt;&lt;br /&gt;One interesting aspect is I had thought the kernel re-build process would be precise and seamless.   But there were a few tricks that had to be done to make it work.&lt;br /&gt;&lt;br /&gt;One of them was adding  control to be able to run the make on all of the CPUs seen by Linux.  &lt;br /&gt;&lt;pre&gt;%define jobs %(cat /proc/cpuinfo | grep processor | wc -l)&lt;/pre&gt;We've been playing recently on some of the sweet top-of-the-line POWER6 systems, in one case the Power 575 system with 32 cores.   When running with SMT enabled, that's 64 CPUs that Linux controls.   The kernel build goes &lt;span style="font-style: italic;"&gt;very&lt;/span&gt; fast on that system.&lt;br /&gt;&lt;br /&gt;Second, and there's probably a more clever way to do this, but we ended up having to unpack, modify, and re-pack the config.tar.bz2 file for the platform.    &lt;br /&gt;&lt;br /&gt;The last interesting aspect was the built-in "kabi" protections.   When we first re-built the kernel, the build failed because this failed the kabi tolerance level.    Very clever.    I assume various kernel interfaces are flagged with KABI values, which when changed, cause the build to fail.    In our case, we knew it would change things in the kernel, so we modified the tolerance value to allow for the kernel re-build.&lt;br /&gt;&lt;br /&gt;So.  Easy to do, easy to make changes, and for a performance team, easy to minimize how much is changing from one step to the next.    By starting with a known entity in the distro kernel, we make one change, verify the performance differences, and then proceed to the next change.    Simple.  Methodical.   Straight-forward.&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/322815224" height="1" width="1"/&gt;</description>
 <pubDate>Sun, 29 Jun 2008 11:58:00 -0700</pubDate>
<feedburner:origLink>http://well-itdepends.blogspot.com/2008/06/building-distro-kernel-on-power-not-so.html</feedburner:origLink></item>
<item>
 <title>Original Planet LTC Linux Podcasts: Episode 10 - Embedded PowerPC with Josh Boyer</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/321408564/</link>
 <description>&lt;p&gt;Embedded 4xx PowerPC Linux Kernel maintainer Josh Boyer discusses activity in the embedded linux space.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Additional Information&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Embedded Linux kernel mailing list at http://vger.kernel.org/vger-lists.html#linux-embedded
&lt;li&gt;Embedded and powerpc developers lists at http://ozlabs.org/mailman/listinfo
&lt;li&gt;Embedded PowerPC info at http://penguinppc.org/embedded/
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/321408564" height="1" width="1"/&gt;</description>
 <pubDate>Fri, 27 Jun 2008 06:18:53 -0700</pubDate>
<feedburner:origLink>http://planet-ltc.org/podcasts/2008/06/27/episode-10-embedded-4xx-powerpc-kernel-josh-boyer/</feedburner:origLink></item>
<item>
 <title>Michael Dolan: Linux, Law, Open Source, and a Comedy of Errors: Shameless Analyst Report Plug: “IBM &amp; Linux – 9 Years Later”</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/319255350/1224</link>
 <description>&lt;p&gt;A colleague sent me a link to this analyst paper today that takes a look at whether IBM has made good on the Linux promises it made back in 1999. I&amp;#8217;m obviously biased, but I&amp;#8217;m interested in hearing if anyone has thoughts on this topic.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s the report: &lt;a title="ibm linux 1999 promise" href="ftp://ftp.software.ibm.com/linux/pdfs/GCG_IBM_and_Linux-9_years_later.pdf" target="_blank"&gt;ftp://ftp.software.ibm.com/linux/pdfs/GCG_IBM_and_Linux-9_years_later.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The opening teaser:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;In 1999, IBM issued a series of announcements fully committing the company to supporting Linux. IBM vowed to Linux-enable all of their hardware platforms, including their non-x86 based mainframe, mini, and RISC-based systems. They also promised to release Linux versions of their software products and develop&lt;br /&gt;
Linux-centric service practices. Moreover, they pledged significant resources to the Linux community with the goal of advancing Linux and open source technology.&lt;/p&gt;
&lt;p&gt;So, nine years later, did IBM deliver on these promises? Was their commitment to Linux genuine or just lip service? This report examines IBM’s current Linux products, services, and community support in light of the promises they made in 1999…&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;While I think it&amp;#8217;s obvious IBM has been a huge investor in the Linux community, one thing that I noticed reading the report is just how much IBM is actually different from other community members. There are some noticeable differences in the investments and approach to supporting the Linux platform and community. I often forget to just take in all the Linux technologies IBM has been heavily involved in from Xen, KVM and libvirt to filesystems, to systemtap, kprobes and then there&amp;#8217;s RAS, scalability and performance enhancements.&lt;/p&gt;
&lt;p&gt;Another interesting thought to reflect on is just how important it has been that there are multiple investors in this field. If this report captures just what IBM did, think of the industry combined. IBM couldn&amp;#8217;t have done anything this big with Linux if it weren&amp;#8217;t for co-creating with a community of enthusiasts, researchers, governments, Intel, AMD, Google, Nokia, Motorola, Oracle and thousands more. What would the report look like if you compiled all the investments and work the entire community leveraged across the industry. Linux is &amp;#8220;bigger than huge&amp;#8221; when you stop to think about it. This is also why I&amp;#8217;ve said for a couple years now when you extend the investment model 3 to 5 years into the future, Sun and its anti-Linux,  Solaris push against the tide of the industry loses in the end. &lt;a title="java anti-linux lost" href="http://finance.yahoo.com/echarts?s=JAVA#chart3:symbol=java;range=6m;indicator=volume;charttype=line;crosshair=on;ohlcvalues=0;logscale=on;source=undefined" target="_self"&gt;I think we&amp;#8217;re starting to witness that now&lt;/a&gt;. Sure, OpenSolaris is a great idea&amp;#8230; it&amp;#8217;s just 9 years late and it&amp;#8217;s too late to matter now.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m interested in outside perspectives too - where do you think IBM stands? Has the community development and investment model worked? Where will this lead in the future and what will be the next evolution of the model? Red Hat seems to think the model will evolve to include increased customer co-creation - I tend to agree. Why? Because the incentive model to invest aligns very well - and when you have alignment, it almost naturally will happen.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/319255350" height="1" width="1"/&gt;</description>
 <pubDate>Tue, 24 Jun 2008 16:21:19 -0700</pubDate>
<feedburner:origLink>http://www.michaeldolan.com/1224</feedburner:origLink></item>
<item>
 <title>Ronnie Sahlberg: CTDB: WAN-accelerator for NFS</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/233278662/introduction.html</link>
 <description>I've been working a bit with WAN-acceleration for CTDB. Actually with two different approaches&lt;br /&gt;for two different purposes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WAN-accelerator #1  (general purpose)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first approach was to add new "capabilities" to the CTDB daemon so that you could have a cluster of CTDB nodes where some nodes were located at a very remote site, across a high-latency WAN-link. This was tricky to solve since eventhough you have nodes that participate synchronously in the cluster you do not want the high WAN-link latency to affect performance on the nodes in the main datacentre.&lt;br /&gt;&lt;br /&gt;Initial tests seems to indicate that it works quite well. Surprisingly well.&lt;br /&gt;&lt;br /&gt;But this is not really a WAN-accelerator. A classic WAN-accelerator is more a device that performs a man-in-the-middle attack on the CIFS/NFS protocols and performs some (sometimes unsafe) caching.&lt;br /&gt;&lt;br /&gt;In the CTDB approach above there is no man-in-the-middle attack, nor is it really a WAN-accelerator.&lt;br /&gt;It is conceptually more like one single multihomed CIFS server where one on the NICs (the remote site) happens to be a few hundred ms away. Thus we dont have to play any tricks, nor do any questionable caching, we are still a single cifs server, with fully and 100% correct cifs semantics, its just that this cifs server is spread out across multiple sites.&lt;br /&gt;&lt;br /&gt;I.e. clients on the remote site talk to the genuine real cifs server. Not an man-in-the-middle imposter that may or may not provide correct semantics.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WAN accelerator #2  (nfs)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A different solution was based on FUSE and providing very aggressive caching of data and metadata for NFS. This one also seems to perform really well but is obviously less cool than "a single multihomed cifs server spanning multiple sites".&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/233278662" height="1" width="1"/&gt;</description>
 <pubDate>Tue, 24 Jun 2008 09:45:00 -0700</pubDate>
<feedburner:origLink>http://ronniesahlberg.blogspot.com/2008/01/introduction.html</feedburner:origLink></item>
<item>
 <title>Mel Gorman: Kernel Spanner: Parked up in Portland for a bit</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/318686218/index.php</link>
 <description>I am just back online after being absent for two weeks. If you were trying to get in touch with me in that time and I am apparently ignoring mails, nudge me again because it is lost in the mess. The start of the absense was due to presenting a paper at &lt;a href="http://www.cs.kent.ac.uk/people/staff/rej/ismm2008/" title="ISMM 2008"&gt;ISMM 2008&lt;/a&gt; in Tuscon, Arizona. The conference is fairly in-depth and was of significant interest despite many of the discussions are around managed languages and garbage collection which I do not focus on ordinarily. Luckily for me, attending next year will be relatively handy as it is due to be held in Dublin, Ireland.&lt;br /&gt;
&lt;br /&gt;
Post conference, I drove to Portland, Oregan over the course of two weeks stopping off at various places along the way such as Vegas (a unique place), Bagdad (in Arizona, not the other one), Los Angeles and Yosemite park. I'm now parked up in Portland for the next 4 weeks so if anyone in the area wants to meet up that has met me in the past, drop a line and we'll make something happen.&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/318686218" height="1" width="1"/&gt;</description>
 <pubDate>Mon, 23 Jun 2008 23:22:13 -0700</pubDate>
<feedburner:origLink>http://www.csn.ul.ie/~mel/blog/index.php?/archives/7-Parked-up-in-Portland-for-a-bit.html</feedburner:origLink></item>
<item>
 <title>Jeremy Kerr: linux.conf.au hackfest: the solution, part three</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/317718069/</link>
 <description>&lt;p&gt;In &lt;a href="http://ozlabs.org/~jk/diary/tech/cell/hackfest08-solution-2.diary"&gt;part two&lt;/a&gt;
of this series, we had just ported a fractal renderer to the SPEs on a Cell
Broadband Engine machine. Now we're going to start the optimisation...&lt;/p&gt;

&lt;p&gt;Our baseline performance is 40.7 seconds to generate the sample fractal
(using the &lt;a
href="http://ozlabs.org/~jk/projects/lca2008-hackfest/solution/fractal.data"&gt;sample
fractal parameters&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The initial SPE-based fractal renderer used only one SPE. However, we
have more available:&lt;/p&gt;
&lt;table class="data"&gt;
 &lt;caption&gt;Number of SPEs in currently-available in CBEA machines&lt;/caption&gt;
 &lt;tr&gt;
  &lt;th&gt;Machine&lt;/th&gt;
  &lt;th&gt;SPEs available&lt;/th&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;Sony Playstation 3&lt;/td&gt;
  &lt;td class="num"&gt;6&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;IBM &lt;a href="http://ibm.com/systems/bladecenter/qs21/index.html"&gt;QS21&lt;/a&gt;
   / &lt;a
   href="http://ibm.com/systems/bladecenter/hardware/servers/qs22/index.html"&gt;QS22&lt;/a&gt;
   blades.&lt;/td&gt;
  &lt;td class="num"&gt;16 (8 per CPU)&lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;So, we should be able to get better performance by distributing the render
work between the SPEs. We can do this by dividing the fractal into a set of
&lt;em&gt;n&lt;/em&gt; strips, where &lt;em&gt;n&lt;/em&gt; is the number of SPEs available. Then,
each SPE renders its own strip of the fractal.&lt;/p&gt;

&lt;p&gt;The following image shows the standard fractal, as would be rendered by 8
SPEs, with shading to show the division of the work amongst the SPEs.&lt;/p&gt;

&lt;div&gt;
&lt;img src="http://ozlabs.org/~jk/projects/lca2008-hackfest/images/fractal-striped.png"
width="300" height="251" alt="SPE fractal divisions"
style="display: block; margin-left: auto; margin-right: auto;" /&gt;
&lt;/div&gt;

&lt;p&gt;In order to split up the work, we first need to tell each SPE which part of
the fractal it is to render. We'll add two variables to the
&lt;code&gt;spe_args&lt;/code&gt; structure (which is passed to the SPE during program
setup), to provide the total number of threads (&lt;code&gt;n_threads&lt;/code&gt;) and
the index of this SPE thread (&lt;code&gt;thread_idx&lt;/code&gt;).&lt;/p&gt;

&lt;pre class="shaded code"&gt;
&lt;span class="ty"&gt;struct&lt;/span&gt; spe_args {
        &lt;span class="ty"&gt;struct&lt;/span&gt; fractal_params fractal;
        &lt;span class="ty"&gt;int&lt;/span&gt; n_threads;
        &lt;span class="ty"&gt;int&lt;/span&gt; thread_idx;
};
&lt;/pre&gt;

&lt;h3&gt;spe changes&lt;/h3&gt;
&lt;p&gt;On the SPE side, we use these parameters to alter the invocations of
&lt;code&gt;render_fractal&lt;/code&gt;. We set up another couple of convenience variables:
&lt;/p&gt;

&lt;pre class="shaded code"&gt;
        rows_per_spe = args.fractal.rows / args.n_threads;
	start_row = rows_per_spe * args.thread_idx;
&lt;/pre&gt;

&lt;p&gt;And just alter our &lt;code&gt;for&lt;/code&gt;-loop to only render
&lt;code&gt;rows_per_spe&lt;/code&gt; rows, rather than the entire fractal:&lt;/p&gt;

&lt;pre class="shaded code"&gt;
        &lt;span class="st"&gt;for&lt;/span&gt; (row = &lt;span class="cs"&gt;0&lt;/span&gt;; row &amp;lt; rows_per_spe; row += rows_per_dma) {

                render_fractal(&amp;amp;args.fractal, start_row + row,
                                rows_per_dma);

                mfc_put(buf, ppe_buf + (start_row + row) * bytes_per_row,
                                bytes_per_row * rows_per_dma,
                                &lt;span class="cs"&gt;0&lt;/span&gt;, &lt;span class="cs"&gt;0&lt;/span&gt;, &lt;span class="cs"&gt;0&lt;/span&gt;);

                &lt;span class="cm"&gt;/* Wait for the DMA to complete */&lt;/span&gt;
                mfc_write_tag_mask(&lt;span class="cs"&gt;1&lt;/span&gt; &amp;lt;&amp;lt; &lt;span class="cs"&gt;0&lt;/span&gt;);
                mfc_read_tag_status_all();
        }
&lt;/pre&gt;

&lt;h3&gt;ppe changes&lt;/h3&gt;
&lt;p&gt;The changes to the PPE code are fairly simple - instead of just creating one
thread, create &lt;em&gt;n&lt;/em&gt; threads.&lt;/p&gt;
&lt;p&gt;First though, let's add a '&lt;code&gt;-n&lt;/code&gt;' argument to the program to
specify the number of threads to start:&lt;/p&gt;

&lt;pre class="shaded code"&gt;
        &lt;span class="st"&gt;while&lt;/span&gt; ((opt = getopt(argc, argv, &lt;span class="cs"&gt;&amp;quot;p:o:n:&amp;quot;&lt;/span&gt;)) != -&lt;span class="cs"&gt;1&lt;/span&gt;) {
                &lt;span class="st"&gt;switch&lt;/span&gt; (opt) {

                &lt;span class="cm"&gt;/* other options omitted */&lt;/span&gt;

                &lt;span class="st"&gt;case&lt;/span&gt; &lt;span class="cs"&gt;'n'&lt;/span&gt;:
                        n_threads = atoi(optarg);
                        &lt;span class="st"&gt;break&lt;/span&gt;;
&lt;/pre&gt;

&lt;p&gt;Rather than just creating one SPE thread, we create &lt;code&gt;n_threads&lt;/code&gt;.
Also, we have to set the thread-specific arguments for each thread:&lt;/p&gt;

&lt;pre class="shaded code"&gt;
        &lt;span class="st"&gt;for&lt;/span&gt; (i = &lt;span class="cs"&gt;0&lt;/span&gt;; i &amp;lt; n_threads; i++) {
                &lt;span class="cm"&gt;/* copy the fractal data into this thread's args */&lt;/span&gt;
                memcpy(&amp;amp;threads[i].args.fractal, fractal, &lt;span class="st"&gt;sizeof&lt;/span&gt;(*fractal));

                &lt;span class="cm"&gt;/* set thread-specific arguments */&lt;/span&gt;
                threads[i].args.n_threads = n_threads;
                threads[i].args.thread_idx = i;

                threads[i].ctx = spe_context_create(&lt;span class="cs"&gt;0&lt;/span&gt;, &lt;span class="cs"&gt;NULL&lt;/span&gt;);

                spe_program_load(threads[i].ctx, &amp;amp;spe_fractal);

                pthread_create(&amp;amp;threads[i].pthread, &lt;span class="cs"&gt;NULL&lt;/span&gt;,
                                spethread_fn, &amp;amp;threads[i]);
        }
&lt;/pre&gt;

&lt;p&gt;Now, the SPEs should be running, and generating their own slice of the
fractal. We just have to wait for them all to finish:&lt;/p&gt;

&lt;pre class="shaded code"&gt;
        &lt;span class="cm"&gt;/* wait for the threads to finish */&lt;/span&gt;
        &lt;span class="st"&gt;for&lt;/span&gt; (i = &lt;span class="cs"&gt;0&lt;/span&gt;; i &amp;lt; n_threads; i++)
                pthread_join(threads[i].pthread, &lt;span class="cs"&gt;NULL&lt;/span&gt;);
&lt;/pre&gt;

&lt;p&gt;If you're after the source code for the multi-threaded SPE fractal renderer,
it's available in &lt;a
href="http://ozlabs.org/~jk/projects/lca2008-hackfest/solution/fractal.3.tar.gz"&gt;fractal.3.tar.gz&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That's it! Now we have a multi-threaded SPE application to do the fractal
rendering. In theory, an &lt;em&gt;n&lt;/em&gt; threaded program will take 1/&lt;em&gt;n&lt;/em&gt;
of the time of a single-threaded implementation, let's see how that fares
with reality...&lt;/p&gt;

&lt;h3&gt;performance&lt;/h3&gt;

&lt;p&gt;Let's compare invocations of our multi-threaded fractal renderer, with
different values for the &lt;code&gt;n_threads&lt;/code&gt; parameter.&lt;/p&gt;

&lt;table class="data"&gt;
 &lt;caption&gt;Performance of multi-threaded SPE fractal renderer&lt;/caption&gt;
 &lt;tr&gt;
  &lt;th&gt;SPE threads&lt;/th&gt;
  &lt;th&gt;Running time (sec)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td class="num"&gt;40.72&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td class="num"&gt;30.14&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td class="num"&gt;18.84&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td class="num"&gt;12.72&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td class="num"&gt;10.89&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Not too bad, but we're definitely not seeing linear scalability here; we
could expect the 8 SPE case to take around 5 seconds, rather than 11.&lt;/p&gt;

&lt;h3&gt;what's slowing us down?&lt;/h3&gt;

&lt;p&gt;A little investigation into the fractal generator will show that some SPE
threads are finishing long before others. This is due to the variability in
calculation time between pixels. In order to see if a point (ie, pixel) in the
fractal does &lt;em&gt;not&lt;/em&gt; converge towards infinity (and gets coloured blue),
we need to do the full &lt;code&gt;i_max&lt;/code&gt; tests in &lt;code&gt;render_fractal&lt;/code&gt;
(&lt;code&gt;i_max&lt;/code&gt; is 10,000 in our sample fractal). Other pixels may
converge much more quickly (possibly in under 10 iterations), and so are orders
of mangitude faster to calculate.&lt;/p&gt;

&lt;p&gt;We end up with slices that are very quick to calculate, and others
that take longer. Of course, we have to wait for the longest-running SPE
thread to complete, so our overall runtime will be that of the slowest thread.
&lt;/p&gt;

&lt;p&gt;So, let's take another aproach to distributing the workload. Rather than
dividing the fractal into contiguous slices, we can &lt;em&gt;interleave&lt;/em&gt; the
SPE work. For example, if we were to use 2 SPE threads, then thread 0 would
render all the even chunks, and thread 1 would render all the odd chunks (where
a "chunk" is a set of rows that fit into a single DMA). This should even-out
the work between SPE threads.&lt;/p&gt;

&lt;div&gt;
&lt;img src="http://ozlabs.org/~jk/projects/lca2008-hackfest/images/fractal-interleaved.png"
width="300" height="251" alt="Interleaved SPE fractal divisions"
style="display: block; margin-left: auto; margin-right: auto;" /&gt;
&lt;/div&gt;

&lt;p&gt;This is just a matter of changing the SPE &lt;code&gt;for&lt;/code&gt;-loop a little.
Rather than the current code, which divides the work into
&lt;code&gt;n_threads&lt;/code&gt; contiguous chunks:&lt;/p&gt;

&lt;pre class="shaded code"&gt;
        &lt;span class="st"&gt;for&lt;/span&gt; (row = &lt;span class="cs"&gt;0&lt;/span&gt;; row &amp;lt; rows_per_spe; row += rows_per_dma) {

                render_fractal(&amp;amp;args.fractal, start_row + row,
                                rows_per_dma);

                mfc_put(buf, ppe_buf + (start_row + row) * bytes_per_row,
                                bytes_per_row * rows_per_dma,
                                &lt;span class="cs"&gt;0&lt;/span&gt;, &lt;span class="cs"&gt;0&lt;/span&gt;, &lt;span class="cs"&gt;0&lt;/span&gt;);

                &lt;span class="cm"&gt;/*&lt;/span&gt;&lt;span class="cm"&gt; Wait for the DMA to complete &lt;/span&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;
                mfc_write_tag_mask(&lt;span class="cs"&gt;1&lt;/span&gt; &amp;lt;&amp;lt; &lt;span class="cs"&gt;0&lt;/span&gt;);
                mfc_read_tag_status_all();
        }

&lt;/pre&gt;

&lt;p&gt;We change this to render every &lt;code&gt;n_thread&lt;/code&gt;&lt;sup&gt;th&lt;/sup&gt;
chunk, starting from &lt;code&gt;thread_idx&lt;/code&gt;, which gives us the
the interleaved pattern:&lt;/p&gt;

&lt;pre class="shaded code"&gt;
        &lt;span class="st"&gt;for&lt;/span&gt; (row = rows_per_dma * args.thread_idx;
                        row &amp;lt; args.fractal.rows;
                        row += rows_per_dma * args.n_threads) {

                render_fractal(&amp;amp;args.fractal, row,
                                rows_per_dma);

                mfc_put(buf, ppe_buf + row * bytes_per_row,
                                bytes_per_row * rows_per_dma,
                                &lt;span class="cs"&gt;0&lt;/span&gt;, &lt;span class="cs"&gt;0&lt;/span&gt;, &lt;span class="cs"&gt;0&lt;/span&gt;);

                &lt;span class="cm"&gt;/* Wait for the DMA to complete */&lt;/span&gt;
                mfc_write_tag_mask(&lt;span class="cs"&gt;1&lt;/span&gt; &amp;lt;&amp;lt; &lt;span class="cs"&gt;0&lt;/span&gt;);
                mfc_read_tag_status_all();
        }
&lt;/pre&gt;

&lt;p&gt;An updated renderer is available in &lt;a
href="http://ozlabs.org/~jk/projects/lca2008-hackfest/solution/fractal.4.tar.gz"&gt;fractal.4.tar.gz&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Making this small change gives some better performance figures:&lt;/p&gt;

&lt;table class="data"&gt;
 &lt;caption&gt;Performance of multi-threaded, interleaved SPE fractal
  renderer&lt;/caption&gt;
 &lt;tr&gt;
  &lt;th&gt;SPE threads&lt;/th&gt;
  &lt;th&gt;Running time (sec)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td class="num"&gt;40.72&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td class="num"&gt;20.75&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td class="num"&gt;10.78&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td class="num"&gt;7.44&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td class="num"&gt;5.81&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;We're doing much better now, but we're still nowhere near the theoretical
maximum performance of the SPEs. More optimisations in the next article...&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/317718069" height="1" width="1"/&gt;</description>
 <pubDate>Sun, 22 Jun 2008 16:20:13 -0700</pubDate>
<feedburner:origLink>http://ozlabs.org/~jk/diary/tech/cell/hackfest08-solution-3.diary/</feedburner:origLink></item>
<item>
 <title>Original Planet LTC Linux Podcasts: Episode 9 - WBEM Intro with Chris Buccella</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/316442696/</link>
 <description>&lt;p&gt;Chris gives an intro to WBEM, sblim and other system management tools for Linux and other OSes.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Additional Information&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SBLIM home page at http://sblim.wiki.sourceforge.net&lt;/li&gt;
&lt;li&gt;Open Pegasus at http://openpegasus.org&lt;/li&gt;
&lt;li&gt;WBEM from Python at http:://pywbem.sourceforge.net&lt;/li&gt;
&lt;li&gt;WS-MAN information at http://openwsman.org&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/316442696" height="1" width="1"/&gt;</description>
 <pubDate>Fri, 20 Jun 2008 12:46:02 -0700</pubDate>
<feedburner:origLink>http://planet-ltc.org/podcasts/2008/06/20/episode-9-wbem-intro-with-chris-buccella/</feedburner:origLink></item>
<item>
 <title>Darren Hart: Real Time: Real-Time for the Masses</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/315969393/real_time_for_the_masses</link>
 <description>&lt;p&gt;Today at the Red Hat Summit in Boston, Red Hat announced the official release of Red Hat Enterprise MRG V1 (Messaging Realtime Grid) [1].  A couple snippets of note: &lt;/p&gt;
&lt;p&gt;"The Realtime component of Red Hat Enterprise MRG comprises numerous kernel enhancements that provide deterministic performance for time-critical and latency-sensitive applications."&lt;/p&gt;
&lt;p&gt;"IBM has worked together closely with Red Hat on the development of the real time Linux kernel and has optimized both WebSphere Real Time and BladeCenter servers on Red Hat Enterprise MRG. We are delighted that IBM and Raytheon have been recognized by Red Hat for this innovation which has led to the largest deployment of real time technology in the next generation of US Navy Destroyers." --Jeff Smith, vice president, Open Source and Linux Middleware at IBM&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dvhart.com/content/blog/dvhart/linux/real_time_for_the_masses"&gt;read more&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/315969393" height="1" width="1"/&gt;</description>
 <pubDate>Thu, 19 Jun 2008 22:14:53 -0700</pubDate>
<feedburner:origLink>http://dvhart.com/content/blog/dvhart/linux/real_time_for_the_masses</feedburner:origLink></item>
<item>
 <title>Michael Ellerman: Canberra and the world&amp;#8217;s fastest computer</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/315072862/</link>
 <description>As Jeremy mentioned, the IBM QS22 was released a few weeks ago. The QS22 is the newest Cell processor based blade server, sporting the new PowerXCell 8i chip, and up to 32 GB of memory.

Because the QS22 can support larger amounts of memory, Linux needs to enable the IOMMU, whereas on previous blades that was [...]&lt;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/315072862" height="1" width="1"/&gt;</description>
 <pubDate>Wed, 18 Jun 2008 18:30:00 -0700</pubDate>
<feedburner:origLink>http://michael.ellerman.id.au/blog/2008/06/19/canberra-and-the-worlds-fastest-computer/</feedburner:origLink></item>
<item>
 <title>Anthony Liguori: Tales of a Code Monkey: Red Hat announces "next-generation" virtualization based on KVM</title>
 <link>http://feeds.feedburner.com/~r/PlanetLtc/~3/314936178/red-hat-announces-next-generation.html</link>
 <description>&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;img src="http://feeds.feedburner.com/~r/PlanetLtc/~4/314936178" height="1" width="1"/&gt;</description>
 <pubDate>Wed, 18 Jun 2008 14:21:00 -0700</pubDate>
<feedburner:origLink>http://blog.codemonkey.ws/2008/06/red-hat-announces-next-generation.html</feedburner:origLink></item>
</channel>
</rss>
