Skip to content

Commit 4cf47a7

Browse files
authored
Merge pull request #2796 from kwisniewski98/cgroup_memory_migrate
Add cgroup_memory_migrate metric
2 parents 1fcfaa6 + 7d914b5 commit 4cf47a7

File tree

10 files changed

+35
-2
lines changed

10 files changed

+35
-2
lines changed

cmd/cadvisor.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ var (
9191
container.ReferencedMemoryMetrics: struct{}{},
9292
container.CPUTopologyMetrics: struct{}{},
9393
container.ResctrlMetrics: struct{}{},
94+
container.CPUSetMetrics: struct{}{},
9495
}}
9596

9697
// List of metrics that can be ignored.
@@ -110,6 +111,7 @@ var (
110111
container.ReferencedMemoryMetrics: struct{}{},
111112
container.CPUTopologyMetrics: struct{}{},
112113
container.ResctrlMetrics: struct{}{},
114+
container.CPUSetMetrics: struct{}{},
113115
}
114116
)
115117

@@ -141,7 +143,7 @@ func (ml *metricSetValue) Set(value string) error {
141143
}
142144

143145
func init() {
144-
flag.Var(&ignoreMetrics, "disable_metrics", "comma-separated list of `metrics` to be disabled. Options are 'accelerator', 'cpu_topology','disk', 'diskIO', 'memory_numa', 'network', 'tcp', 'udp', 'percpu', 'sched', 'process', 'hugetlb', 'referenced_memory', 'resctrl'.")
146+
flag.Var(&ignoreMetrics, "disable_metrics", "comma-separated list of `metrics` to be disabled. Options are 'accelerator', 'cpu_topology','disk', 'diskIO', 'memory_numa', 'network', 'tcp', 'udp', 'percpu', 'sched', 'process', 'hugetlb', 'referenced_memory', 'resctrl', 'cpuset'.")
145147

146148
// Default logging verbosity to V(2)
147149
flag.Set("v", "2")

cmd/cadvisor_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ func TestToIncludedMetrics(t *testing.T) {
108108
container.ReferencedMemoryMetrics: struct{}{},
109109
container.CPUTopologyMetrics: struct{}{},
110110
container.ResctrlMetrics: struct{}{},
111+
container.CPUSetMetrics: struct{}{},
111112
},
112113
container.AllMetrics,
113114
{},

container/factory.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ const (
6363
ReferencedMemoryMetrics MetricKind = "referenced_memory"
6464
CPUTopologyMetrics MetricKind = "cpu_topology"
6565
ResctrlMetrics MetricKind = "resctrl"
66+
CPUSetMetrics MetricKind = "cpuset"
6667
)
6768

6869
// AllMetrics represents all kinds of metrics that cAdvisor supported.
@@ -87,6 +88,7 @@ var AllMetrics = MetricSet{
8788
ReferencedMemoryMetrics: struct{}{},
8889
CPUTopologyMetrics: struct{}{},
8990
ResctrlMetrics: struct{}{},
91+
CPUSetMetrics: struct{}{},
9092
}
9193

9294
func (mk MetricKind) String() string {

container/libcontainer/handler.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,10 @@ func setMemoryStats(s *cgroups.Stats, ret *info.ContainerStats) {
835835
ret.Memory.WorkingSet = workingSet
836836
}
837837

838+
func setCPUSetStats(s *cgroups.Stats, ret *info.ContainerStats) {
839+
ret.CpuSet.MemoryMigrate = s.CPUSetStats.MemoryMigrate
840+
}
841+
838842
func getNumaStats(memoryStats map[uint8]uint64) map[uint8]uint64 {
839843
stats := make(map[uint8]uint64, len(memoryStats))
840844
for node, usage := range memoryStats {
@@ -912,6 +916,9 @@ func newContainerStats(libcontainerStats *libcontainer.Stats, includedMetrics co
912916
if includedMetrics.Has(container.HugetlbUsageMetrics) {
913917
setHugepageStats(s, ret)
914918
}
919+
if includedMetrics.Has(container.CPUSetMetrics) {
920+
setCPUSetStats(s, ret)
921+
}
915922
}
916923
if len(libcontainerStats.Interfaces) > 0 {
917924
setNetworkStats(libcontainerStats, ret)

docs/runtime_options.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ cAdvisor stores the latest historical data in memory. How long of a history it s
125125
--application_metrics_count_limit=100: Max number of application metrics to store (per container) (default 100)
126126
--collector_cert="": Collector's certificate, exposed to endpoints for certificate based authentication.
127127
--collector_key="": Key for the collector's certificate
128-
--disable_metrics=tcp,advtcp,udp,sched,process,hugetlb: comma-separated list of metrics to be disabled. Options are 'disk', 'network', 'tcp', 'advtcp', 'udp', 'sched', 'process', 'hugetlb'. Note: tcp and udp are disabled by default due to high CPU usage. (default tcp,advtcp,udp,sched,process,hugetlb)
128+
--disable_metrics=tcp,advtcp,udp,sched,process,hugetlb: comma-separated list of metrics to be disabled. Options are 'disk', 'network', 'tcp', 'advtcp', 'udp', 'sched', 'process', 'hugetlb', 'cpuset'. Note: tcp and udp are disabled by default due to high CPU usage. (default tcp,advtcp,udp,sched,process,hugetlb,cpuset)
129129
--prometheus_endpoint="/metrics": Endpoint to expose Prometheus metrics on (default "/metrics")
130130
--disable_root_cgroup_stats=false: Disable collecting root Cgroup stats
131131
```

docs/storage/prometheus.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ Metric name | Type | Description | Unit (where applicable) | -disable_metrics pa
6565
`container_memory_rss` | Gauge | Size of RSS | bytes | |
6666
`container_memory_swap` | Gauge | Container swap usage | bytes | |
6767
`container_memory_mapped_file` | Gauge | Size of memory mapped files | bytes | |
68+
`container_memory_migrate` | Gauge | Memory migrate status | | cpuset |
6869
`container_memory_usage_bytes` | Gauge | Current memory usage, including all memory regardless of when it was accessed | bytes | |
6970
`container_memory_working_set_bytes` | Gauge | Current working set | bytes | |
7071
`container_network_receive_bytes_total` | Counter | Cumulative count of bytes received | bytes | network |

info/v1/container.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,10 @@ type MemoryStats struct {
399399
HierarchicalData MemoryStatsMemoryData `json:"hierarchical_data,omitempty"`
400400
}
401401

402+
type CPUSetStats struct {
403+
MemoryMigrate uint64 `json:"memory_migrate"`
404+
}
405+
402406
type MemoryNumaStats struct {
403407
File map[uint8]uint64 `json:"file,omitempty"`
404408
Anon map[uint8]uint64 `json:"anon,omitempty"`
@@ -957,6 +961,8 @@ type ContainerStats struct {
957961

958962
// Resource Control (resctrl) statistics
959963
Resctrl ResctrlStats `json:"resctrl,omitempty"`
964+
965+
CpuSet CPUSetStats `json:"cpuset,omitempty"`
960966
}
961967

962968
func timeEq(t1, t2 time.Time, tolerance time.Duration) bool {

metrics/prometheus.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,16 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri
455455
},
456456
}...)
457457
}
458+
if includedMetrics.Has(container.CPUSetMetrics) {
459+
c.containerMetrics = append(c.containerMetrics, containerMetric{
460+
name: "container_memory_migrate",
461+
help: "Memory migrate status.",
462+
valueType: prometheus.GaugeValue,
463+
getValues: func(s *info.ContainerStats) metricValues {
464+
return metricValues{{value: float64(s.CpuSet.MemoryMigrate), timestamp: s.Timestamp}}
465+
},
466+
})
467+
}
458468
if includedMetrics.Has(container.MemoryNumaMetrics) {
459469
c.containerMetrics = append(c.containerMetrics, []containerMetric{
460470
{

metrics/prometheus_fake.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,7 @@ func (p testSubcontainersInfoProvider) GetRequestedContainersInfo(string, v2.Req
723723
},
724724
},
725725
},
726+
CpuSet: info.CPUSetStats{MemoryMigrate: 1},
726727
},
727728
},
728729
},

metrics/testdata/prometheus_metrics

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,9 @@ container_memory_mapped_file{container_env_foo_env="prod",container_label_foo_la
166166
# HELP container_memory_max_usage_bytes Maximum memory usage recorded in bytes
167167
# TYPE container_memory_max_usage_bytes gauge
168168
container_memory_max_usage_bytes{container_env_foo_env="prod",container_label_foo_label="bar",id="testcontainer",image="test",name="testcontaineralias",zone_name="hello"} 8 1395066363000
169+
# HELP container_memory_migrate Memory migrate status.
170+
# TYPE container_memory_migrate gauge
171+
container_memory_migrate{container_env_foo_env="prod",container_label_foo_label="bar",id="testcontainer",image="test",name="testcontaineralias",zone_name="hello"} 1 1395066363000
169172
# HELP container_memory_numa_pages Number of used pages per NUMA node
170173
# TYPE container_memory_numa_pages gauge
171174
container_memory_numa_pages{container_env_foo_env="prod",container_label_foo_label="bar",id="testcontainer",image="test",name="testcontaineralias",node="0",scope="container",type="anon",zone_name="hello"} 10000 1395066363000

0 commit comments

Comments
 (0)