I recently set up a Parallels virtual machine running SQL Server and noticed lots of CPU usage even during idle. I found that people running VirtualBox had similar problems especially in conjunction with SQL Server.

It's caused by SQL Server (2008+ and maybe some other versions with various service packs) constantly polling an interrupt for high-resolution timing instead of using RDTSC (a less intensive CPU instruction that's not as accurate and not synchronised across multiple CPU cores).

This is a pain in resource constrainted virtualised environments (and in my case, a laptop/notebook), especially when the precise timing isn't required. A great solution is to go into SQL Server Configuration Manager and add a trace flag startup parameter.

-T 8038

This forces the database engine to source its timing from RDSTC instead of interrupts. You can then restart the SQL Server service and do:

Dbcc Tracestatus

This will give you a response with the 8038 number if it is turned on properly. This has dropped my idle-time CPU usage from ~25% to ~5%.