# File lib/new_relic/agent/system_info.rb, line 37
      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
            }
            # in case those don't work, try backup values
            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

          # give nils for obviously wrong values
          @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