¿Limitar la velocidad de la CPU en una máquina virtual?

29

¿Alguien sabe de una manera de limitar la velocidad de la CPU en una máquina virtual? ¿O si incluso hay un software de virtualización que le permite hacer esto?

Estoy tratando de encontrar los requisitos mínimos para un sistema, dada una imagen específica del sistema operativo que tengo. Veo formas de limitar la RAM y el tamaño del disco duro y la cantidad de núcleos, pero necesito reducir la velocidad de la CPU a 800 MHz para simular realmente la configuración del sistema. Además, la computadora que ejecuta la máquina virtual es una máquina con Windows 7.

RCC
fuente

Respuestas:

21

Se me asignó el mismo problema e instalé Oracle VirtualBox en Windows 7 (como host) y Ubuntu (como invitado). Utilicé una computadora portátil independiente, HP EliteBook 8540W con Intl Core i7 funcionando a 1.87 GigHZ y 8Gig RAM.

Suponiendo que su instalación funciona correctamente, en su máquina Invitado (por ejemplo, en mi caso, Ubuntu) seleccione "Configuración ..." de "Máquina" en el menú principal; seleccione "Sistema" y haga clic en la pestaña "Procesador". Puede ajustar la velocidad del reloj (etiquetada, "Límite de ejecución") deslizando el indicador en la barra hasta el 1 por ciento.

Asumí que el sistema operativo host (Windows 7 en mi caso) no consumía ningún ciclo de reloj (lo confirmé marcando el "Administrador de tareas" y encontré CERO utilización de la CPU en la máquina host. Es decir, Windows 7 en mi caso). Por lo tanto, supuse que el "límite de ejecución" al 100% es igual al de la máquina host (por ejemplo, 1.87 GigHZ). Creo que al tomar un porcentaje entre la velocidad de reloj de su máquina host y 800 MHZ, puede calcular el valor de porcentaje que corresponde a 800 MHZ.

Espero que esto ayude.

La mejor de las suertes.

Seif
fuente
9

En VMWare ESX y ESXi, puede crear un grupo de recursos y limitar los recursos de CPU para ese grupo. Esto le permitiría limitar la velocidad de la CPU de cualquier sistema creado en ese grupo de recursos.

LeoB
fuente
Leí sobre la opción del grupo de recursos, y pensé que se aplicaba al jugador. Lamentablemente, este no es el caso. Y ESX / ESxi no son gratuitos ... Pero podría probar la versión de prueba y si realmente funciona, investigue un poco más.
RCC
66
ESXi es gratis. (y algunos personajes más ...)
Tarnay Kálmán
De Verdad? Por alguna razón, no pensé que fuera así. ¡Pero estoy corregido! Muchas gracias por señalarlo.
RCC
2

Si bien no soy un experto en todas las diferentes tecnologías de virtualización, creo que es poco probable que encuentres esa configuración. Sin embargo, encontrará configuraciones (al menos en MS hyper-V) que le permiten limitar una máquina virtual a un porcentaje de las acciones generales de las máquinas host. Entonces, si tiene un host de 8 núcleos que se ejecuta a 2 GHz, puede intentar limitar la máquina virtual del cliente a un núcleo, y no más del 45% del núcleo.

Sin embargo, esto sería muy tosco y no adecuado si está tratando de probar bucles de sincronización o algo donde la velocidad real del procesador entra en juego.

Knox
fuente
Vi un par de programas que hacen eso, es decir, limitan el porcentaje de uso de CPU por proceso, pero solo había visto opciones de Linux. Por supuesto, no los he mirado mucho. Si la solución que estoy intentando como se describe en mi respuesta a MaxMackie no funciona, analizaré estas opciones más a fondo.
RCC
Sí, esto podría tener un efecto realmente negativo en los bucles de sincronización. Todo depende de si funciona a toda velocidad hasta un 45% y luego se corta, o si realmente intenta funcionar al 45%.
Zan Lynx
2

--cpuexecutioncap <1-100>: esta configuración controla cuánto tiempo de CPU puede usar una CPU virtual. Un valor de 50 implica que una sola CPU virtual puede usar hasta el 50% de una sola CPU host.

Oh no
fuente
1
Más información haría aceptable esta respuesta.
Ramhound
1

Puedo confirmar que esto no es compatible con VirtualBox. Sin embargo, la documentación parece ser dudosa sobre si VMware puede o no hacer esto.

EDITAR: Para VMware: "Esto no es posible con los productos Player y Server, pero creo que está en ESXi (el producto gratuito" hipervisor de metal desnudo ") y los productos pagos como VMWare Workstation".

n0pe
fuente
También puedo confirmar eso: configuré todo en VirtualBox y luego descubrí eso. Actualmente estoy usando VMware y he intentado modificar el archivo config.ini para limitar host.cpukHz a 800000. Esto parece engañar a la máquina virtual para que piense que la CPU MHz es 800. No estoy seguro de si esto realmente hará lo que quiero a eso, pero eso es lo que espero. Ideas?
RCC
Por lo que he visto, eso debería funcionar. Solo asegúrese de establecer host.noTSC = "TRUE" en ese mismo archivo de configuración. Esto regula el reloj de la CPU para asegurarse de que no se ralentice. Además, en el sistema operativo invitado, vaya a la pestaña Opciones y asegúrese de que esté seleccionada la sincronización de tiempo entre la máquina virtual y el sistema operativo host.
n0pe
Sí, tengo host.noTSc = "TRUE" también. Sin embargo, no he podido encontrar dónde habilitar la sincronización de tiempo entre vm y el host en vmware player ...
RCC
Estoy bastante seguro de que tiene que estar ejecutándose en el SO invitado
n0pe
1

Es posible que pueda simular esto con la fijación de CPU. Luego cree algunos procesos vinculados a la CPU anclados a la misma CPU. La velocidad estimada de la CPU es (Velocidad real de la CPU / # de procesos).

Algunos programas de limitación de recursos le permitirán limitar los porcentajes de recursos. Esto facilitaría limitar la velocidad de la CPU. Para hacerlo, debe deshabilitar el acceso a los recursos adicionales.

BillThor
fuente
0

En VirtualBOX hay un control deslizante donde puede configurar el% de CPU host que puede usar la CPU invitada. Tal porcentaje se aplica a cada núcleo.

En VirtualBOX no hay forma de simular un multinúcleo con velocidades diferentes en cada núcleo, solo un control deslizante para todos los núcleos.

Establecer el control deslizante al 50% hará que los núcleos de invitados se ejecuten a la mitad de los núcleos de host (un básico por núcleo).

Entonces, si tiene un núcleo deca (10 núcleos) en el host y un núcleo triple en el invitado (tres), y desea que el invitado se ejecute a X MHz mientras el host se ejecuta a Y MHz, simplemente ignore la cantidad de núcleos para calcular el porcentaje.

La fórmula sería: Porcentaje = 100 * X / Y

Espero que esto también ayude a otras personas que vengan aquí en el futuro.

Laura
fuente