Virtualization Experiment Reloaded

Well, I tried the virtualization experiment again.

It worked out much better, but it still isn’t quite there.

This time though, I am going to stick with it.

The hardware

037step2 thumb Virtualization Experiment Reloaded

It was time for me to get new development PC hardware.  I went with a desktop again instead of a laptop, simply because I can get so much more power for the dollars and I like to have 4 monitors.

Yes, there are laptop configurations that can get you four monitors, but none of them are very nice, and portability is only a concern 1% of my time.  Even half of that time, I can just use any crappy laptop to remote desktop into my PC, so it just doesn’t make much sense to use a laptop as my primary PC.

Before I get much hate mail about this, let me say “your needs may be different, and I can respect that.”  Although, every developer should ask the question of whether or not spending the same budget on a laptop vs. a desktop PC + a crappy laptop would net more horsepower and meet the general case better.

My basic hardware for the new PC was this:

  • Intel i7-3930K CPU @ 3.20Ghz (6 core x 2)
  • 32 GB RAM
  • 2 x ADM Radeon HD 7700
  • 2 x Kingston HyperX 3K 128GB, RAID 0

First PC I did not build myself, instead built by iBUYPOWER.  (Turns out they can build the PC for just as cheap as I can and they test everything to make sure it is all compatible.)

I just put the HDs in after it was shipped to me, since I was able to get a better deal on those.

The plan

What I wanted to do for this development machine was to make it easy to backup, portable and isolated.

I essentially wanted to create a clean environment where all of my work stuff lived and not install other things on it.  Much smaller ambitions than my previous desire to create virtual machines for each kind of development task and have a separate virtual machine for my databases.

One neat thing about this plan was that I should technically be able to put my work PC on an external drive for transport and load it up on a laptop if needed or another pc if my hardware failed.

One additional part of the plan was to be able to seamlessly transfer from my old PC to the new hardware without even a day of downtime. Just create the virtual work PC on the old hardware, work on it for a few days, and when the new hardware arrives, transfer the VM.

I also had planned to use the Unity mode of VMWare to allow me to seamlessly run apps from the VM outside of the VM.

The execution

It pretty much went flawlessly.

  1. I got the new vm created on the old hardware.
  2. I worked on that vm for about 3 days.
  3. When the new hardware arrived, I set that up on one monitor and installed vmware.
  4. I then turned the old pc into a vm and backed it up in case something went wrong or I forgot some data.
  5. Finally, I copied the vm to the new hardware and fired it up.

Didn’t end up having to waste a day of work switching hardware.

vmware view pilot 5132022 thumb Virtualization Experiment Reloaded

The reality

So, I am pretty sure I am sticking with this setup. It isn’t perfect, but it works good enough.

The good

  • Speed seems fine, minimal hit since I am on a RAID 0 with 2 SSDs.
  • Reboot work PC without going offline.
  • Not having to install crap apps that bog down work PC.
  • Clear separation of work and non-work. (Helps for staying focused.)
  • Easy backup of work PC, just copy a file.  (CrashPlan does this, for me automatically.)
  • Easy file transfer to work PC and back.
  • VPN without going offline.
  • Chrome synching is awesome.  This is the real use case for it.
  • Every USB device seems to work fine.

The bad

  • Unity is kind of crap.  It really needs some work.  It works sometimes, but never really good.  Lots of issues.  Windows disappear.  It gets stuck in Unity mode.  It is also very hard to launch and find apps in the VM.  In my opinion, this whole thing needs to be reimagined.
  • Full screening the VM to 4 monitors is a pain.  A ridiculous pain.  I have to hit a cycle monitors button about 8 times, before it cycles to the mode where the VM takes up all four monitors.  There is just plain no excuse for this.  VMWare should have a setting to specify that the VM should default to full screen 4 monitors.
  • The little status bar to control the VM in full screen mode is impossible to make appear.  I absolutely HATE this paradigm.  Remote desktop does this as well, except that one has the opposite problem.  Easy fix here, hide the thing until I hit some key combination.  This would be much better than a mouse location.
  • Some slight video type problems.  Applications like Join.me get pretty pissed off about me running a VM and using Unity mode.
  • Only able to push 8 CPUs into the VM.  (Doesn’t seem to support all 12.)
  • Takes up a lot of space on my SSDs.  It is a bit of a crunch with only about 20 gig left over, but seems like I can manage.

Final thoughts

So virtualization has come a long way, but for the developer case at least, it still has a way to go.

I do think hardware for desktops has come far enough along that you can get sufficient hardware to host a virtual dev machine.  It is easy and cheap to get 32gigs of RAM and fast SSD drives.  Hardware still isn’t quite fast enough to make running a VM completely seamless, but it is close enough that I don’t feel like I am taking much of a performance hit at all.

I would like to see technology like Spoon.net become much more mainstream.  This would reduce the need to install the same apps on the non-virtualized PC as the virtualized PC.  The whole OS really needs to move to the cloud.  Applications shouldn’t need to sit on HDs (for the most part.)

Virtualization software vendors have quite a bit of work to do still.  The software has gotten pretty good, but it really sucks with handling multiple monitors and seamless application integration.  When I am working on a virtual machine or running apps that live on a virtual machine, that process should be painless and easy.  I should not even realize I am using virtualization.

Just having one dev VM instead of 3 or 4 seems to have solved most of my complaints from my previous trial at virtualization.  There is something that just feels really good about actually shutting down your dev PC at the end of a work day and knowing that you have a good dependable backup of it from various points in time.

I’d also really like the ability to be able to just boot from a VMWare image.  I know you can boot from a VHD, but Virtual PC seems to be lacking in too many other areas to use it instead of VMWare.  (Although, perhaps I am wrong on this.  Might be worth an experiment.)

At this point though, I don’t see myself going back to bare metal for my dev PC.  There are a few mild annoyances, but most of them are fixed by my simply clicking “cycle monitors” 8 times first thing in the morning to make my dev PC take up all 4 screens.  I also predict that I will go to two retina displays eventually.

  • http://OdedCoster.com/blog Oded

    One major point against VMs for development is if you need to do any 3D (hardware accelerated) dev work. Yes, VMWare does have support, but it suffers badly.

  • http://nitoprograms.com Stephen Cleary

    I found your blog entry quite interesting, and timely, too – I’m planning to upgrade my dev machine at the end of the year, and I’ll be virtualizing it for the first time.

    I’m pretty sure I’m going to go with boot-to-VHD, though. Boot-to-VHD does not use VirtualPC or Hyper-V (which is still just plain inferior to VMWare though MS is gradually catching up). Boot-to-VHD runs on the metal for everything except disk access, which is virtualized within the guest OS itself. Snapshots are painful, but doable (you boot to another OS, create a differencing VHD, and set up a new boot option for it). Also, it’s free. :)

    • http://simpleprogrammer.com jsonmez

      Thanks Stephen,

      About the boot to VHD. I wasn’t very clear about what I meant by that.

      I had ruled out that option, because I wanted to the ability to run as a VM as well, and sometimes to be able to boot to it.

      Also the portability factor.

      I’d be curious to hear your opinion on why boot to VHD would be better than no virtualization?

  • http://virtualizedgeek.com Keith Townsend

    Pretty helpful post. Good real world example of the exact use case for what VMWare Workstation was built to fulfill. Do you find it helpful for testing software as you develop?

    • http://simpleprogrammer.com jsonmez

      Thanks. I haven’t utilized it that much for testing yet, but I can imagine it will be useful to snapshot different configuration and have them ready to go.

  • http://virtualizedgeek.com Keith Townsend

    Reblogged this on Virtualized Geek and commented:
    I really like John’s post on a practical use of VMware Workstation. He’s a developer who has a real need to separate his work environment from his home environment. In addition at some he may use his system for testing code. A good unbiased look at virtualization for end user computing from a non-virtualization focused IT professional.

    Great work John and thanks for sharing.

  • Jason Bye

    I started developing inside a VM back in 2006. I say this not to show off, but as proof that this is a great approach to take. I have worked on, and still maintain, a number of products each requiring different development tools, source control systems, databases, system setup and dependencies. A VM for each of these product development environments lets me tailor the system exactly as required without fear of the setup of one trampling all over another. Since 2006 I have had a number of different development machines, and in all cases I just copied the VM files over to my new machine and i’m off again like nothing happened. Some of the VMs I still use regularly today were created back in 2006. In all this time I have never had a problem with corruption of the virtual drives. VMWare Workstation has proven to be an extremely reliable product, and I consider it an essential part of my development toolkit.

  • Adolfo

    John, great really fantastic website – i discovered it -just minutes ago- through your fabulous explanation of Action Func and Pred.

    I also love Virtualization. I’ve been using multiple VMs for development for years, the rest of the developers at work always making fun of me as I am the only one that uses VMs.

    But it was never perfect, always something with performance being the number one issue. In my experience VMWare Workstation performance gets worse and worse over time and the images grow and grow and it takes longer and longer to shrink them. Then last year I switched from VMWare Workstation to Oracle’s Virtualbox. Fantastic. Super fast, reliable, smooth as silk and Free!. Highly recommended. Give it a shot.

  • Pingback: My Virtualization Saga Continues « Making the Complex Simple()

  • http://www.cricketmorethanagame.com cricket more than just a game

    Hello! I just wanted to ask if you ever have any problems with hackers?
    My last blog (wordpress) was hacked and I ended up losing many months of hard work
    due to no back up. Do you have any methods to stop hackers?

    • http://simpleprogrammer.com jsonmez

      I have not had an issue. I am on wordpress.com though right now.