Docker API:cpu_stats vs percpu_stats

使用Docker远程API时,cpu_stats和percpu_stats之间有什么区别:

请求是:

GET /containers/(id or name)/stats 

(的一部分)回应是:

  "cpu_stats" : { "cpu_usage" : { "percpu_usage" : [ 8646879, 24472255, 36438778, 30657443 ], "usage_in_usermode" : 50000000, "total_usage" : 100215355, "usage_in_kernelmode" : 30000000 }, "system_cpu_usage" : 739306590000000, "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} }, "precpu_stats" : { "cpu_usage" : { "percpu_usage" : [ 8646879, 24350896, 36438778, 30657443 ], "usage_in_usermode" : 50000000, "total_usage" : 100093996, "usage_in_kernelmode" : 30000000 }, "system_cpu_usage" : 9492140000000, "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} } 

来自Docker文档的示例: https : //docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#get-container-stats-based-on-resource-usage

使用样本容器进行testing时,值几乎相同。

输出示例:

 #Cpu stas {u'cpu_usage': {u'usage_in_usermode': 0, u'total_usage': 36569630, u'percpu_usage': [8618616, 3086454, 16466404, 8398156], u'usage_in_kernelmode': 20000000}, u'system_cpu_usage': 339324470000000, u'throttling_data': {u'throttled_time': 0, u'periods': 0, u'throttled_periods': 0}} #Per cup stats {u'cpu_usage': {u'usage_in_usermode': 0, u'total_usage': 36569630, u'percpu_usage': [8618616, 3086454, 16466404, 8398156], u'usage_in_kernelmode': 20000000}, u'system_cpu_usage': 339320550000000, u'throttling_data': {u'throttled_time': 0, u'periods': 0, u'throttled_periods': 0}} 

我也试着比较两种情况下的4个容器的具体指标:

 #First container 359727340000000 #CPU Stats 359723390000000 #Per CPU Stats #2 359735220000000 359731290000000 #3 359743100000000 359739170000000 #4 359750940000000 359747000000000 

上面的值几乎相同(有些差异,但不是很大 – 可能是因为每个请求之间有一些ms)。

在官方文档中:

precpu_stats是上次读取的CPU统计量,用于计算CPU使用率。 这不是“cpu_stats”字段的确切副本。

对我来说不是很清楚。 任何人都可以解释更好