syntax = "proto3"; package io.containerd.cgroups.v1; import "gogoproto/gogo.proto"; message Metrics { repeated HugetlbStat hugetlb = 1; PidsStat pids = 2; CPUStat cpu = 3 [(gogoproto.customname) = "CPU"]; MemoryStat memory = 4; BlkIOStat blkio = 5; RdmaStat rdma = 6; repeated NetworkStat network = 7; CgroupStats cgroup_stats = 8; MemoryOomControl memory_oom_control = 9; } message HugetlbStat { uint64 usage = 1; uint64 max = 2; uint64 failcnt = 3; string pagesize = 4; } message PidsStat { uint64 current = 1; uint64 limit = 2; } message CPUStat { CPUUsage usage = 1; Throttle throttling = 2; } message CPUUsage { // values in nanoseconds uint64 total = 1; uint64 kernel = 2; uint64 user = 3; repeated uint64 per_cpu = 4 [(gogoproto.customname) = "PerCPU"]; } message Throttle { uint64 periods = 1; uint64 throttled_periods = 2; uint64 throttled_time = 3; } message MemoryStat { uint64 cache = 1; uint64 rss = 2 [(gogoproto.customname) = "RSS"]; uint64 rss_huge = 3 [(gogoproto.customname) = "RSSHuge"]; uint64 mapped_file = 4; uint64 dirty = 5; uint64 writeback = 6; uint64 pg_pg_in = 7; uint64 pg_pg_out = 8; uint64 pg_fault = 9; uint64 pg_maj_fault = 10; uint64 inactive_anon = 11; uint64 active_anon = 12; uint64 inactive_file = 13; uint64 active_file = 14; uint64 unevictable = 15; uint64 hierarchical_memory_limit = 16; uint64 hierarchical_swap_limit = 17; uint64 total_cache = 18; uint64 total_rss = 19 [(gogoproto.customname) = "TotalRSS"]; uint64 total_rss_huge = 20 [(gogoproto.customname) = "TotalRSSHuge"]; uint64 total_mapped_file = 21; uint64 total_dirty = 22; uint64 total_writeback = 23; uint64 total_pg_pg_in = 24; uint64 total_pg_pg_out = 25; uint64 total_pg_fault = 26; uint64 total_pg_maj_fault = 27; uint64 total_inactive_anon = 28; uint64 total_active_anon = 29; uint64 total_inactive_file = 30; uint64 total_active_file = 31; uint64 total_unevictable = 32; MemoryEntry usage = 33; MemoryEntry swap = 34; MemoryEntry kernel = 35; MemoryEntry kernel_tcp = 36 [(gogoproto.customname) = "KernelTCP"]; } message MemoryEntry { uint64 limit = 1; uint64 usage = 2; uint64 max = 3; uint64 failcnt = 4; } message MemoryOomControl { uint64 oom_kill_disable = 1; uint64 under_oom = 2; uint64 oom_kill = 3; } message BlkIOStat { repeated BlkIOEntry io_service_bytes_recursive = 1; repeated BlkIOEntry io_serviced_recursive = 2; repeated BlkIOEntry io_queued_recursive = 3; repeated BlkIOEntry io_service_time_recursive = 4; repeated BlkIOEntry io_wait_time_recursive = 5; repeated BlkIOEntry io_merged_recursive = 6; repeated BlkIOEntry io_time_recursive = 7; repeated BlkIOEntry sectors_recursive = 8; } message BlkIOEntry { string op = 1; string device = 2; uint64 major = 3; uint64 minor = 4; uint64 value = 5; } message RdmaStat { repeated RdmaEntry current = 1; repeated RdmaEntry limit = 2; } message RdmaEntry { string device = 1; uint32 hca_handles = 2; uint32 hca_objects = 3; } message NetworkStat { string name = 1; uint64 rx_bytes = 2; uint64 rx_packets = 3; uint64 rx_errors = 4; uint64 rx_dropped = 5; uint64 tx_bytes = 6; uint64 tx_packets = 7; uint64 tx_errors = 8; uint64 tx_dropped = 9; } // CgroupStats exports per-cgroup statistics. message CgroupStats { // number of tasks sleeping uint64 nr_sleeping = 1; // number of tasks running uint64 nr_running = 2; // number of tasks in stopped state uint64 nr_stopped = 3; // number of tasks in uninterruptible state uint64 nr_uninterruptible = 4; // number of tasks waiting on IO uint64 nr_io_wait = 5; }