Extend the io.systemd.Basic metric families with host-level runtime metrics: cumulative per-state CPU seconds, memory in use (MemTotal minus MemAvailable), swap in use, the kernel's 10s pressure stall averages (cpu/memory/io x some/full). Partitions and stacked devices are excluded from the disk counters, since their traffic is already accounted for in the parent device. Also extend the TEST-74 report subtest with checks for the new metrics. Network metrics are not added, because the service runs with PrivateNetwork=yes, and it doesn't make sense to report stats for 'lo'. After some back-and-forth, I settled on "CPUUsage". We use this scheme of capitalization in other metric family names: "IPv4Public", "IPv6Public", IPv4AddressState", "IPv6AddressState", "OSRelease" "SMBIOS" "BootID", "CPUsOnline", "MachineID", "MachineInfo", "OSRelease", "SMBIOS.SystemManufacturer", "TPM2.Manufacturer", "TPM2.VendorString", "IOReadBytes", "IOReadOperations", "CGroup". The exception is "io.systemd.cgroup.CpuUsage". I think we should treat that one as a mistake and consider changing it to conform.
34 lines
876 B
C
34 lines
876 B
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
#pragma once
|
|
|
|
#include "forward.h"
|
|
|
|
int procfs_get_pid_max(uint64_t *ret);
|
|
int procfs_get_threads_max(uint64_t *ret);
|
|
|
|
int procfs_tasks_set_limit(uint64_t limit);
|
|
int procfs_tasks_get_current(uint64_t *ret);
|
|
|
|
nsec_t procfs_ticks_to_nsec(uint64_t ticks);
|
|
int procfs_cpu_get_usage(nsec_t *ret);
|
|
|
|
typedef struct ProcfsCpuTicks {
|
|
uint64_t user;
|
|
uint64_t nice;
|
|
uint64_t system;
|
|
uint64_t idle;
|
|
uint64_t iowait;
|
|
uint64_t irq;
|
|
uint64_t softirq;
|
|
uint64_t steal;
|
|
} ProcfsCpuTicks;
|
|
|
|
int procfs_cpu_get_ticks(ProcfsCpuTicks *ret);
|
|
|
|
int procfs_memory_get(uint64_t *ret_total, uint64_t *ret_used);
|
|
static inline int procfs_memory_get_used(uint64_t *ret) {
|
|
return procfs_memory_get(NULL, ret);
|
|
}
|
|
|
|
int convert_meminfo_value_to_uint64_bytes(const char *s, uint64_t *ret);
|