如何在带有两个CPU的VirtualBox的Vagrant中创建VM?


70

在Windows 7 64位上尝试启动VM(Ubuntu 32位)。尽管modify vm在Vagrantfile中添加了命令,但我无法使我的VM显示两个内核。我的Vagrant版本是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

使用这个Vagrantfile,我发出vagrant up命令。然后我发出vagrant ssh以下lscpu收益:

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

我认为CPU应该显示2,因此我的VM现在只有一个CPU。运行时如何显示2个CPU lscpu


所有vb。*选项都在此处记录
Geremia

Answers:


79

添加vb.customize ["modifyvm", :id, "--ioapic", "on"]config.vm.provider您的Vagrantfile中块。

查看其中提到的VirtualBox文档

“请注意,对于64位客户机操作系统,尤其是Windows Vista,需要启用I / O APIC;如果要在虚拟机中使用多个虚拟CPU,则也需要启用I / O APIC。”


我有一些问题。当我尝试使用ioapic启用我的VM时,向我显示一条错误消息……
Robert

我在一个CentOS 6.5盒子上尝试了上面的方法,但是lscpu仍然显示1个CPU。然后,我未成功尝试以下操作:vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
Kevin Meredith 2014年

2
@ Rob3:首先阅读该错误消息。错误消息没有说“它坏了”。它旨在帮助您了解问题所在。因此,最重要的错误消息是阅读它。同样,当您寻求帮助并且不发布错误消息时,没有人会尝试帮助您。
David FerenczyRogožan2014年

@KevinMeredith:您的主机(物理)系统有多少个CPU?
David FerenczyRogožan2014年

1
@TopherHunt-是的,很好的文章,如果在Windows上还记得禁用Hyper-V!我在文章中添加了评论
brianlmerritt

33

如果您正在使用Oracle Virtualbox运行无业游民,则最常见的问题是Windows 7、8或10中的Hyper-V。这将限制您使用32位和一个CPU。

运行或搜索“ Windows功能”,然后选择“打开或关闭Windows功能”。

在复选框中,确保Hyper-V已关闭-您无法通过Microsoft Hyper-V对其启用Virtualbox的VT-x。

然后,您可以使用以下命令使Vagrantfile引导非常用户友好:

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

假设您要运行两个内核,而内存只有2 Gig以上

ps-不要忘记添加端口转发。对于PHPStorm(xdebug,mysql和web),我使用:

  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

有什么方法可以动态查询主机的可用cpus和内存并根据条件进行分配,即,如果host_cpus = 16则v.cpus = 8?我想在两个不同的系统上分配一半的cpus和ram,即一个是8 cpus&8gb ram,另一个是16 cpus,和16gb ram。
radtek

1
@radtek:都是红宝石,因此至少您可以放入一段代码来检测CPU计数(例如stackoverflow.com/questions/891537/…)并将其减半。
克里斯·摩根

谢谢,我认为会有更本机的检查方法。
radtek '16

6

似乎您没有提到您使用的是哪个提供程序。从Vagrant 1.7开始,许多VM提供程序(例如VirtualBox,HyperV)在Vagrantfile中支持以下配置:

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

流浪汉文档中查看您正在使用的特定提供程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.