Category Archives: Etc.

Moved off of LiveJournal

My old LiveJournal blog has served me well over the last four years, but I was getting tired of LJ. When I first started this blog, I mostly used it like any other whiny homesick new college graduate would. But nowadays, I use this less like a social networking tool and more like a way to organize my projects and post writeups of things I’m working on or things I find interesting. So the community aspect of LJ wasn’t really useful to me, and I wanted more control over the technical and stylistic aspects of the site. Most of all, I wanted proper permalink URLs 🙂

So, here it is. I installed WordPress, ran its LiveJournal importer, and wrote some Python scripts to automatically fix up a few things. I also tried to go through all of the old posts and tag/categorize them properly, and fix up any broken links. The theme is a slightly modified version of Green Park 2, with some small formatting tweaks and a little bit of custom artwork.

Love it? Hate it? Let me know!



For anyone who hasn’t already seen it, Linus Akesson (of Craft fame) just released his first demo for the Parallax Propeller: Turbulence.

You can watch the high resolution video on, with an introduction by Linus himself. Or, if you have a Propeller board, he’s provided binaries and source code.

The demo is quite impressive, and he uses some extremely clever tricks to fit it all on a microcontroller with 32kB of EEPROM and no hardware multiply or divide. Linus released the full source code after an exciting reverse engineering contest uncovered many of his techniques. They include decompressing code from EEPROM at runtime, a novel video bus which uses extra I/O pins as fast inter-processor communication, and a nice looking dithering scheme.

Turbulence earned a well-deserved first place in the console/wild category at Breakpoint 2009. Congrats to Linus for showing us what this chip is capable of!


Announcing the VMware SVGA Device Developer Kit

Over the weekend, I finally had time to release another work-related open source project: the VMware SVGA Device Developer Kit. It’s a set of documentation and example code for the virtual graphics card that’s present in all VMware virtual machines. The examples run on the (virtual) bare metal, so it’s a really easy way to experiment with low-level graphics driver programming.


Spark Fun in Fortune magazine

Spark Fun Electronics is awesome. If you’re an electronics hobbyist who hasn’t heard of them, you’re missing out. While us hobbyists have long been able to get a huge variety of “reasonably” priced staple components from Digi-key, and crazy-cheap surplus components from places like All Electronics Corp. and B.G. Micro, I couldn’t help feeling like the industry was leaving hobbyists in the dust. If we wanted bargains on 10-year-old technology we were in luck, but the latest and greatest parts were getting more and more out of reach to the average hobbyist. Either there would be a minimum order of 5000, or they would be in a ridiculously small SMT package, or the data sheets would be proprietary. Most often, all of the above.

Spark Fun to the rescue! They really are the first online electronics store I’ve seen that’s really by hobbyists and for hobbyists. They buy the latest and greatest development boards, sensors, and other toys, put the specs up on their web site, build breakout boards, and sell them for very reasonable prices. As if that wasn’t enough, Spark Fun has become kind of a clearinghouse for custom hobbyist-designed platforms. They stock everything from MAKE staples like the Arduino, to special-purpose platforms like the Uzebox AVR-based game console.

Oh, and did I mention they’re in Boulder? If only I’d known while I was still in school…

Anyway, given how awesome Spark Fun is, I was really proud to see that Spark Fun was mentioned in Fortune Small Business magazine:


Virtual USB Analyzer

From late 2005 to early 2007, I worked on the USB virtualization stack at VMware. We ran into all sorts of gnarly bugs, many of which were very hard to reproduce or which required access to esoteric or expensive hardware. To help with debugging problems both internally and with customers in the field, we added logging support to our virtual USB stack. Starting with VMware Workstation 5.5, if you set the right hidden config option we’d start dumping the contents of all USB packets to a log. It was a USB sniffer (like USB Snoopy), but built into the virtual hardware.

To make it easier to analyze the resulting logs, I started working on a GUI tool that could navigate through these giant log files. This tool proved to be really useful within our team at VMware, and we’d often ask customers on the beta forums to generate log files that we could analyze. I called this tool vusb-analyzer.

Well, it’s been a while, but I’m proud to now have the opportunity to release vusb-analyzer as open source software under the MIT license. This isn’t just a code dump- I removed the tool from our internal repository today, and all future development will occur in the open, in a Subversion repository on Source Forge.

Currently, vusb-analyzer is most useful for analyzing logs captured by VMware products. Indeed, this is a convenient way to debug USB drivers. You can attach your USB device to VMware Workstation, VMware Fusion, or the free-as-in-beer VMware Player, and it can transparently save a plaintext log of all USB packets that pass through. Debugging a driver in a VM is really convenient, and I find it quite useful, but I understand it’s not for everybody. If you already have a favorite USB sniffer tool, it’s easy to extend vusb-analyzer with a log format plugin so it can read other formats. We already did this once, to add support for the logs generated by our favorite hardware USB analyzers.

I hope vusb-analyzer turns out to be useful for the open source community, particularly to those who are working on Linux device drivers. To get started, visit the project’s web site:

Besides the usual introduction and download links, there is also a detailed tutorial with lots of shiny screenshots 🙂


GPU Virtualization at WIOV ’08

I just got back from the first
USENIX Workshop on I/O Virtualization.

WIOV was an interesting workshop. It was really nice to see what I/O virtualization looks like from a wide range of different viewpoints. There was some good industry perspective from AMD, Intel, Microsoft, and Oracle. There were also a wide range of academic interests represented. Everyone brings not only their own terminology, but their own idea of which problems are particularly hard or useful to solve.

I did feel like a bit of an outsider, though. Nearly the entire workshop was focused on virtualizing storage and networking devices, which are quite a bit different from the devices I work with on a daily basis: mouse, keyboard, graphics, sound, and USB.

Part of this divide is along server vs. desktop lines, but I also feel like it’s in large part due to the wide difference in status of current virtualization approaches for desktop vs. server devices. Most of the current work on networking and storage devices is in improving manageability, or squeezing out that extra 10-20% of performance overhead. This is all already assuming that there are plenty of known virtualization approaches for those devices which are both correct and reasonably performant.

By contrast, current desktop device virtualization is largely neither correct nor performant. Even simple devices like mouse and keyboard must be fudged with heuristic after heuristic to bridge the impedance mismatch between a low-level mouse/keyboard and the high-level input stack abstraction you see at the windowing system or VNC layer. Sound devices are easy to emulate, but to build a truly correct sound device, you would need guarantees that can only be provided by a hard real-time operating system. USB seems on first glance like it could be simple, but there are huge impedance mismatches to be overcome, and even greater challenges in writing a CPU-efficient emulated USB controller.

I feel that graphics virtualization is the biggest unsolved problem in desktop device virtualization, which is why I enjoy my day job as much as I do. But it also means that graphics virtualization is really at a totally different stage than storage or networking virtualization. Nobody has an implementation that is complete or correct, let alone performant. My team at VMware is pushing the envelope, and the technology is already usable for many people- but there’s a huge amount of work left to be done.

I am very greatful to have had the opportunity to present a paper on graphics virtualization at WIOV ’08. Jeremy Sugerman and I co-authored a paper which describes a taxonomy of graphics virtualization approaches, and provides implementation details and analysis for the approach VMware is currently shipping as the DirectX 9.0 virtualization in VMware Fusion and VMware Workstation. This is currently the most detailed publicly available description of the work my team has been doing over the past 4 years. If you’re interested, I encourage you to read the paper closely. It’s really packed with as much information as we could squeeze into 8 pages.

The presentation followed the structure of the paper, but it was weighted heavily toward describing the motivation for GPU virtualization, the reasons why it’s hard, and the characteristics of the different approaches we outline in our taxonomy.

You can get the paper from the official WIOV ’08 site. You can also grab the paper and the presentation slides from my server:

The slides are also on SlideShare, embedded below.


Speaking at USENIX WIOV 2008

Well, this Monday I submitted the final copy of my paper, and yesterday everything was approved. Jeremy Sugerman and I wrote a paper for the USENIX Workshop on I/O Virtualization’s Industrial Practice session: GPU Virtualization on VMware’s Hosted I/O Architecture. We’re on the program for a 15-minute talk at the workshop in San Diego this December.

The paper is a detailed (or as detailed as will fit in 8 pages) description of the GPU virtualization work my team has been doing at VMware for the past couple years. This is the technology that makes it possible to run DirectX 9 applications and games inside your VMware Fusion VM. The paper includes a lot of background information about graphics virtualization, a detailed description of our virtual GPU architecture, and various benchmarks.

Thanks to everyone who helped me by reviewing drafts of the paper. Your feedback has been invaluable.

Update: The paper can now be downloaded in HTML or PDF, and presentation slides are available.

Moral dilemma…

Lately I’ve been interested in e-textiles and fabric sensor technology. For an example of something I find infinitely fascinating, take a look at this DIY fabric bend sensor. (Via talk2myshirt, the best named blog evar.)

In that project, many of the conductive textile materials were originally designed (or at least marketed) for electrostatic/electromagnetic shielding applications. Hannah Perner-Wilson, who invented this bend sensor, recommends buying materials from This web site appears to be catering to some tin foil hat-wearing clientelle who would buy microwave-shielded drapes or radio wave blocking baby blankets. Great.

The future of computer education

I just stumbled upon a web site which still sells the Elenco Micro-Master MM-8000 Computer Training Kit, a state-of-the-art piece of educational hardware which includes an 8085 processor, 256 bytes of RAM, and a convenient set of keyswitches and LEDs for entering programs and inspecting memory. I remember seeing these in magazines like Electronics Now in the early 1990s, and they sure haven’t changed.

Here’s an excerpt from the manual where they describe how to load your first program:


New oscilloscope!

For a while now, I’ve been looking for a replacement for my ancient 50 MHz Hitachi analog scope. This scope has served me well for the 10+ years I’ve owned it, but it’s kind of a junker. Slow, out of calibration, flaky triggers… I’d could probably get a similar scope for about $15 on eBay.

As much as I love the instant response and tactile feel of analog scopes, I’ve been doing several projects lately that really could benefit from a digital scope and a logic analyzer. I’ve frustrated myself for hours trying to capture one-shot signals with my analog scope, when a digital scope would have made the job a piece of cake.

So, I finally bought a Bitscope BS100U. It’s a PC-based oscilloscope. I was initially really skeptical about PC-based scopes, but they do have a few big advantages: They don’t hog desk space, it’s easy to export data to your own tools or capture screenshots for the web, and they tend to be cheaper than a standalone DSO with similar features.

Why a Bitscope, instead of something by Pico or another of their competitors? The Bitscope is really hacker-friendly. The manual includes full schematics, their communications protocol is documented online, and there’s a free API for extending their software. Did I mention it’s cross-platform? (Windows and Linux)

Best of all, the Bitscope is a mixed-signal scope. The BS100U has two analog inputs and eight digital inputs. I’ll still need to pull out my homebrew “Saxoscope” for high-speed continuous logic capture, but the Bitscope’s MSO mode should be more than sufficient for day-to-day use.

So, I just got it in the mail today. I may post a full review once I’ve had more time to use it. My initial impressions:

Pros: Small, opto-isolated, mixed-signal, easy to set up, good build quality, fairly powerful software, open design, cheaper than a Tektronix digital scope.

Cons: Kind of slow, software UI is pretty odd, more expensive than some competing PC-based scopes ($595 without any probes/pods). Bitscope web site is very rarely updated.

(Screen shot of some mixed-signal capture from the 10 megabit SPI interface on my Propeller ethernet driver)