In my last blog , I presented some higher level criteria for deciding what kind of machines to pick and how to set them up. This time I will offer some additional concrete tips for machine setup. This is a pretty loose collection of things I have found useful.
Here are a few Microsoft Windows specific tips that may help when you set up machines.
Ensure Adequate Disk Performance
What is adequate disk performance? First, ask yourself what hardware you are using, and what you are planning to do with it. We already went a little into picking the right hardware for your needs, so this section focuses more on making sure you don't have a completely mis-configured harddisk. First let me get your attention... I have seen freshly delivered machines that had BIOS settings that caused a ten-fold reduction in disk I/O! These decisions and details can make or break your performance.
There are a few tools out there that can be quite useful for measuring performance:
So what are you looking for? Again, that very much depends on what you buy (don't expect high performance from a Netbook), but for a well-performing hard disk, you want at least something between 40 MB/s and 60 MB/s for writes and between 50 MB/s to 70 MB/s for reads. Once you identified that the disk I/O is indeed poor, there are a few things to check:
Defragment the disk. Sometimes that helps, sometimes it doesn't. We had one customer that for their builds would format the build drive between all builds to get rid of fragmentation.
See if there are BIOS/controller settings that may affect performance (write through, etc.).
See if there are any switches on the hard disk itself that may impact performance (disabled cache etc.).
See if there are any settings in the operating system that may affect disk performance.
Installing Windows Updates or Not?
This is an interesting question as it touches on infrastructure security and system stability. On one hand you want to ensure that your machines are well protected by having the latest security fixes installed. On the other hand you want your environment to be as stable as possible, meaning no changing system dlls, updated ActiveX controls etc.
There is no single 'right' answer to this question, but for our own cluster our policy is to download the updates as they become available and then review them before applying them regularly. This seems to be an ok compromise between security and stability.
Keep in mind that during the installation of the patches, the machines are likely to be unresponsive/unpredictable, so you want to make sure that you do this during off times.
Windows Server Update Services Microsoft's Windows Update Services is the best tool for managing Windows updates. It has facilities for downloading updates first to a local update server and then pushing the updates to the other hosts on your local network on your schedule. To find out more about deploying this technology, also check the Microsoft WSUS page .
Using Anti Virus Software
Ahh... my favorite. Most organizations do have a policy requiring the use of some Anti Virus software. Now, we can have a long debate about the usefulness/effectiveness of such software. Unless you have had 100 machines hit with a Virus and tried to get rid of it, though, you probably won't understand.
There are of course all kinds of commercial applications for this (too many to even start listing them here), so the right choice is between what your IT department mandates, and what your tools support. Ultimately the editor's choice awards have gone to different vendors in different years, so I don't think there is an obvious choice. In the context of managing a cluster, the most important feature in an antivirus suite is central management of protected hosts.
Unfortunately, you probably won't know up front when the Anti Virus software of your choices messes up one of your existing tools. When that time comes, there are a number of possible remedies:
As usual... try to update all parties involved
Exclude certain applications from scanning.
Exclude certain disk locations from scanning.
Disable heuristic scanning (or add the tool to exclusion list).
On a side note... the question of firewall is also relevant. If you are pretty well protected behind a corporate firewall, and your overall network is clean, there is an argument for saving the extra overhead of running a firewall on every machine. Again, this is going to depend on your organization.
Avoid Network Shares if Possible
This may be a surprise to some of you. After all, network shares make it easy to access a consistent set of files, like build tools, across a large number of hosts. But we have found that using network shares for frequently used tools like compilers tends to overload a typical file server. The performance hit is so bad that we ended up copying the tool chain to the local disk on each host and resyncing them periodically.
Make Sure Windows is Configured for best performance
There is nothing wrong with turning off the monitor, maybe even shutting down the hard disk when it's not used (assuming you do have down times for your machines). Feel free to disable all the graphics fluff in Windows (Display Properties|Appearance|Effects), as well as setting the background image to a single color (especially if you do remote desktop access). Here are some other specific things to check:
Set the Windows Power Options to "Maximum Performance".
Run your CPU at the maximum allowed clock speed.
The bus speed is set to maximum.
The hard disk is set up for maximum throughput.
The network card has negotiated the highest possible full duplex connection with the switch.
Disable the Recycle Bin.
Yes really... if you do disk intensive work on a machine that involves a lot of file creation and deletion, the recycle bin does have an impact. We have seen up to 10 percent difference in speed for certain tasks, as well as the disk space savings for not storing the files.
For instructions take a look here:
I recommend a Google search on "disable windows recycle bin ".
Disable Unneeded Services
By default Windows runs a whole lot of services, several of which are not relevant when the machine is used for a specialized task. The list will obviously vary between Windows versions and also depends on what exactly you are doing, but here is a list of services that we routinely disable on our build machines:
Help and Support
Tablet PC Input Service
Windows Defender (service and autorun via msconfig)
This is generally ok if you are in a well-protected environment or are using other means to protect your machine.
You can find an introduction into this here:
This is mainly a security precaution, as there is a large number of viruses out there that will spread through autoruns. This is especially interesting for network shares, as those may be used to spread viruses. In general I find the convenience of autorun marginal, compared to the potential security risk.
Here are a few links relating to this issue:
Disable Search Indexing
On a personal desktop machine indexing your documents can be very useful. On a machine used in a cluster, I have yet to see a real reason to do this. My recommendation is to save the disk space and the computing time/disk access time and disable whatever disk indexing you have:
For other third party indexers, just remove/don't install the software.
This whole setup discussion is a big area, and this article obviously only scratches the surface. I would love to find out what other people do in this area, so let us know about your experiences and solutions!
I found a number of good hints on these sites:
Stay up to date
We'll never share your email address and you can opt out at any time, we promise.