def self.get_processor_info
if @processor_info.nil?
if darwin?
@processor_info = {
:num_physical_packages => sysctl_value('hw.packages').to_i,
:num_physical_cores => sysctl_value('hw.physicalcpu_max').to_i,
:num_logical_processors => sysctl_value('hw.logicalcpu_max').to_i
}
if @processor_info[:num_physical_cores] <= 0
@processor_info[:num_physical_cores] = sysctl_value('hw.physicalcpu').to_i
end
if @processor_info[:num_logical_processors] <= 0
@processor_info[:num_logical_processors] = sysctl_value('hw.logicalcpu').to_i
end
if @processor_info[:num_logical_processors] <= 0
@processor_info[:num_logical_processors] = sysctl_value('hw.ncpu').to_i
end
elsif linux?
cpuinfo = proc_try_read('/proc/cpuinfo')
@processor_info = cpuinfo ? parse_cpuinfo(cpuinfo) : {}
elsif bsd?
@processor_info = {
:num_physical_packages => nil,
:num_physical_cores => nil,
:num_logical_processors => sysctl_value('hw.ncpu').to_i
}
end
@processor_info.keys.each do |key|
value = @processor_info[key]
if value.is_a?(Numeric) && value <= 0
@processor_info[key] = nil
end
end
end
@processor_info
rescue
{}
end