Debugging SMP Code with UML
chromatic writes "It's easy to write code that works fine on single-processor systems but dies horribly on multi-processor boxes. Instead of spending thousands of dollars on a four- or eight-way system, you can use UML to emulate a multi-processor machine."
It's no speed demon, but it's about the nicest free tool for machine-level debugging.
An appropriately malicious emulation of SMP hardware can force these faults out much faster than they would appear in real life. One simple example would be cache emulation. IRL cache is limited and will be flushed automatically at some point. The emulation can treat cache as unlimited and only flush it on operations that guarantee cache flush. This will shake a lot of difficult-to-reproduce bugs out quickly.