Descubrí que, aunque es posible (y posiblemente más rápido) en VirtualBox (mi experiencia fue con la versión 5.1.0) asignar vCPU a una VM basada en procesadores lógicos, uno puede tener problemas dentro del SO huésped cuando se ejecuta a alta carga . En mi caso, una máquina virtual Windows 2012 R2 con 12 vCPU en un host Ubuntu 16.04 de 8 núcleos (que informa 16 procesadores lógicos) se BSOD durante una carga de CPU alta con el mensaje de error DPC_WATCHDOG_VIOLATION. Un análisis de minivolcado con osronline.com mostró que e1g6032e.sys (el controlador de red Intel 100/1000 nativo de Windows) es la causa de la violación.
Esto me lleva a creer que el tiempo dentro del sistema operativo invitado se ve afectado negativamente al asignar vCPU en función de la capacidad del procesador lógico y ejecutar la VM a alta carga durante períodos prolongados. En mi caso, el 100% de la carga de la CPU dentro de la VM de Windows durante unos minutos daría como resultado el BSOD. Después de reducir el recuento de vCPU a 8 (que corresponde al recuento de núcleos físicos del host), la VM de Windows ya no BSOD en situaciones similares de alta carga. La documentación en línea de VirtualBox dice que uno debe hacer esto, pero no ofrece ninguna razón.
En mi entorno también había otras dos máquinas virtuales de Ubuntu ejecutándose, cada una con 8 vCPU propias. Sin embargo, la carga sobre ellos era mínima en el momento de los problemas BSOD de Windows VM.