进程及其线程消耗的CPU时间

4

我正在尝试理解应用程序中各个线程消耗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
2个回答

5
.time 显示的进程正常运行时间是自进程启动到调试会话时间(在后期调试时为转储创建时间,在实时调试时为当前时间)。
对于各个线程,默认情况下 !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)不应超过进程运行时间。


2

进程运行时间是从第一个线程启动到最后一个线程结束所经过的墙上时钟时间。

你需要查看用户时间:0天0:26:24.000,这就是所有这些行应该加起来的时间。要获取总CPU使用时间,您需要执行用户时间+内核时间


不是“最后一个线程结束”的时间,而是转储被采取的时间(事后调试)或当前时间(实时调试)。 - Thomas Weller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接