Add a platform for Performance Co-Pilot (PCP) metrics
This introduces an initial platform for extracting metrics
using the PCP performance metrics API - PMAPI(3). It can
be used via the --enable-pcp=yes configure option.
So far I've added support for live localhost metrics only,
and only using pre-defined metrics already found in htop.
If available, all sampling is performed by pmcd(1) - else,
we fallback to htop doing the metric sampling itself (all
below the PMAPI). When pmcd is used, it may be configured
to run children with elevated privileges, so htop does not
need to be setuid (authentication with pmcd is available).
Additionally, the PMAPI allows us to support archives (for
historical analysis and for automated regression tests in
htop). We'll need platform-specific command line argument
additions, which isn't yet feasible in htop (not difficult
to add though).
The goal of this first version is minimal impact in terms
of modifying the htop codebase, to introduce key ideas in
PCP (metric namespace, metadata, APIs and so on) and give
us something to discuss, experiment with and build on.
2021-02-17 03:43:56 +00:00
|
|
|
#ifndef HEADER_PCPProcessList
|
|
|
|
#define HEADER_PCPProcessList
|
|
|
|
/*
|
|
|
|
htop - PCPProcessList.h
|
|
|
|
(C) 2014 Hisham H. Muhammad
|
|
|
|
Released under the GNU GPLv2, see the COPYING file
|
|
|
|
in the source distribution for its full text.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
|
|
|
#include "Hashtable.h"
|
|
|
|
#include "ProcessList.h"
|
|
|
|
#include "pcp/Platform.h"
|
|
|
|
#include "UsersTable.h"
|
2021-02-22 05:45:44 +00:00
|
|
|
#include "zfs/ZfsArcStats.h"
|
Add a platform for Performance Co-Pilot (PCP) metrics
This introduces an initial platform for extracting metrics
using the PCP performance metrics API - PMAPI(3). It can
be used via the --enable-pcp=yes configure option.
So far I've added support for live localhost metrics only,
and only using pre-defined metrics already found in htop.
If available, all sampling is performed by pmcd(1) - else,
we fallback to htop doing the metric sampling itself (all
below the PMAPI). When pmcd is used, it may be configured
to run children with elevated privileges, so htop does not
need to be setuid (authentication with pmcd is available).
Additionally, the PMAPI allows us to support archives (for
historical analysis and for automated regression tests in
htop). We'll need platform-specific command line argument
additions, which isn't yet feasible in htop (not difficult
to add though).
The goal of this first version is minimal impact in terms
of modifying the htop codebase, to introduce key ideas in
PCP (metric namespace, metadata, APIs and so on) and give
us something to discuss, experiment with and build on.
2021-02-17 03:43:56 +00:00
|
|
|
|
|
|
|
typedef enum CPUMetric_ {
|
|
|
|
CPU_TOTAL_TIME,
|
|
|
|
CPU_USER_TIME,
|
|
|
|
CPU_SYSTEM_TIME,
|
|
|
|
CPU_SYSTEM_ALL_TIME,
|
|
|
|
CPU_IDLE_ALL_TIME,
|
|
|
|
CPU_IDLE_TIME,
|
|
|
|
CPU_NICE_TIME,
|
|
|
|
CPU_IOWAIT_TIME,
|
|
|
|
CPU_IRQ_TIME,
|
|
|
|
CPU_SOFTIRQ_TIME,
|
|
|
|
CPU_STEAL_TIME,
|
|
|
|
CPU_GUEST_TIME,
|
|
|
|
CPU_GUESTNICE_TIME,
|
|
|
|
|
|
|
|
CPU_TOTAL_PERIOD,
|
|
|
|
CPU_USER_PERIOD,
|
|
|
|
CPU_SYSTEM_PERIOD,
|
|
|
|
CPU_SYSTEM_ALL_PERIOD,
|
|
|
|
CPU_IDLE_ALL_PERIOD,
|
|
|
|
CPU_IDLE_PERIOD,
|
|
|
|
CPU_NICE_PERIOD,
|
|
|
|
CPU_IOWAIT_PERIOD,
|
|
|
|
CPU_IRQ_PERIOD,
|
|
|
|
CPU_SOFTIRQ_PERIOD,
|
|
|
|
CPU_STEAL_PERIOD,
|
|
|
|
CPU_GUEST_PERIOD,
|
|
|
|
CPU_GUESTNICE_PERIOD,
|
|
|
|
|
|
|
|
CPU_FREQUENCY,
|
|
|
|
|
|
|
|
CPU_METRIC_COUNT
|
|
|
|
} CPUMetric;
|
|
|
|
|
|
|
|
typedef struct PCPProcessList_ {
|
|
|
|
ProcessList super;
|
|
|
|
double timestamp; /* previous sample timestamp */
|
|
|
|
pmAtomValue* cpu; /* aggregate values for each metric */
|
|
|
|
pmAtomValue** percpu; /* per-processor values for each metric */
|
|
|
|
pmAtomValue* values; /* per-processor buffer for just one metric */
|
2021-02-22 05:45:44 +00:00
|
|
|
ZfsArcStats zfs;
|
Add a platform for Performance Co-Pilot (PCP) metrics
This introduces an initial platform for extracting metrics
using the PCP performance metrics API - PMAPI(3). It can
be used via the --enable-pcp=yes configure option.
So far I've added support for live localhost metrics only,
and only using pre-defined metrics already found in htop.
If available, all sampling is performed by pmcd(1) - else,
we fallback to htop doing the metric sampling itself (all
below the PMAPI). When pmcd is used, it may be configured
to run children with elevated privileges, so htop does not
need to be setuid (authentication with pmcd is available).
Additionally, the PMAPI allows us to support archives (for
historical analysis and for automated regression tests in
htop). We'll need platform-specific command line argument
additions, which isn't yet feasible in htop (not difficult
to add though).
The goal of this first version is minimal impact in terms
of modifying the htop codebase, to introduce key ideas in
PCP (metric namespace, metadata, APIs and so on) and give
us something to discuss, experiment with and build on.
2021-02-17 03:43:56 +00:00
|
|
|
} PCPProcessList;
|
|
|
|
|
|
|
|
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidMatchList, uid_t userId);
|
|
|
|
|
|
|
|
void ProcessList_delete(ProcessList* pl);
|
|
|
|
|
|
|
|
void ProcessList_goThroughEntries(ProcessList* super, bool pauseProcessUpdate);
|
|
|
|
|
|
|
|
#endif
|