Limitando a velocidade da CPU em uma máquina virtual?

29

Alguém sabe uma maneira de limitar a velocidade da CPU em uma máquina virtual? Ou se houver mesmo um software de virtualização que permita fazer isso?

Estou tentando encontrar os requisitos mínimos para um sistema, dada uma imagem específica do SO que eu tenho. Vejo maneiras de limitar o tamanho da RAM e do disco rígido e o número de núcleos, mas preciso diminuir a velocidade da CPU para 800 MHz para realmente simular a configuração do sistema. Além disso, o computador executando a máquina virtual é uma máquina com Windows 7.

RCC
fonte

Respostas:

21

Fui encarregado do mesmo problema e instalei o Oracle VirtualBox no Windows 7 (como host) e Ubuntu (como convidado). Usei um laptop independente, o HP EliteBook 8540W com o Intl Core i7, rodando a 1,87 GigHZ e 8Gig RAM.

Supondo que sua instalação funcione corretamente, na sua máquina Guest (por exemplo, no meu caso, Ubuntu), selecione "Configurações ..." em "Máquina" no menu principal; selecione "Sistema" e clique na guia "Processador". Você pode ajustar a velocidade do relógio (denominada "Execution Cap") deslizando o indicador na barra até 1%.

Eu assumi que o sistema operacional host (Windows 7 no meu caso) não estava consumindo nenhum ciclo de clock (confirmei isso verificando o "Gerenciador de tarefas" e encontrei a utilização da CPU ZERO na máquina host .ie Windows 7 no meu caso). Portanto, aspirei 100% do "limite de execução" igual ao da máquina host (por exemplo, 1,87 GigHZ). Penso que, calculando uma porcentagem entre a velocidade do relógio da máquina host e 800 MHZ, você pode descobrir o valor percentual que corresponde a 800 MHZ.

Eu espero que isso ajude.

Boa sorte.

Seif
fonte
9

No VMWare ESX e ESXi, você pode criar um pool de recursos e limitar os recursos da CPU para esse pool. Isso permitiria limitar a velocidade da CPU de qualquer sistema criado nesse pool de recursos.

LeoB
fonte
Eu li sobre a opção de pool de recursos e pensei que ela se aplicava ao player. Infelizmente, este não é o caso. E o ESX / ESxi não é gratuito ... Mas posso tentar o teste e, se ele realmente funcionar, investigá-lo um pouco mais.
RCC
6
O ESXi é gratuito. (e mais alguns personagens ...)
Tarnay Kálmán
Really? For some reason I did not think it was. But I stand corrected! Thanks very much for pointing that out.
RCC
6

Compilado e usado: cpulimit, que funcionou como um encanto para diminuir a velocidade da VM.

Nicolas Modrzyk
fonte
2

Embora eu não seja especialista em todas as diferentes tecnologias de virtualização, acho improvável que você encontre essa configuração. No entanto, você encontrará configurações (pelo menos no MS hyper-V) que permitem limitar uma máquina virtual a uma porcentagem das ações gerais das máquinas host. Portanto, se você tiver um host de 8 núcleos em execução em 2 GHz, tente limitar a máquina virtual do cliente a um núcleo e não mais que 45% do núcleo.

No entanto, isso seria muito grosseiro e inadequado se você estiver tentando testar loops de temporização ou algo em que a velocidade real do processador entra em jogo.

Knox
fonte
Eu vi alguns programas que fazem isso - ou seja, limitam a porcentagem de uso da CPU por processo - mas só viram as opções do Linux. Concedido, eu não olhei muito para eles. Se a solução que estou tentando, conforme descrito em minha resposta ao MaxMackie, não funcionar, analisarei mais essas opções.
RCC
Sim, isso pode ter um efeito muito ruim nos intervalos de tempo. Tudo depende se ele roda em velocidade máxima de até 45% e depois corta, ou se ele tenta realmente executar em 45%.
Zan Lynx
2

--cpuexecutioncap <1-100>: Essa configuração controla quanto tempo de CPU uma CPU virtual pode usar. Um valor de 50 implica que uma única CPU virtual pode usar até 50% de uma única CPU host.

Oh Nah
fonte
1
Mais informações tornariam essa resposta aceitável.
Ramhound
1

Posso confirmar que isso não é suportado no VirtualBox. No entanto, a documentação parece duvidosa se o VMware pode ou não fazer isso.

EDIT: Para VMware: "Isso não é possível com os produtos Player e Server, mas acredito que esteja no ESXi (o produto gratuito" bare-metal hypervisor ") gratuito e nos produtos pagos, como o VMWare Workstation".

n0pe
fonte
Posso confirmar isso também - configurei tudo no VirtualBox e descobri isso. Atualmente, estou usando o VMware e tentei modificar o arquivo config.ini para limitar o host.cpukHz a 800000. Isso parece fazer com que a máquina virtual pense que a CPU MHz é 800. Não tenho certeza se isso realmente fará o que quero isso, mas é o que eu espero. Idéias?
RCC
Pelo que vi, isso deve funcionar. Apenas certifique-se de definir host.noTSC = "TRUE" no mesmo arquivo de configuração. Isso regula o relógio da CPU para garantir que não diminua a velocidade. Além disso, no sistema operacional convidado, vá para a guia Opções e verifique se a sincronização de horário entre a máquina virtual e o sistema operacional host está selecionada.
N0pe
Sim, eu tenho host.noTSc = "TRUE" também. Eu não tenho sido capaz de encontrar onde habilitar a sincronização de tempo entre o vm eo anfitrião no jogador vmware embora ...
RCC
Tenho certeza de que você tem que estar em execução no sistema operacional convidado
n0pe
1

Você pode simular isso com a fixação da CPU. Em seguida, crie alguns processos vinculados à CPU fixados na mesma CPU. A velocidade estimada da CPU é (velocidade real da CPU / número de processos).

Alguns softwares de limitação de recursos permitem limitar as porcentagens de recursos. Isso tornaria mais fácil limitar a velocidade da CPU. Para fazer isso, você precisa desativar o acesso a recursos extras.

BillThor
fonte
0

No VirtualBOX, existe um controle deslizante no qual você pode configurar a% da CPU do host que a CPU convidada pode usar. Essa porcentagem se aplica a cada núcleo.

No VirtualBOX, não há como simular um núcleo múltiplo com velocidades diferentes em cada núcleo, apenas um controle deslizante para todos os núcleos.

Definir o controle deslizante em 50% fará com que os núcleos convidados sejam executados em 1/2 dos núcleos do host (por princípios básicos).

Portanto, se você possui um núcleo deca (10 núcleos) no host e um tri núcleo no convidado (três), e deseja que o convidado seja executado em X MHz enquanto o host é executado em Y MHz, ignore o número de núcleos para calcular a porcentagem.

A fórmula seria: Porcentagem = 100 * X / Y

Espero que isso também ajude outras pessoas que virão aqui no futuro.

Laura
fonte