150 lines
4.5 KiB
Plaintext
150 lines
4.5 KiB
Plaintext
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
|
|
|