Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

This is a demonstration of the procsystime tool, which can give details
on how processes make use of system calls.

Here we run procsystime on processes which have the name "bash",

   #  procsystime -n bash
   Tracing... Hit Ctrl-C to end...
   ^C
   
   Elapsed Times for process bash,
   
            SYSCALL          TIME (ns)
            setpgrp              27768
              gtime              28692
        lwp_sigmask             148074
              write             235814
          sigaction             553556
              ioctl             776691
               read          857401243

By default procsystime prints elapsed times, the time from when the syscall
was issued to it's completion. In the above output, we can see the read()
syscall took the most time for this process - 8.57 seconds for all the
reads combined. This is because the read syscall is waiting for keystrokes.



Here we try the "-o" option to print CPU overhead times on "bash",

   # procsystime -o -n bash
   Tracing... Hit Ctrl-C to end...
   ^C
   
   CPU Times for process bash,
   
            SYSCALL          TIME (ns)
            setpgrp               6994
              gtime               8054
        lwp_sigmask              33865
               read             154895
          sigaction             259899
              write             343825
              ioctl             932280

This identifies which syscall type from bash is consuming the most CPU time.
This is ioctl, at 932 microseconds. Compare this output to the default in
the first example - both are useful for different reasons, this CPU overhead
output helps us see why processes are consuming a lot of sys time.



This demonstrates using the "-a" for all details, this time with "ssh",

   # procsystime -a -n ssh
   Tracing... Hit Ctrl-C to end...
   ^C

   Elapsed Times for processes ssh,
   
            SYSCALL          TIME (ns)
               read             115833
              write             302419
            pollsys          114616076
             TOTAL:          115034328
   
   CPU Times for processes ssh,
   
            SYSCALL          TIME (ns)
               read              82381
            pollsys             201818
              write             280390
             TOTAL:             564589
   
   Syscall Counts for processes ssh,
   
            SYSCALL              COUNT
               read                  4
              write                  4
            pollsys                  8
             TOTAL:                 16

Now we can see elapsed times, overhead times, and syscall counts in one
report. Very handy. We can also see totals printed as "TOTAL:".



procsystime also lets us just examine one PID. For example,

   # procsystime -p 1304
   Tracing... Hit Ctrl-C to end...
   ^C
   
   Elapsed Times for PID 1304,
   
            SYSCALL          TIME (ns)
              fcntl               7323
            fstat64              21349
              ioctl             190683
               read             238197
              write            1276169
            pollsys         1005360640



Here is a longer example of running procsystime on mozilla,

   # procsystime -a -n mozilla-bin
   Tracing... Hit Ctrl-C to end...
   ^C
   
   Elapsed Times for processes mozilla-bin,
   
            SYSCALL          TIME (ns)
              readv             677958
             writev            1159088
              yield            1298742
               read           18019194
              write           35679619
              ioctl          108845685
           lwp_park        38090969432
            pollsys        65955258781
             TOTAL:       104211908499
   
   CPU Times for processes mozilla-bin,
   
            SYSCALL          TIME (ns)
              yield             120345
              readv             398046
             writev            1117178
           lwp_park            8591428
               read            9752315
              write           29043460
              ioctl           37089349
            pollsys          189933470
             TOTAL:          276045591
   
   Syscall Counts for processes mozilla-bin,
   
            SYSCALL              COUNT
             writev                  3
              yield                  9
              readv                 58
           lwp_park                280
              write               1317
               read               1744
            pollsys               8268
              ioctl              16434
             TOTAL:              28113