2015-10-19 19 views
3

我想我的vagrantfile根據主機規格自動設置CPU和RAM。Vagrant - 如何檢測Windows主機RAM和CPU

我發現這個片斷:

config.vm.provider "virtualbox" do |v| 
     host = RbConfig::CONFIG['host_os'] 
     # Give VM 1/4 system memory & access to all cpu cores on the host 
     if host =~ /darwin/ 
     cpus = `sysctl -n hw.ncpu`.to_i 
     # sysctl returns Bytes and we need to convert to MB 
     mem = `sysctl -n hw.memsize`.to_i/1024/1024/4 
     elsif host =~ /linux/ 
     cpus = `nproc`.to_i 
     # meminfo shows KB and we need to convert to MB 
     mem = `grep 'MemTotal' /proc/meminfo | sed -e 's/MemTotal://' -e 's/ kB//'`.to_i/1024/4 
     else # sorry Windows folks, I can't help you 
     cpus = 2 
     mem = 1024 
     end 

     v.customize ["modifyvm", :id, "--memory", mem] 
     v.customize ["modifyvm", :id, "--cpus", cpus] 
end 

但是,由於它不這樣做的Windows(它設置默認值2和1024來代替)。

任何人都有任何線索如何做到這一點?

回答

3

我設法弄清楚它我們和它整合變成Git repo

代碼:

cpus = `wmic cpu get NumberOfCores`.split("\n")[2].to_i 
mem = `wmic OS get TotalVisibleMemorySize`.split("\n")[2].to_i/1024 /4 
1

它的存在在你下載的腳本:

對不起Windows操作系統的用戶,我不能幫你

else # sorry Windows folks, I can't help you 
    cpus = 2 
    mem = 1024 
    end 

所以你可以改變這些默認值,但遺憾的是Windows不提供易於使用的命令來檢索這些信息

現在,如果你想自己做,它應該是可能的,看看wmic命令,你可以得到很多,而且很少解析你應該有必要的信息 - 例如

C:\Users\fhenri>wmic os get freephysicalmemory 
FreePhysicalMemory 
1564244 

C:\Users\fhenri>wmic.exe cpu get NumberOfCores 
NumberOfCores 
1 

你也可以看看systeminfo這是相當冗長和現場專用的,所以可能比較難分析

1

爲了統一上述答案爲一個完整的例子,你流浪的文件應包含此配置部分:

注意mem_ratiocpu_exec_cap變量,你可以用它來調整如何大部分主機RAM和CPU週期分配給虛擬機。

config.vm.provider "virtualbox" do |v| 
    mem_ratio = 3/4 
    cpu_exec_cap = 75 
    host = RbConfig::CONFIG['host_os'] 
    # Give VM 3/4 system memory & access to all cpu cores on the host 
    if host =~ /darwin/ 
    cpus = `sysctl -n hw.ncpu`.to_i 
    # sysctl returns Bytes and we need to convert to MB 
    mem = `sysctl -n hw.memsize`.to_i/1024^2 * mem_ratio 
    elsif host =~ /linux/ 
    cpus = `nproc`.to_i 
    # meminfo shows KB and we need to convert to MB 
    mem = `grep 'MemTotal' /proc/meminfo | sed -e 's/MemTotal://' -e 's/ kB//'`.to_i/1024 * mem_ratio 
    else # Windows folks 
    cpus = `wmic cpu get NumberOfCores`.split("\n")[2].to_i 
    mem = `wmic OS get TotalVisibleMemorySize`.split("\n")[2].to_i/1024 * mem_ratio 
    end 

    puts "Provisioning VM with #{cpus} CPU's (at #{cpu_exec_cap}%) and #{mem/1024} GB RAM." 

    v.customize ["modifyvm", :id, "--memory", mem] 
    v.customize ["modifyvm", :id, "--cpus", cpus] 

    v.customize ["modifyvm", :id, "--cpuexecutioncap", cpu_exec_cap] 
end