2015-10-19 3 views
3

Я хочу, чтобы мой брандмауэр автоматически устанавливал CPU и RAM на основе спецификаций хоста.Vagrant - как обнаружить Windows Host 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 

так что вы можете изменить значения этих умолчанию, но, к сожалению, окна не обеспечивает простые в использовании команды для извлечения этой информации

Теперь, если вы хотите сделать это самостоятельно, должно быть возможно, посмотрите на команду wmic, вы можете получить много и с небольшим количеством разбор вы должны иметь необходимую информацию - например

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

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

вы также можете посмотреть на systeminfo это довольно многословное и локал конкретные поэтому может быть более трудно разобрать

1

Чтобы объединить вышеуказанные ответы на полный пример, ваш бродяга файл должен содержать этот раздел продовольствования:

Обратите внимание на mem_ratio и cpu_exec_cap переменные, которые можно использовать для настройки хау большая часть хостов RAM и процессорных циклов выделяют VM.

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