I have posted this before, but I’ve been working on a wrapper for OpenTTD to turn it from a game to a (slightly!) more serious system for research/experimentation, especially using its AI system:
replies(4):
(Feels a bit soon to repost somehow…)
If you have 4 real cores, with 2 hyperthreads, the system reports 8 CPUs. But that's fake. Hyperthreads share most of their compute and register resources, so they only work well if a core is spending most of its time waiting. 2 hyperthreads both doing full compute will basically work at half speed each, which is close to what your graph is showing.
BTW, you can check on Linux with this command LANG=C lscpu and checking the Thread(s) per core value