OpenSolaris

You are not signed in. Sign in or register.

OpenSolaris Project: CPU Observability

View the leaders for this project
Project Observers

Endorsing communities

HPC Developer
Performance

CPU Observability

System administrators, software developers and advanced system users require detailed knowledge about CPU resources of their systems. Different consumers require different type of information which may be used for

  • System diagnostics
  • Performance tuning
  • Licensing
  • Provisioning
  • Power management

Currently Solaris provide the information with various ad hoc tools and libraries (psrinfo(1M), prtconf (1M) and /dev/cpu/self). The new Processor Group infrastructure provides no user-land visibility at all. This makes it hard for application developers to optimize for specific sharing relationships on their hardware.

I would like to propose an OpenSolaris project aimed at providing observability into CPU-related information. The objective is to provide user (and, potentially, kernel) level APIs and tools that will expose detailed information about CPus and their components (like caches, pipelines, etc.)

Criteria

  • Should be a stable interface
  • Should be useful for existing and forthcoming CPU architectures
  • Should co-exist with virtualization

What information to export

There are two approaches -

  • Export everything – may be useful for HPC/Java and alike. This encourages non-portable applications.
  • Export abstractions. It is not clear what are useful abstractions that can be utilized by portable applications.

Ways to present the information

  • Library/API
  • Using kstat framework (with possible extensions)
  • Use file-system based presentation

Areas

Exporting cpuid information

  • cpu_info kstats export a lot
  • cpuid is user-land instruction so, probably, nothing special should be done.
  • may use public domain intereters for cpuid

Notes

  • Because of virtualization less information may be better than more
  • We do not want to export low-level detail that encourage bad programming
  • would like to encourage descriptive APIs
  • Some consumers (e.g. java) may still need some low -evel details
  • It would be nice to export useful abstractions
  • Can use linux-like /proc/cpuinfo since it is available from brandz and we can get it for free.
  • For cpuid we can get raw format output and some GNU variant for full version.
  • It is nice to modify mpstat to show per core/per cache info
    • We can do this using existing cpu_info kstat framefork; may need to export cache id as well – it is available.
  • Is any of this information useful to export via SNMP MIB?