Computer: Dell D630 (laptop)
Processor: 2.40GHz Intel(R) Core(TM) 2 Duo - Excellent
Memory: 4GB - Excellent
Hard Drive: 120GB 7200RPM - Excellent
Media Bay Hard Drive: 80GB 7200RPM - Good
Screen: 14.1WXGA+ (1440x900) - Good
Operating System: Windows XP sp2 (Excellent) Company Core Load (Ok)
So the good news is that the laptop is a great laptop. The screen is a bit smaller than I'm used to with my personal HP Pavilion, but I've become accustom to is with my MacBook Pro with the exception that the MBP is a 15.4 inch screen instead of 14.1. The downside is that the laptop came with the company's core load. Now, I understand the purpose of having a core load for leased machines from the support, standardization and security standpoints. The problem is that no one image is ever perfect for everyone. Even having machines on the company's domain with your own setup can cause problems when they push down a standard change. For example, if the company cracks down on ActiveX controls in IE for security, but you develop ActiveX controls for IE, you're going to run into problems. So from the company's standpoint, core load images are a wonderful thing. For the user's standpoint, that's not always the case. Being in software development, it's usually not the case.
My machines at minimum are usually wiped clean (formatted) and I install Windows from scratch. This way I know every setting that is set within Windows and I hopefully won't be find out that my software doesn't work because of something being locked down by the domain or core load image. This helps me develop much faster and reliably. IT is fairly lenient with us because we have special needs compared to the rest of the company. However, there are a few things that they still require such as anti-virus, machines staying up-to-date with Windows updates, etc. Any machine that can not go on the domain is supposed to be on an air gapped network. So I keep my eyes open for ways to get my work done and yet comply with IT's standards, rules and regulations. I've worked in IT before and so I've seen it from their side.
My goal with this new laptop was to run the core load and not wipe it clean. To do this, I determined that I would have to rely heavily on virtual machines. Thankfully I knew that the Intel(R) Core(TM) 2 Duo is a screaming processor that it handles virtual machines beautifully and the 4GB of RAM means that I will not have to skimp on the memory for each virtual machine.
Host Environment
A couple things to note about my host system. All I have installed on it is the company's core load which contains the operating system, remote dial-up/VPN software, security software, anti-virus software, Office and the company's instant message client. In addition to this, I have installed the VMware products such as Workstation, Converter, Server Console and Infrastructure Client.
Partitions
The laptop came with the primary hard drive partitioned with the C:\ drive at 20GB. At first I did not like this as I don't like others determining how my hard drive is partitioned. But this is actually large enough for the extra software (VMware products) that I had to install, so I'm okay with the size they chose. The benefit of having it already partitioned like this is that I already have a partition for my virtual machines on the primary hard drive. Virtual machines really should be stored on their own partition as this allows for better fragmentation on that drive. VMware files are essentially all extremely tiny files or very large files, so when they become fragmented, they do so in larger chunks (at least in theory). This also makes it easier to de-fragment the partition if the files are fragmented in larger chunks. Unfortunately, this partition is not 100% going to be used for virtual machines as the company's core load moves the 'Documents and Settings' folder to this second partition (so as to not lose any data if the C:\ drive needs to be re-imaged) and I also have a few Portable Apps on this second partition. However, this is not a large amount of data and should not cause too many issues in terms of fragmentation.
Anti-Virus
A big concern is the fact that this laptop is running anti-virus. We all know anti-virus is meant to protect us, but as most of us know, this is a major performance killer as the anti-virus software constantly scans files as they are accessed. So, the anti-virus software must be configured to not scan (real-time scan) the virtual machine directories. This is not just a slight performance boost, but rather a life-or-death performance boost. I've seen people struggling to get their virtual machines performing at a usable level only to find out that the anti-virus was what was killing them. Night and day performance.
Development Virtual Machine
Description: This virtual machine contains just the minimum tools that I need to do 80% of my work and is configured in a way to be the best performing of my virtual machines.
Hardware: I decided to give this virtual machine 768MB of memory. If need be, this virtual machine can be upped to 1GB, but so far it has been running fine with 768MB. I only need about 20GB for the hard drive in this virtual machine as the source code does not take up much space and I'll be keeping the number of applications on this virtual machine to a minimum. The key feature of this virtual machine is that this hard drive will be created with all of its space pre-allocated. Pre-allocating the space for this hard drive means that it VMware will not have to dynamically increase the size of the hard drive as it needs it because the space is already there. This gives the virtual machine a performance boost.
Software: Again, I keep this virtual machine as small as possible. Since the majority of my work will be with .NET 2.0 and 3.0 applications and SQL, I installed just Visual Studio 2005 with just the components that I need, SQL Server 2005 Tools (just the tools), TortoiseSVN and KDiff3 (my diff tool of choice). I do not need full blown SQL Server on my development image as I have a test system that contains my development database(s). Keeping the software to a minimum ensures stability and high performance within this virtual machine.
Notes: I do not take snapshots with this image as I want the performance of this machine to be as high as possible and snapshots branch off the hard drive files defeating the purpose of my pre-allocated hard drive.
Test System Virtual Machine
Description: This virtual machine is the system that I use to install the development builds on and contains the database(s) that I develop against.
Hardware: The memory allocated for this system matches what we require for our software and can be adjusted as needed. The hard drive(s) also are sized as needed and can be adjusted as needed. I leave VMware dynamically allocate the space for these drives as I am not concerned too much with the performance of this image.
Software: This is obviously whatever is needed for our software plus our software itself.
Full Development Virtual Machine
Description: This virtual machine contains everything for the development of any piece of our product including previous versions of the software. This image is actually a copy of our build box minus the software that I am not licensed for. Essentially, I could almost run an entire build on this virtual machine. This is actually the virtual machine that I use to edit our build process as well.
Hardware: This virtual machine is a beast and it needs the hardware to match. I actually allocate 1GB of memory for this virtual machine and it contains 2 hard drives. One for the operating system and software and one for the data/source code. The second hard drive is a massive hard drive and can be deleted and recreated without destroying the virtual machine. It makes for easy cleanup of the virtual machine.
Software: This has it all. Visual Studio 6, 2003 and 2005, SQL Server 2000 and 2005 (full SQL Server), third party controls, etc. Again, this is a copy of our build virtual machine with certain software uninstalled that I am not licensed for such as InstallShield. With this virtual machine I can develop on the old Visual Basic 6 controls and applications plus the older versions of my pieces of the software that are still .NET 1.1.
Notes: This machine is easy to recover. All I need to do is take another copy of the build machine and uninstall a couple items.
Benefits
- Any one of these machines can be recreated without having downtime (assuming the original image is still usable). Say my development image becomes unstable because I installed the wrong software (be it third party controls that I'm testing, etc.), I can easily start to set up a new image while still using the old one to continue developing until the new one is set up. To reset up a physical system, your choices are to take down your main system or find a backup computer to continue developing on while your system is being reinstalled.
- If I find that the core load image is locked down in some way, my virtual machine will not be.
- Network isolation/security. Using VMware Workstation's Host-Only or NAT network settings, I can either isolate my virtual machine from the network or secure it. This also helps keep the network safe as my virtual machines that are not managed by the domain are secured as well.
- One benefit that I've found is that when I shut down my laptop for the night (which I typically put it in standby), I find it's best to suspend all virtual machines and close Outlook and instant messenger. Within my virtual machines, I may leave stuff running, I may close everything, but on my host system, everything is shut down for the night. So, when I get in in the morning, I am starting fresh. And when I close down for the night, I make sure to check in my changes and find a good spot to leave off. It is much easier to leave stuff open, not checked in, etc. when it's running on your host desktop machine that you leave up and running overnight. But when I close stuff down for the night, I find I leave off in better spots. This leaves me less stressed and better organized for the next day. Because I'm less stress and am starting fresh each day, I also find I'm more productive.
- Task segregation - I've also found that my individual tasks are segregated by virtual machine so its easier to stay focused on one task at a time.
The setup that I've described above is not meant to be an fix-all, universal solution. But hopefully you find that this gives you ideas how to improve your development machines or environments.
Tags: VMware, Visual Studio, Microsoft, Windows, SQL, SQL Server, virtualization, .NET
0 comments:
Post a Comment