I am trying to profile a set of processes on my CPU. In order to be very precise I want to use the perf stat
command to see how many CPU cycles my processes used.
This is different from top, where I only see the percentage of the CPU used in a snapshot.
Unfortunately I didn't find a way to profile multiple processes at the same time. Is this possible?
And as a second question: Is it possible to not only see the CPU cycles used, but also the total amount of CPU cycles (or the percentage) used in the same time interval?
You can try running perf stat -p PID1,PID2,PID3
for every pid you want (get them with pidof, pgrep, etc...) http://man7.org/linux/man-pages/man1/perf-stat.1.html
-p, --pid=<pid>
stat events on existing process id (comma separated list)
There is also useful -I msecs
option to enable periodic printing and --per-thread
to separate threads.
Also try system-wide perf stat -a
with -A
or some --per-* options: http://man7.org/linux/man-pages/man1/perf-stat.1.html
-a, --all-cpus
system-wide collection from all CPUs (default if no target is
specified)
-A, --no-aggr
Do not aggregate counts across all monitored CPUs.
--per-socket
Aggregate counts per processor socket for system-wide mode
measurements. This is a useful mode to detect imbalance between
sockets. To enable this mode, use --per-socket in addition to -a.
(system-wide). The output includes the socket number and the
number of online processors on that socket. This is useful to
gauge the amount of aggregation.
--per-core
Aggregate counts per physical processor for system-wide mode
measurements. This is a useful mode to detect imbalance between
physical cores. To enable this mode, use --per-core in addition
to -a. (system-wide). The output includes the core number and the
number of online logical processors on that physical processor.
--per-thread
Aggregate counts per monitored threads, when monitoring threads
(-t option) or processes (-p option).