Retrospective analysis in htop

This project involves advancing the performance analysis capabilities provided by the PCP back end in the classic htop utility, pcp-htop .

Our new contributor will:

  1. Implement PCP archive support for historical analysis so that htop can report both live data (as today) and historical system activity (not yet possible) - e.g. displaying system statistics from half an hour ago, yesterday, or even weeks ago. The PCP Performance Metrics API provides the retrospective analysis capabilities (on disk storage and query interfaces) we will make use of to provide this functionality.
  2. A new user interface (Screen) in htop for interactively moving the sample time forward or backward and changing the sample interval will be designed and implemented.


Project size: This is a medium sized project (175 hours).

Expected results: New code (C language) will be implemented and submitted to be included in htop that allows the backend platform for PCP to take advantage of PMAPI features not yet utilized in the current pcp-htop code.

Prerequisite knowledge: C programming, ncurses library knowledge a plus.

Skill level: Intermediate

Mentors: Ryan Doyle <ryan@doylenet.net> , Nathan Scott <nathans@redhat.com>


Native sysstat PCP tooling

The project will be a collaboration between PCP and sysstat developers to improve the tooling for users of both projects.

Our new contributor will:

  1. Implement support in the sysstat data collector sadc for (optionally) writing PCP archives instead of the traditional sysstat on-disk format. This feature will allow PCP tools like pmchart , pmie , pmrep and many others to directly analyze data generated by sadc. sysstat users will also be able to visualize their data in Grafana as its being written to disk, using the grafana-pcp module.
  2. Make use of the PMAPI to allow the sysstat analysis utilities, namely cifsiostat , iostat , mpstat , pidstat , and tapestat to access this historical data. Code changes to each of these utilities will be required to implement the PCP archive support using the PCP performance metrics API .


Project size: This is a large project (350 hours).

Expected results: After cross-project collaboration and design, extensions to the sysstat collector and analysis utilities will be designed and implemented, unit tests and documentation will be written.

Prerequisite knowledge: C programming, operating systems

Skill level: Intermediate

Mentors: Sebastien Godard <sysstat@orange.fr> , Steve Kay <stevekay@gmail.com> , Nathan Scott <nathans@redhat.com>


Generalized columns in htop

The htop utility recently acquired the ability to display multiple Tabs in its user interface. Currently these display only process information. The aim of this project is to support generalized Tabs, where information beyond processes can be displayed in columns.

Our new contributor will:

  1. Extend htop Tabs to provide a more generalized Tab and Columns concept, such that top-most resource utilization for system objects other than processes can be displayed.
  2. The addition of a Tab for Linux cgroup metrics would be an excellent way to visually demonstrate this idea.
  3. Extend pcp-htop tabs to allow loading at runtime from (text-based) configuration files. This is conceptually similar to the dynamic Meter and Column configuration available in htop today.
  4. The ability to configure a dynamic Tab for PCP eBPF metrics would be an excellent outcome.


Project size: This is a medium sized project (175 hours).

Expected results: New code (C language) will be implemented that provides dynamically configurable tabs in htop.

Prerequisite knowledge: C programming, ncurses library knowledge a plus.

Skill level: Intermediate

Mentors: Benny Baumann <benbe@geshi.org> , Nathan Scott <nathans@redhat.com> , Andreas Gerstmayr <agerstmayr@redhat.com>


Query language extension and new functions

Performance Co-Pilot timeseries are series of time-stamped values gathered centrally from hosts making performance data available. This data could be gathered for many metrics, at high frequency, and from many hosts. It is potentially high volume data, and searching it efficiently (querying) at speed is a non-trivial problem.

The Performance Co-Pilot timeseries query language is designed to allow fast querying based on metric names and labels. A command line utility and a REST API are available from pmseries and the pmproxy daemon. The existing query language implementation is now maturing, however there are some important new functions needed along with related grammar extensions.

This project will extend the time series query language with:

  1. grammar extensions supporting scalar operands in expressions, either as literal constants or from functions returning a scalar result.
  2. additional functions complementing existing functions to operate across both the time domain (with one scalar result per metric instance) and across instance domains (with a single vector result).
  3. new statistical functions such as top_k(expr) and nth_percentile(expr, n) and rolling_avg(expr, n).
  4. new functions for subsampling and interpolation of vector operands to match time series samples with other vector operands in an expression.


Project size: This is a large project (350 hours).

Expected results: Our new contributor will extend their C language programming skills, learn about the yacc language parsing tool, performance analysis with Performance Co-Pilot and the Redis distributed data store. They will also collaborate and participate in a vibrant open-source environment with very experienced engineers and performance analysts.

Prerequisite knowledge: C programming.

Skill level: Advanced

Mentors: Kyoma Zhang <kyomazhang@gmail.com> , Nathan Scott <nathans@redhat.com>


Graphing in htop

Using braille characters from Unicode it is possible to produce beautiful graphs for console tools like the classic htop utility. Prototype implementations have shown this is feasible but substantial (re)work is needed to make this production ready.

Our new contributor will:

  1. Work with htop community developers to implement, test and finally merge this much sought-after feature.
  2. Following a review of the existing implementations, a new design will be produced and implemented pulling the best of the existing ideas into a robust, complete version.


Project size: This is a medium sized project (175 hours).

Expected results: Beautiful graphs for the graph meter mode of htop.

Prerequisite knowledge: C programming, ncurses library knowledge a plus.

Skill level: Intermediate

Mentors: Benny Baumann <benbe@geshi.org> , Nathan Scott <nathans@redhat.com>