Wie kann ich mit VirtualBox eine VM in Vagrant mit zwei CPUs erstellen?

70

Unter Windows 7 versucht 64 Bit, eine VM zu starten (Ubuntu 32 Bit). Ich habe Probleme, meine VM dazu zu bringen, zwei Kerne modify vmanzuzeigen , obwohl ich den Befehl in meiner Vagrant-Datei hinzugefügt habe. Meine Vagrant-Version ist 1.2.2.

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "precise32"
  config.vm.box_url = "http://files.vagrantup.com/precise32.box"

  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]   
  end  
end

Mit dieser Vagrant-Datei gebe ich den vagrant upBefehl aus. Dann gebe ich aus, vagrant sshgefolgt von lscpuwelchen Erträgen:

Architecture:          i686
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Stepping:              9
CPU MHz:               2565.513
BogoMIPS:              5131.02
L1d cache:             32K
L1d cache:             32K
L2d cache:             6144K

Ich denke, CPU (s) sollten 2 anzeigen, daher hat meine VM derzeit nur eine CPU. Wie kann ich 2 CPUs anzeigen lassen, wenn ich laufe lscpu?

Nikil
quelle
Alle vb. * -Optionen sind hier dokumentiert .
Geremia

Antworten:

79

Fügen Sie vb.customize ["modifyvm", :id, "--ioapic", "on"]dem config.vm.providerBlock in Ihrer Vagrant-Datei hinzu.

In der VirtualBox- Dokumentation wird Folgendes erwähnt:

"Hinweis Das Aktivieren des E / A-APIC ist für 64-Bit-Gastbetriebssysteme erforderlich, insbesondere für Windows Vista. Dies ist auch erforderlich, wenn Sie mehr als eine virtuelle CPU in einer virtuellen Maschine verwenden möchten."

Nikil
quelle
Ich habe einige Probleme damit. Wenn ich versuche, ioapic zu aktivieren, zeigt meine VM eine Fehlermeldung an ...
Robert
Ich habe das oben genannte auf einer CentOS 6.5Box versucht , aber lscpuimmer noch 1 CPU gezeigt. Dann habe ich folgendes erfolglos versucht:vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
Kevin Meredith
2
@ Rob3: Beginnen Sie damit, dass Sie diese Fehlermeldung gelesen haben. Die Fehlermeldung besagt nicht, dass "es kaputt ist". Es soll Ihnen helfen zu verstehen, was falsch ist. Das Wichtigste bei einer Fehlermeldung ist also, sie zu lesen. Auch wenn Sie um Hilfe bitten und Ihre Fehlermeldung nicht veröffentlichen, wird niemand versuchen, Ihnen zu helfen.
David Ferenczy Rogožan
@ KevinMeredith: Wie viele CPUs hat Ihr Host (physisches) System?
David Ferenczy Rogožan
1
@TopherHunt - ja, guter Artikel und wenn unter Windows auch daran gedacht, Hyper-V zu deaktivieren! Ich habe einen Kommentar zu dem Artikel hinzugefügt
Brianlmerritt
33

Wenn Sie Vagrant mit Oracle Virtualbox ausführen, tritt Hyper-V unter Windows 7, 8 oder 10 am häufigsten auf. Dadurch sind Sie auf 32 Bit und eine CPU beschränkt.

Führen Sie "Windows-Funktionen" aus oder suchen Sie nach "Windows-Funktionen aktivieren oder deaktivieren".

Stellen Sie in den Kontrollkästchen sicher, dass Hyper-V deaktiviert ist. Sie können VT-x für Virtualbox nicht aktivieren, wenn Microsoft Hyper-V es blockiert.

Dann können Sie Ihren Vagrantfile-Boot sehr benutzerfreundlich gestalten mit:

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2404"
    vb.cpus = "2"
  end

Angenommen, Sie möchten zwei Kerne und etwas mehr als 2 Gig Speicher haben

ps - vergessen Sie nicht, Ihre Portweiterleitung hinzuzufügen. Für PHPStorm (xdebug, mysql und web) verwende ich:

  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "forwarded_port", guest: 3306, host: 3306
  config.vm.network "forwarded_port", guest: 9000, host: 9000
brianlmerritt
quelle
Gibt es eine Möglichkeit, den verfügbaren CPU und Speicher des Host-Computers dynamisch abzufragen und basierend auf einer Bedingung zuzuweisen, dh wenn host_cpus = 16, dann v.cpus = 8? Ich wollte die Hälfte meines CPU und RAM auf zwei verschiedenen Systemen zuweisen, dh eines ist 8 CPU und 8 GB RAM, das andere 16 CPU und 16 GB RAM.
Radtek
1
@radtek: Es ist alles rubinrot, also können Sie zumindest einfach einen Teil des Codes einfügen, um die CPU-Anzahl (z. B. stackoverflow.com/questions/891537/… ) zu ermitteln und zu halbieren.
Chris Morgan
Danke, ich dachte, es gäbe eine native Möglichkeit, dies zu überprüfen.
Radtek
6

Anscheinend haben Sie nicht erwähnt, welchen Anbieter Sie verwenden. Ab Vagrant 1.7 unterstützen viele VM-Anbieter (wie VirtualBox, HyperV) die folgende Konfiguration in Ihrer Vagrant-Datei:

config.vm.provider "virtualbox" do |v|
  v.memory = 1024
  v.cpus = 2
end

Überprüfen Sie den spezifischen Anbieter, den Sie verwenden, in der Vagrant-Dokumentation .

mehmet
quelle