The Pedigree Project 0.1
Metrics.cc
1/* Copyright (c) 2026, Pedigree Developers. SPDX-License-Identifier: ISC */
2#include "pedigree/kernel/Metrics.h"
3
4#if PEDIGREE_METRICS
5namespace Metrics {
6static_assert(__atomic_always_lock_free(sizeof(uint64_t), nullptr),
7 "Kernel metrics require lock-free 64-bit counters");
8CpuCounters counters[CpuAffinityMask::MaximumCpus] = {};
9
10bool snapshot(size_t cpu, Snapshot& result) {
11 if (cpu >= CpuAffinityMask::MaximumCpus) {
12 return false;
13 }
14 // Individual counters are atomic; collecting CPUs is not a global barrier.
15 for (size_t field = 0; field < Count; ++field) {
16 result.values[field] = __atomic_load_n(&counters[cpu].values[field], __ATOMIC_RELAXED);
17 }
18 return true;
19}
20} // namespace Metrics
21#endif