Nope. It looks like we're talking about the same thing.
The issue is that if the VM needs any processing time at all, it will get none unless the VM is assigned the total number of vCPUs you've assigned. If your VM has 4 vCPUs assigned to it and 1 process in that VM needs 1 core, the other 3 vCPUs will be idle(since there is no actual work to be performed), but ESXi cannot assign those "idle" vCPUs to anything else.
Yes, but I think this is further complicated by the fact that the OS may load balance the single threaded process to different logical cores. I see it all the time in windows at least. I'll have a 4 core processor, 4 threads (no HT). A process will be consuming a solid 25% of the CPU (one thread / core). But all 4 cores are loaded at exactly 25%. I'd expect one core to be 100%, and the others to be 0%.
Anyway, this is only really an issue on the vm host with relatively few cores that has a relatively large amount of vm's with relatively large assigned numbers of vcpu's, that are all using a constant amount of cpu.
In my case, I have only 5 or so vm's in total, so it's never an issue, even though the host only has 4 threads (only 2 physical cores). Being a home environment, I never have lots of the vm's all running 'single core limited' stuff. Whereas I do end up having times where a vm uses all four vcpu's completely for more than a short amount of time.
Any enterprise vmware environment is going to have far greater than 4 threads on each host. Probably more like 16-32.
Freenas can, and will use lots of cores though. I've got a 4 core / 8 thread cpu for freenas that I've seen only 20-30% idle. So if you limit vcpu's, you 'cut off the top' of the max freenas can use, but it's a bit more friendly for scheduling if the vmware host is very busy with other vm's. One more point that makes me glad I didn't virtualize freenas. I'll stick with a dedicated machine for esxi, and the two dedicated machines I have for freenas.