blob: 03d54b186791b680bb8bfbc9298d0261efd6a047 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.kernel;
using zx;
// The zx library does not include zx_info_kmem_stats_t, so this table is mirroring it.
// See zircon/system/public/zircon/syscalls/object.h for more details.
table MemoryStats {
1: uint64 total_bytes;
2: uint64 free_bytes;
3: uint64 wired_bytes;
4: uint64 total_heap_bytes;
5: uint64 free_heap_bytes;
6: uint64 vmo_bytes;
7: uint64 mmu_overhead_bytes;
8: uint64 ipc_bytes;
9: uint64 other_bytes;
};
// Similarly, this table mirrors zx_info_cpu_stats_t.
// See zircon/system/public/zircon/syscalls/object.h for more details.
table PerCpuStats {
1: uint32 cpu_number;
2: uint32 flags;
3: zx.duration idle_time;
4: uint64 reschedules;
5: uint64 context_switches;
6: uint64 irq_preempts;
7: uint64 yields;
8: uint64 ints;
9: uint64 timer_ints;
10: uint64 timers;
11: uint64 page_faults;
12: uint64 exceptions;
13: uint64 syscalls;
14: uint64 reschedule_ipis;
15: uint64 generic_ipis;
};
struct CpuStats {
/// This is the total number of CPUs on the actual device. This may not be the same as the length
/// of the vector `per_cpu_stats` as it is possible the underlying syscall will not return stats
/// for all CPUs.
uint64 actual_num_cpus;
vector<PerCpuStats>:zx.MAX_CPUS? per_cpu_stats;
};
/// Protocol for providing kernel stats. This is roughly a wrapper around zx_object_get_info for
/// the ZX_INFO_KMEM_STATS and ZX_INFO_CPU_STATS topics, which today require the very powerful
/// 'Root Resource' capability to obtain. Instead of vending out that capability, programs that
/// just want stats should use this service instead. If for some reason the protocol fails to
/// retrieve stats, which will be an un-recoverable error, it will close the channel.
[Discoverable]
protocol Stats {
GetMemoryStats() -> (MemoryStats stats);
GetCpuStats() -> (CpuStats stats);
};