cgroupfs/
types.rs

1// Copyright (c) Facebook, Inc. and its affiliates.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use std::collections::BTreeSet;
16
17use serde::Deserialize;
18use serde::Serialize;
19
20#[derive(Default, Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
21pub struct CpuStat {
22    pub usage_usec: Option<u64>,
23    pub user_usec: Option<u64>,
24    pub system_usec: Option<u64>,
25    pub nr_periods: Option<u64>,
26    pub nr_throttled: Option<u64>,
27    pub throttled_usec: Option<u64>,
28}
29
30#[derive(Default, Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
31pub struct CpuMax {
32    /// -1 indicates "max"
33    pub max_usec: i64,
34    pub period_usec: u64,
35}
36
37#[derive(Default, Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
38pub struct IoStat {
39    pub rbytes: Option<u64>,
40    pub wbytes: Option<u64>,
41    pub rios: Option<u64>,
42    pub wios: Option<u64>,
43    pub dbytes: Option<u64>,
44    pub dios: Option<u64>,
45    pub cost_usage: Option<u64>,
46    pub cost_wait: Option<u64>,
47    pub cost_indebt: Option<u64>,
48    pub cost_indelay: Option<u64>,
49}
50
51#[derive(Default, Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
52pub struct MemoryStat {
53    pub anon: Option<u64>,
54    pub file: Option<u64>,
55    pub kernel: Option<u64>,
56    pub kernel_stack: Option<u64>,
57    pub slab: Option<u64>,
58    pub sock: Option<u64>,
59    pub shmem: Option<u64>,
60    pub zswap: Option<u64>,
61    pub zswapped: Option<u64>,
62    pub file_mapped: Option<u64>,
63    pub file_dirty: Option<u64>,
64    pub file_writeback: Option<u64>,
65    pub anon_thp: Option<u64>,
66    pub inactive_anon: Option<u64>,
67    pub active_anon: Option<u64>,
68    pub inactive_file: Option<u64>,
69    pub active_file: Option<u64>,
70    pub unevictable: Option<u64>,
71    pub slab_reclaimable: Option<u64>,
72    pub slab_unreclaimable: Option<u64>,
73    pub pgfault: Option<u64>,
74    pub pgmajfault: Option<u64>,
75    pub workingset_refault_anon: Option<u64>,
76    pub workingset_refault_file: Option<u64>,
77    pub workingset_activate_anon: Option<u64>,
78    pub workingset_activate_file: Option<u64>,
79    pub workingset_restore_anon: Option<u64>,
80    pub workingset_restore_file: Option<u64>,
81    pub workingset_nodereclaim: Option<u64>,
82    pub pgrefill: Option<u64>,
83    pub pgscan: Option<u64>,
84    pub pgsteal: Option<u64>,
85    pub pgactivate: Option<u64>,
86    pub pgdeactivate: Option<u64>,
87    pub pglazyfree: Option<u64>,
88    pub pglazyfreed: Option<u64>,
89    pub thp_fault_alloc: Option<u64>,
90    pub thp_collapse_alloc: Option<u64>,
91}
92
93#[derive(Default, Clone, PartialEq, Debug, Serialize, Deserialize)]
94pub struct PressureMetrics {
95    pub avg10: Option<f64>,
96    pub avg60: Option<f64>,
97    pub avg300: Option<f64>,
98    pub total: Option<u64>,
99}
100
101#[derive(Default, Clone, PartialEq, Debug, Serialize, Deserialize)]
102pub struct CpuPressure {
103    pub some: PressureMetrics,
104    pub full: Option<PressureMetrics>,
105}
106
107#[derive(Default, Clone, PartialEq, Debug, Serialize, Deserialize)]
108pub struct IoPressure {
109    pub some: PressureMetrics,
110    pub full: PressureMetrics,
111}
112
113#[derive(Default, Clone, PartialEq, Debug, Serialize, Deserialize)]
114pub struct MemoryPressure {
115    pub some: PressureMetrics,
116    pub full: PressureMetrics,
117}
118
119#[derive(Default, Clone, PartialEq, Debug, Serialize, Deserialize)]
120pub struct Pressure {
121    pub cpu: CpuPressure,
122    pub io: IoPressure,
123    pub memory: MemoryPressure,
124}
125
126#[derive(Default, Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
127pub struct MemoryEvents {
128    pub low: Option<u64>,
129    pub high: Option<u64>,
130    pub max: Option<u64>,
131    pub oom: Option<u64>,
132    pub oom_kill: Option<u64>,
133}
134
135#[derive(Default, Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
136pub struct MemoryEventsLocal {
137    pub low: Option<u64>,
138    pub high: Option<u64>,
139    pub max: Option<u64>,
140    pub oom: Option<u64>,
141    pub oom_kill: Option<u64>,
142}
143
144#[derive(Default, Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
145pub struct CgroupStat {
146    pub nr_descendants: Option<u32>,
147    pub nr_dying_descendants: Option<u32>,
148}
149
150#[derive(Default, Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
151pub struct MemoryNumaStat {
152    pub anon: Option<u64>,
153    pub file: Option<u64>,
154    pub kernel_stack: Option<u64>,
155    pub pagetables: Option<u64>,
156    pub shmem: Option<u64>,
157    pub file_mapped: Option<u64>,
158    pub file_dirty: Option<u64>,
159    pub file_writeback: Option<u64>,
160    pub swapcached: Option<u64>,
161    pub anon_thp: Option<u64>,
162    pub file_thp: Option<u64>,
163    pub shmem_thp: Option<u64>,
164    pub inactive_anon: Option<u64>,
165    pub active_anon: Option<u64>,
166    pub inactive_file: Option<u64>,
167    pub active_file: Option<u64>,
168    pub unevictable: Option<u64>,
169    pub slab_reclaimable: Option<u64>,
170    pub slab_unreclaimable: Option<u64>,
171    pub workingset_refault_anon: Option<u64>,
172    pub workingset_refault_file: Option<u64>,
173    pub workingset_activate_anon: Option<u64>,
174    pub workingset_activate_file: Option<u64>,
175    pub workingset_restore_anon: Option<u64>,
176    pub workingset_restore_file: Option<u64>,
177    pub workingset_nodereclaim: Option<u64>,
178}
179
180// We could make this a tuple struct but it'd be better is a regular struct to
181// play well with serde serialization.
182#[derive(Default, Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
183pub struct Cpuset {
184    pub cpus: BTreeSet<u32>,
185}
186
187#[derive(Default, Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
188pub struct MemNodes {
189    pub nodes: BTreeSet<u32>,
190}