Method: CPU.processors

Defined in:
lib/cpu.rb

.processorsObject Also known as: to_a

Return an array of all Processor instances for this machine.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/cpu.rb', line 41

def processors
  cpu_cores = {}
  cpuinfos = File.read('/proc/cpuinfo').chomp.split(/^$/)
  processor_ids =
    cpuinfos.map { |l| l[/processor\s*:\s*(\d+)/, 1].to_i rescue nil }
  core_ids = cpuinfos.map { |l| l[/core id\s*:\s*(\d+)/, 1].to_i rescue nil }
  processor_ids.zip(core_ids) do |processor_id, core_id|
    cpu_cores[processor_id] = core_id
  end
  processors = Dir.open('/dev/cpu').inject([]) do |ps, processor_id|
    processor_id =~ /\A\d+\Z/ or next ps
    ps << processor_id.to_i
  end
  processors.extend Tins::UniqBy
  processors.sort!
  @num_processors = processors.size
  @num_cores      = cpu_cores.invert.size
  processors.map! do |processor_id|
    Processor.new(processor_id, cpu_cores[processor_id])
  end
end