VirtualBox CPU Performance Tuning

(corrections 21.07.2020: I have falsely written “Multithreading” instead of “Hyperthreading” in some places)

Because my Windows Server 2019 guest system felt quite sluggish, I first googled (of course! 😉 and then tested myself to improve the performance.

Thanks to a blog entry from Mihai Matei on the topic at hand y had an idea on where to look and I could confirm his findings regarding Hyperthreading.

Here are my test-details, in case you are interested. If not you can jump right to the conclusions at the end of the article.

CPU: Intel 8350U (4 Cores, 8 Threads, 15W TDP)
Host RAM: 32GB
Host OS: Windows 10 Pro (1809) 64 bit
Guest OS: Windows Server 2019
Benchmarking-Tool: CPU-Z

Hyperthreading on (Bios setting on host)

CPU-Z benchmark results on the host

  • SC: 406
  • MC: 2002

    Guest with 4 Cores

  • Observation: Opening Windows Explorer slow
  • CPU-Z-Bench
    • SC: 280 Max
    • MC: 1300 Max

      Guest with 1 Core

  • Observation: Opening Windows Explorer much faster
  • CPU-Z Bench
    • SC: 360
    • MC: 360
    • Note: SC is substantially higher, but MC a lot lower. The GUI feels a lot more responsive with only 1 core assigned.

Hyperthreading off (Bios setting on host)

CPU-Z on the host

  • SC: 411
  • MC: 1540
  • Note: SC performance not changed, but about 25% loss on MC performance.

Guest with 4 Cores

  • Observation:

1) Task manager on guest: 6% (almost idle), task manager on host: 28% for VirtualBox task
2) CPU-Frecuency drops from 3,6 to 2,5 during MC test and goes only back up to 3Ghz during SC. Explanation: CPU seems to throttle because of temperature (monitored with HW Info Tool). Environment temp is about 32 C

  • CPU-Z-Bench
    • SC: 295 Max
    • MC: 1070 Max

Guest with 1 Core

  • Observation: The benchmark does not get 100% CPU, because 18% is eaten up by “System Interrupts” accoring to task manager.
  • CPU-Z Bench
    • SC: 370
    • MC: 360

Guest with 2 Cores

  • Observation: System interrupts low (2%, almost all % used by benchmark)
  • CPU-Z Bench
    • SC: 370
    • MC: 730
    • Note: Best result so far. SC performance still high and MC doubled compared to 1 Core.

Guest with 3 Cores

  • Observation: System interrupts low (2%, almost all % used by benchmark). Looks like 3 cores is not a good idea! 😉
  • CPU-Z Bench
    • SC: 305
    • MC: 660

Conclusion

On my particular system the best setting for my Windows Server 2019 guest are:

  • Host: Disable Hyperthreading in BIOS settings
  • VirtualBox Guest Settings: Assign 2 cores

Due to the switched off hyperthreading some mulithreading performance is lost. But as I am mostly depending on high single-threading performance for compiling tasks it is not an issue.

Depending on your CPU and number of cores available your optimal settings may vary.