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.
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.
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.
It pretty much went flawlessly.
- I got the new vm created on the old hardware.
- I worked on that vm for about 3 days.
- When the new hardware arrived, I set that up on one monitor and installed vmware.
- I then turned the old pc into a vm and backed it up in case something went wrong or I forgot some data.
- 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.
So, I am pretty sure I am sticking with this setup. It isn’t perfect, but it works good enough.
- 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.
- 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.
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.