Tucker's Tech

On virtualization, operating systems, software development, and communities. Note: I speak only for myself.

Farewell Diane

A lot of folks have probably heard that Diane Greene was recently replaced as CEO of VMware.  If that's news to you, you can read more here and here. I'm not going to comment on the details of what happened, why, etc., but wanted to take the chance to talk about my interactions with Diane at VMware and to wish her well.

When I first interviewed at VMware back in 2005, I knew a couple of the other founders and early employees from my grad school days but hadn't met Diane.  Although I knew VMware had some great engineers and interesting technology I had some questions about the company - the relationship with EMC, competition from Xen and Microsoft, etc..  Diane took the time to sit down with me and answer my questions in a straightforward "no bull" fashion.  I was impressed with her knowledge of the industry and the strategic view she took of how the company needed to develop technologically in order to continue growing.  I was also impressed about how much she obviously cared about the company, its employees, and its ability to have an impact on the industry.  I wanted to be a part of that.

Since then I've interacted with her from time to time, sometimes in meetings at work, sometimes randomly bumping into each other on campus or out of the office (including early one morning at a Peet's Coffee on the other side of the country).  Even as the company grew (from about 1000 employees to 6000+ in the time I've been here), she remained engaged and knowledgeable about what was going on throughout the company.  And while I may not have agreed with every decision, I've continued to be impressed by her candor, integrity, and business savvy.

Farewell, Diane, and good luck with your next endeavor.

Posted on July 12, 2008 | Permalink | Comments (1) | TrackBack (0)

Solaris 10 in a VM

I've noted previously that one of the non-Sun distros of OpenSolaris (Nexenta) is available in a VM.  Now, Sun has now quietly added the Solaris Enterprise System Virtual Machine 1.0 to the Sun Download Center (as a free download).  This is Solaris 10 Update 1, plus the Studio 11 compilers, plus all the Java Enterprise System software - app server, web server, directory server, etc. - all in a VMware virtual machine.  No OS or application install, just download and untar, fire up VMware Player/Server/Workstation (take your pick), and power the VM on. 

The VM seems to work pretty well, though there are a few caveats.  The virtual disk is IDE, so don't try to  use this with ESX or VI3 (which don't support IDE virtual disks).  It's also 20GB, so be sure to have plenty of disk space available on the host.  Also, this is update 1, not update 2, so it doesn't have the latest patches (or ZFS for that matter).  And the VM doesn't have the VMware guest tools installed, though that's easy enough to do if you're running a recent version of Player, Server, or Workstation.  Installing guest tools will improve the console UI experience and networking performance (though be sure to fix up the /etc/hostname.* and /etc/dhcp.* files after installing).  (If anyone from Sun involved in creating this is reading, I have some suggestions for improvements.)

I assume the various included components each have their own license restrictions, so examine the licenses carefully.  Solaris itself has a free right-to-use but you'll need to pay for support.

The README for the VM mentions the availability of a smaller S10U2 VM without the JES and Studio apps, but I haven't been able to find it.  A search on sun.com just hits the VM above as well as a bunch of references to the JVM.

Update (3/19/07): there are now four Solaris VMs available from Sun, including S10U3 and Solaris Express (aka Nevada) build 55.  VMware tools are pre-installed (at least in the two I downloaded), but the VMs are still using IDE disks so they won't work for ESX/VI users.

Posted on November 27, 2006 | Permalink | Comments (6) | TrackBack (4)

What was that again?

This morning during his keynote address at VMworld Mendel Rosenblum talked about (and demoed) a new virtual machine monitor capability we've been playing with in VMware R&D, called record/replay.  The basic idea is to be able to record the instruction stream that a virtual machine executes and be able to reproduce it exactly at a later time.  This isn't just the instructions associated with a single application process or thread; it includes all code executed within a VM, including multiple processes, kernel code, and interrupt handlers.  The replay can even run faster than the original execution (if desired), since during replay the host can skip over idle time.

What can you do with this technology?  Well, one obvious use is debugging.  A common problem in the development of operating system kernels and complex applications is non-reproducible bugs - a bug that happens due to a specific combination of asynchronous events and can't be readily replicated.  Often these are due to races due to incorrect locking or other timing related problems.  Even if the developer is lucky enough to get a core file containing a memory image of the system at the time the bug is detected (or shortly thereafter), the detection often occurs far enough after the initial problem that it's difficult to tell what happened.  There's also the problem that the act of creating a core file (particularly of an OS kernel) can distort the contents.  Personally as a kernel developer I've spent many hours staring at object code and remnants of register and kernel memory state and trying to deduce why a problem occurred, wishing I had a time machine that would allow me to back up and see the state of a given register before it was clobbered by unrelated code, or figure out what thread scribbled garbage onto a critical data structure.

With record/replay, you have the ability to exactly replay the execution of instructions in such a way that you can move forward and backward in time, and examine memory and register state at different points.  In addition to aiding in manual debugging, it enables wider use of tools that automatically detect bugs based on the instruction stream and changes to memory state.  Such tools are normally not feasible for use in production or even general QA, since they cause a substantial slowdown which reduces performance and can change timing and drive away bugs.  But with the ability to replay execution, we can do heavy-duty processing and analysis after the bug has already occurred, when performance is less of a concern.  The analysis can even be done on another system, perhaps the developer's machine rather than the machine dedicated to QA or production use.

You can also probably think of other uses for this technology - one that comes to mind is keeping a log of execution for analyzing security attacks.

So how do we do this?  Moreover, how do we do this efficiently?  Obviously, we could record the VM's instruction stream by trapping every instruction and recording the PCs - then on replay, walking through the instruction trace and single-stepping or emulating each instruction.  That would be extremely slow, though; the CPU would spend most of its time trapping into the virtual machine monitor rather than executing the applications running in the virtual machine.  It's similar to what classical instruction emulators do, which often have performance slowdowns of 100x or more.  Clearly this approach wouldn't be viable for real application use.

The answer is to think about what affects the stream of instructions that are executed by an operating system (and the applications running within it).  Most of the time, the CPU simply executes a deterministic series of instructions - the instruction that will be executed next is determined solely by the previous instruction executed along with (in the case of a conditional branch) the current state of processor registers and memory.  If this was the only thing determining execution order, we could replay an instruction stream by simply starting with the same register and memory state (including the current PC), and starting execution.

Execution isn't always deterministic, of course.  The source of non-determinism is I/O, particularly interrupts (including timer interrupts), I/O port accesses, and data copied into memory via DMA.  You can view these as external inputs that influence the execution of a virtual machine (or a physical one, for that matter).  If we can keep track of these external inputs, we can record the information needed to reproduce a VM's execution without having to record a complete instruction trace.

The problem of recording the execution of a VM for exact replay then becomes one of logging these external inputs and the times (relative to the execution of instructions within the VM) when they occur, and (on the replay side) synchronizing the execution with emulation of the inputs.  As an example, think about the effect on a VM of receiving a network packet.  There are two external inputs: the packet is copied into the VM's memory, and an interrupt is raised to notify the VM that there is new data to process.  (I'm glossing over minor details like changes to ring buffer registers here.)  While recording, we need to log the contents of the packet, the time the data is copied into memory, and the time the interrupt was raised (which may be the same).  While replaying, we need ensure that these inputs are made visible to the VM at the exact same point in the VM's execution as when recording.  In between these synchronization points, the VM can execute normally - meaning that user level code can execute at full speed on the processor.  That's the key to being able to record and replay execution efficiently.

All of this is obviously focused on uniprocessor VMs - record/replay for SMP VMs is a more difficult problem.  And I'm glossing over a number of implementation details.  But it gives an idea of what's possible by interposing at the virtual machine level.

Posted on November 08, 2006 | Permalink | Comments (1) | TrackBack (0)

Virtually running

Vmwarejpmc One of the nice things about working at VMware is the number of active people here, and the support that the company gives to non-work "wellness" activities.  People regularly get together during the week to play pretty much every sport imaginable, from ultimate frisbee to soccer to capoeira.    A number of us are runners, and in addition to getting together for training runs we have fun competing in the JPMorgan Chase Corporate Challenge in San Francisco every September.  This year, despite cold, fog, and wind, 107 VMware employees participated - a pretty significant percentage of the employees in the area.  Although we didn't win the event, we did place 2nd in the men's team competition and 5th among the women's teams.  Pictured above is 3/4 of the men's team - that's Mike Clayville on the left, me in the middle, and Ole Agesen on the right.  Chris Gullo couldn't make our impromptu award ceremony and is missing from the photo.  Inside the boxes are very nice engraved plates from Tiffany's, awarded to the top 3 teams in each competition.

Thanks to Craig Williams for organizing the VMware participation at the race, and for the picture.

Posted on November 03, 2006 | Permalink | Comments (0)

VMware Usenix BoF

Heading to Boston to attend the annual Usenix technical conference.  For those attending, I and some of my VMware colleagues will be hosting a BoF on virtualization Thursday night at 8PM in the Arlington room.  Please join us and bring all of your questions about VMware technology and virtualization.

Posted on May 30, 2006 | Permalink | Comments (1) | TrackBack (0)

OpenSolaris, Virtualized

I've been asked a few times by various folks about the availability of OpenSolaris-based virtual machine images that can be played in VMware Player, VMware Server, VMware Workstation, etc..  I'm happy that I now have an answer - the Nexenta folks have made a preinstalled VM image available with their latest release (Alpha 4).  This is a great opportunity for anyone who wants to try out OpenSolaris but doesn't have a spare machine to dedicate to it - you can use an existing Linux or Windows box, download VMware Player or Server and the VM image, and quickly be up and running with a nice slick distro based on the latest bleeding-edge OpenSolaris code.  The VM image is available from the Nexenta site here (scroll down to the bottom) as well as the Genunix mirror here.

Posted on March 29, 2006 | Permalink | Comments (3)

More on VMware and Solaris

Nice step-by-step writeup on installing Solaris 10 in a VM. Most of it also applies to Solaris Express.

A couple of things to add to my earlier notes on VMware/Solaris issues. The latest kernel patches for Solaris 10 (118844-19 and 118844-20) cause a panic on boot on some systems, including in a VMware virtual machine. Some limited details are available here. The workaround is to boot under the kernel debugger (kmdb) - type "b kmdb" when you get the "(b)oot or (i)nterpreter" prompt. You can make this persistent with "eeprom boot-file=kmdb" once you're booted (or by messing around with the boot configuration menus, but I don't recommend that for the easily frustrated).

The latest version of Solaris Express (build 27a, the one with ZFS) won't install in a VM if you use the graphical install and the default guest memory size (256MB). It hangs trying to load the X server and window system into memory. Either increase the memory (I suggest at least 512MB), or select the text install by hitting "4" when you get the question about install type. This should be fixed in a later build (to automatically fall back to the text install if there isn't enough room for the graphical install).

Posted on November 29, 2005 | Permalink | Comments (3) | TrackBack (0)

VMware and OpenSolaris

As a former Solaris engineer, I'm interested in helping people use Solaris and OpenSolaris with VMware.  VMware and Sun have announced that full support for Solaris will be added in future versions of VMware products.  In the meantime, the existing products can be made to work, but there are a few issues.  Here's some of the ones I know of (with workarounds).  Note: these aren't official recommendations from VMware (except where I've linked to vmware.com docs); they've worked for me, but your mileage may vary.

There are a couple of issues with virtual LSI Logic SCSI disks. Solaris 8 and 9 (GA) didn't come with a driver for the LSI Logic disk; if you try to install you'll get an error message saying something about "divide by zero error".  The fix is to either download the driver from the LSI website and install it as an ITU (details available with the driver), or upgrade to a recent update of Solaris 9 (which includes the driver) or to Solaris 10 or later.  More details are available here.

In addition, the LSI (actually "mpt") driver in versions of Solaris later than Solaris 10 (i.e., Solaris Express or OpenSolaris) contains some changes that don't work with Workstation 5.0.  You can either install on a virtual IDE drive (select the "custom" option when creating the VM), or use the beta of Workstation 5.5 (or the new VMware Player) instead. Setting up the X server can be a bit of a challenge.

The Xsun server available in Solaris 9 is actually pretty straightforward: kdmconfig will autoselect the VMware driver and a 1024x768 screen.  To change the screen size, run kdmconfig (as root) and pick a new size.  The Xorg server used by default in Solaris 10 and later is a bit more of a problem - it comes up OK, but the default screen size is pretty small (800x600). To change that, you can either switch back to the Xsun server by running kdmconfig, or run /usr/X11/bin/xorgconfig to reconfigure the Xorg server.  Some tips from other folks who have gone the xorgconfig route are available here and here.

Posted on November 01, 2005 | Permalink | Comments (2) | TrackBack (1)

Hello again

I'm a Principal Engineer at VMware , and am part of the team working on the ESX Server  product.  We're pretty excited about the recent announcement  of ESX 3, which has been in development for quite a while.  I actually can't take much credit since I only came in on the tail end of the ESX 3 development - up until last May I was at Sun, working on Solaris and OpenSolaris (see my Sun blog for more details).

Recently, I've been working on Distributed Resource Scheduling (DRS), which will be available with ESX 3.  The basic idea behind DRS is to provide the ability to automatically schedule VMs across a cluster of machines, in much the same way that an operating system schedules processes on different CPUs.  In addition to determining where VMs should run when initially powered on, DRS uses hot migration (aka VMotion) of VMs between hosts to adapt to dynamic changes in load or available resources.

The thing I find interesting about DRS is the way it decouples the application infrastructure (including the guest operating system itself) from the physical hardware.  If you want to take a machine down for maintenance, you can put it in maintenance mode and the VMs it was running will automatically migrate to other systems.  Once you're done, power it back on and VMs will migrate back.  If you have a spike in the load on a particular application, the scheduler can compensate by moving that VM to a host with more available resources. If you decide that a particular VM is more important than you initially thought and want to give it more resources, you can change the resource settings on the fly and the scheduler will adjust.

Of course, operating systems have been doing this sort of thing for years.  When I run a multithreaded application on an SMP I don't need to worry about how the threads are scheduled onto processors - the OS takes care of that.  And various kinds of batch and grid schedulers have been able to do initial placement scheduling - deciding what machine a new job should run on.  But being able adapt on the fly to changes in load and available resources - migrating workloads between independent machines - without application or OS changes - using commodity (i.e. cheap) hardware - in an enterprise-class product - that's something different.

Posted on October 18, 2005 | Permalink | Comments (4) | TrackBack (0)

Recent Posts

  • Farewell Diane
  • Trip report from SOSP 2007
  • Making code reviews less painful
  • The Value of Virtualization
  • Solaris 10 in a VM
  • What was that again?
  • Virtually running
  • VMware Usenix BoF
  • OpenSolaris, Virtualized
  • More on VMware and Solaris
Subscribe to this blog's feed

Blogroll

  • Steve Herrod
  • VMTN Blog
  • Keith Adams
  • Stephen O'Grady
  • Claire Giordano

Categories

  • OpenSolaris
  • Solaris
  • Sports
  • Virtualization
  • VMware
  • Web/Tech
My Photo

About