Modern computers are ever increasing in performance and capacity. This matters little if that increasing capacity is not well utilized. Following is a description of the motivation and work behind "curt," a new tool for Linux systems for measuring and breaking down system utilization by process, by task, and by CPU using the perf command's Python scripting capabilities.

I had the privilege of presenting this topic at Texas Linux Fest 2018[1], and here I've gone a bit deeper into the details, included links to further information, and expanded the scope of my talk.

System utilization

In discussing computation, let's begin with some assertions:

  1. Every computational system is equally fast at doing nothing.
  2. Computational systems were created to do things.
  3. A computational system is better at doing things when it is doing something than when it is doing nothing.

Modern computational systems have many streams of execution:

  • Often, very large systems are created by literally wiring together smaller systems. At IBM, these smaller systems are sometimes called CECs (short for Central Electronics Complexes and pronounced "keks").
  • There are multiple sockets for processor modules in each system.
  • There are sometimes multiple chips per socket (in the form of dual-chip modules—DCMs—or multi-chip modules—MCMs).
  • There are multiple cores per chip.
  • There are multiple threads per core.

In sum, there are potentially thousands of execution threads across a single computational system.

Ideally, all these execution streams are 100% busy doing useful work. One measure of utilization for an individual execution stream (CPU thread) is the percentage of time that thread has tasks scheduled and running. (Note that I didn't say "doing useful

Read more from our friends at Opensource.com