cpu 进程及其线程消耗的时间
cpu time consumed by a process and its threads
我正在尝试理解应用程序中各个线程消耗的 CPU 时间的数学计算。下面的 .time
命令告诉我我的进程运行了大约 7 分钟,据我了解,这基本上是该进程总体消耗的 CPU 时间。基于此,各个线程消耗的时间加起来也应该达到 7 分钟,但远远超过 7 分钟。
0:140> .time
Debug session time: Fri May 8 15:05:16.000 2015 (UTC - 4:00)
System Uptime: 22 days 17:00:27.560
Process Uptime: 0 days 0:06:45.000
Kernel time: 0 days 0:00:23.000
User time: 0 days 0:26:24.000
0:140> !runaway
User Mode Time
Thread Time
8:39f4 0 days 0:01:46.236
126:1184 0 days 0:01:45.394
136:b9c 0 days 0:01:42.851
117:37c8 0 days 0:01:42.009
132:fb8 0 days 0:01:38.046
135:4a94 0 days 0:01:33.834
131:3dd0 0 days 0:01:31.525
134:5850 0 days 0:01:30.964
133:239c 0 days 0:01:30.839
139:34b8 0 days 0:01:17.438
141:381c 0 days 0:01:02.197
127:221c 0 days 0:01:00.528
140:5514 0 days 0:01:00.263
142:17b8 0 days 0:00:58.172
143:46ac 0 days 0:00:57.377
146:43d4 0 days 0:00:31.933
0:2580 0 days 0:00:31.715
4:3c98 0 days 0:00:24.663
3:2ab4 0 days 0:00:24.117
5:35c0 0 days 0:00:23.353
2:3084 0 days 0:00:22.916
148:596c 0 days 0:00:22.729
119:5b58 0 days 0:00:04.586
19:56a4 0 days 0:00:04.336
86:4bfc 0 days 0:00:03.712
130:51f0 0 days 0:00:03.697
106:20cc 0 days 0:00:03.369
118:27f0 0 days 0:00:03.229
49:56a0 0 days 0:00:03.213
121:55f8 0 days 0:00:03.198
120:1b58 0 days 0:00:03.073
30:49c0 0 days 0:00:02.542
28:4b04 0 days 0:00:02.496
26:1410 0 days 0:00:02.449
52:3750 0 days 0:00:02.418
114:140 0 days 0:00:02.386
27:4c5c 0 days 0:00:02.277
21:2748 0 days 0:00:02.277
36:26dc 0 days 0:00:02.262
70:5a78 0 days 0:00:02.246
68:232c 0 days 0:00:02.230
62:37d8 0 days 0:00:02.230
93:5b18 0 days 0:00:02.215
92:3ea8 0 days 0:00:02.199
82:106c 0 days 0:00:02.199
76:5010 0 days 0:00:02.199
125:1480 0 days 0:00:02.168
107:4c44 0 days 0:00:02.106
90:59d4 0 days 0:00:02.106
24:2128 0 days 0:00:02.074
85:34a4 0 days 0:00:01.872
17:22cc 0 days 0:00:01.825
Process Uptime
是第一个线程开始和最后一个线程结束之间经过的挂钟(我认为)时间。
您需要查看 User time: 0 days 0:26:24.000
,这就是所有这些行的总和。要获得使用的总 CPU 时间,您需要执行 User Time
+ Kernel Time
.time
显示的进程正常运行时间是从进程启动到调试会话时间的时间(在 post 即时调试的情况下是创建转储的时间,或者在实时调试)。
对于单独的线程,!runaway
默认显示 CPU 用户时间(和报告的一样)。您可以通过 !runaway 2
显示内核时间,通过 !runaway 4
显示线程正常运行时间,或者通过 !runaway 7
:
显示所有内容
0:003> !runaway
User Mode Time
Thread Time
0:21d8 0 days 0:00:00.015
3:21ac 0 days 0:00:00.000
2:14f0 0 days 0:00:00.000
1:1ec8 0 days 0:00:00.000
0:003> !runaway 7
User Mode Time
Thread Time
0:21d8 0 days 0:00:00.015
3:21ac 0 days 0:00:00.000
2:14f0 0 days 0:00:00.000
1:1ec8 0 days 0:00:00.000
Kernel Mode Time
Thread Time
3:21ac 0 days 0:00:00.000
2:14f0 0 days 0:00:00.000
1:1ec8 0 days 0:00:00.000
0:21d8 0 days 0:00:00.000
Elapsed Time
Thread Time
0:21d8 0 days 0:12:34.919
1:1ec8 0 days 0:12:34.858
2:14f0 0 days 0:12:34.851
3:21ac 0 days 0:12:16.039
用户时间和内核时间的总和不需要与为进程报告的用户时间和内核时间相匹配,因为可能有线程不再存在。
线程正常运行时间和进程正常运行时间的总和可能永远不会匹配,因为多个线程可以 运行 并行。但是,最高线程正常运行时间(可能是线程 0)不应超过进程正常运行时间。
我正在尝试理解应用程序中各个线程消耗的 CPU 时间的数学计算。下面的 .time
命令告诉我我的进程运行了大约 7 分钟,据我了解,这基本上是该进程总体消耗的 CPU 时间。基于此,各个线程消耗的时间加起来也应该达到 7 分钟,但远远超过 7 分钟。
0:140> .time
Debug session time: Fri May 8 15:05:16.000 2015 (UTC - 4:00)
System Uptime: 22 days 17:00:27.560
Process Uptime: 0 days 0:06:45.000
Kernel time: 0 days 0:00:23.000
User time: 0 days 0:26:24.000
0:140> !runaway
User Mode Time
Thread Time
8:39f4 0 days 0:01:46.236
126:1184 0 days 0:01:45.394
136:b9c 0 days 0:01:42.851
117:37c8 0 days 0:01:42.009
132:fb8 0 days 0:01:38.046
135:4a94 0 days 0:01:33.834
131:3dd0 0 days 0:01:31.525
134:5850 0 days 0:01:30.964
133:239c 0 days 0:01:30.839
139:34b8 0 days 0:01:17.438
141:381c 0 days 0:01:02.197
127:221c 0 days 0:01:00.528
140:5514 0 days 0:01:00.263
142:17b8 0 days 0:00:58.172
143:46ac 0 days 0:00:57.377
146:43d4 0 days 0:00:31.933
0:2580 0 days 0:00:31.715
4:3c98 0 days 0:00:24.663
3:2ab4 0 days 0:00:24.117
5:35c0 0 days 0:00:23.353
2:3084 0 days 0:00:22.916
148:596c 0 days 0:00:22.729
119:5b58 0 days 0:00:04.586
19:56a4 0 days 0:00:04.336
86:4bfc 0 days 0:00:03.712
130:51f0 0 days 0:00:03.697
106:20cc 0 days 0:00:03.369
118:27f0 0 days 0:00:03.229
49:56a0 0 days 0:00:03.213
121:55f8 0 days 0:00:03.198
120:1b58 0 days 0:00:03.073
30:49c0 0 days 0:00:02.542
28:4b04 0 days 0:00:02.496
26:1410 0 days 0:00:02.449
52:3750 0 days 0:00:02.418
114:140 0 days 0:00:02.386
27:4c5c 0 days 0:00:02.277
21:2748 0 days 0:00:02.277
36:26dc 0 days 0:00:02.262
70:5a78 0 days 0:00:02.246
68:232c 0 days 0:00:02.230
62:37d8 0 days 0:00:02.230
93:5b18 0 days 0:00:02.215
92:3ea8 0 days 0:00:02.199
82:106c 0 days 0:00:02.199
76:5010 0 days 0:00:02.199
125:1480 0 days 0:00:02.168
107:4c44 0 days 0:00:02.106
90:59d4 0 days 0:00:02.106
24:2128 0 days 0:00:02.074
85:34a4 0 days 0:00:01.872
17:22cc 0 days 0:00:01.825
Process Uptime
是第一个线程开始和最后一个线程结束之间经过的挂钟(我认为)时间。
您需要查看 User time: 0 days 0:26:24.000
,这就是所有这些行的总和。要获得使用的总 CPU 时间,您需要执行 User Time
+ Kernel Time
.time
显示的进程正常运行时间是从进程启动到调试会话时间的时间(在 post 即时调试的情况下是创建转储的时间,或者在实时调试)。
对于单独的线程,!runaway
默认显示 CPU 用户时间(和报告的一样)。您可以通过 !runaway 2
显示内核时间,通过 !runaway 4
显示线程正常运行时间,或者通过 !runaway 7
:
0:003> !runaway
User Mode Time
Thread Time
0:21d8 0 days 0:00:00.015
3:21ac 0 days 0:00:00.000
2:14f0 0 days 0:00:00.000
1:1ec8 0 days 0:00:00.000
0:003> !runaway 7
User Mode Time
Thread Time
0:21d8 0 days 0:00:00.015
3:21ac 0 days 0:00:00.000
2:14f0 0 days 0:00:00.000
1:1ec8 0 days 0:00:00.000
Kernel Mode Time
Thread Time
3:21ac 0 days 0:00:00.000
2:14f0 0 days 0:00:00.000
1:1ec8 0 days 0:00:00.000
0:21d8 0 days 0:00:00.000
Elapsed Time
Thread Time
0:21d8 0 days 0:12:34.919
1:1ec8 0 days 0:12:34.858
2:14f0 0 days 0:12:34.851
3:21ac 0 days 0:12:16.039
用户时间和内核时间的总和不需要与为进程报告的用户时间和内核时间相匹配,因为可能有线程不再存在。
线程正常运行时间和进程正常运行时间的总和可能永远不会匹配,因为多个线程可以 运行 并行。但是,最高线程正常运行时间(可能是线程 0)不应超过进程正常运行时间。