- Prev
- SystemTap Beginners Guide
- Next

### ⁠5.3.3. Determining Time Spent in Kernel and User Space

This section illustrates how to determine the amount of time any given thread is spending in either kernel or user-space.
thread-times.stp

    #! /usr/bin/env stap

    probe perf.sw.cpu_clock!, timer.profile {
      // NB: To avoid contention on SMP machines, no global scalars/arrays used,
      // only contention-free statistics aggregates.
      tid=tid(); e=execname()
      if (!user_mode())
        kticks[e,tid] <<< 1
      else
        uticks[e,tid] <<< 1
      ticks <<< 1
      tids[e,tid] <<< 1
    }

    global uticks%, kticks%, ticks

    global tids%

    probe timer.s(5), end {
      allticks = @count(ticks)
      printf ("%16s %5s %7s %7s (of %d ticks)\n",
              "comm", "tid", "%user", "%kernel", allticks)
      foreach ([e,tid] in tids- limit 20) {
        // SystemTap only performs integer arithmetic.
        // To avoid losing precision the decimal point is shifted
        // to the right four places (*100000). Think of this as
        // the original result value x.xxyy becoming xxxyy.0.
        // The integer percentage xxx is obtained
        // by dividing by 100 and the fractional percentage
        // is obtained with a modulo 100 operation.
        uscaled = @count(uticks[e,tid])*10000/allticks
        kscaled = @count(kticks[e,tid])*10000/allticks
        printf ("%16s %5d %3d.%02d%% %3d.%02d%%\n",
          e, tid, uscaled/100, uscaled%100, kscaled/100, kscaled%100)
      }
      printf("\n")

      delete uticks
      delete kticks
      delete ticks
      delete tids
    }

thread-times.stp lists the top 20 processes currently taking up CPU time within a 5-second sample, along with the total number of CPU ticks made during the sample. The output of this script also notes the percentage of CPU time each process used, as well as whether that time was spent in kernel space or user space.
Example 5.15, “thread-times.stp Sample Output” contains a 5-second sample of the output for thread-times.stp:
⁠

Example 5.15. thread-times.stp Sample Output

      tid   %user %kernel (of 20002 ticks)
        0   0.00%  87.88%
    32169   5.24%   0.03%
     9815   3.33%   0.36%
     9859   0.95%   0.00%
     3611   0.56%   0.12%
     9861   0.62%   0.01%
    11106   0.37%   0.02%
    32167   0.08%   0.08%
     3897   0.01%   0.08%
     3800   0.03%   0.00%
     2886   0.02%   0.00%
     3243   0.00%   0.01%
     3862   0.01%   0.00%
     3782   0.00%   0.00%
    21767   0.00%   0.00%
     2522   0.00%   0.00%
     3883   0.00%   0.00%
     3775   0.00%   0.00%
     3943   0.00%   0.00%
     3873   0.00%   0.00%

- Prev5.3.2. Call Graph Tracing
- Up
- Home
- Next5.3.4. Monitoring Polling Applications