lkml.org 
[lkml]   [2020]   [Jun]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v8 00/13] perf: support enable and disable commands in stat and record modes
    On Mon, Jun 22, 2020 at 06:38:34AM +0300, Alexey Budankov wrote:
    >
    > Hi,
    >
    > On 17.06.2020 11:30, Alexey Budankov wrote:
    > >
    > > Changes in v8:
    > > - avoided moving of fds at fdarray__filter() call
    > > - skipped counting of fds with zeroed revents at fdarray__filter() call
    > > - converted explicit --ctl-fd[-ack] into --control fd:ctl-fd[,ack-fd option
    > > - updated docs to accommodate --control fd:ctl-fd[,ack-fd] option
    >
    > Are there any questions or thoughts so far?

    hi,
    I'm waiting on some comment for:
    https://lore.kernel.org/lkml/20200615165802.GD2088119@krava/

    jirka

    >
    > Thanks,
    > Alexey
    >
    > >
    > > v7: https://lore.kernel.org/lkml/5de4b954-24f0-1e8d-5a0d-7b12783b8218@linux.intel.com/
    > >
    > > Changes in v7:
    > > - added missing perf-record.txt changes
    > > - adjusted docs wording for --ctl-fd,ctl-fd-ack options
    > > to additionally mention --delay=-1 effect
    > >
    > > v6: https://lore.kernel.org/lkml/f8e3a714-d9b1-4647-e1d2-9981cbaa83ec@linux.intel.com/
    > >
    > > Changes in v6:
    > > - split re-factoring of events handling loops for stat mode
    > > into smaller incremental parts
    > > - added parts missing at v5
    > > - corrected v5 runtime issues
    > >
    > > v5: https://lore.kernel.org/lkml/e5cac8dd-7aa4-ec7c-671c-07756907acba@linux.intel.com/
    > >
    > > Changes in v5:
    > > - split re-factoring of events handling loops for stat mode
    > > into smaller incremental parts
    > >
    > > v4: https://lore.kernel.org/lkml/653fe5f3-c986-a841-1ed8-0a7d2fa24c00@linux.intel.com/
    > >
    > > Changes in v4:
    > > - made checking of ctlfd state unconditional in record trace streaming loop
    > > - introduced static poll fds to keep evlist__filter_pollfd() unaffected
    > > - handled ret code of evlist__initialize_ctlfd() where need
    > > - renamed and structured handle_events() function
    > > - applied anonymous structs where needed
    > >
    > > v3: https://lore.kernel.org/lkml/eb38e9e5-754f-d410-1d9b-e26b702d51b7@linux.intel.com/
    > >
    > > Changes in v3:
    > > - renamed functions and types from perf_evlist_ to evlist_ to avoid
    > > clash with libperf code;
    > > - extended commands to be strings of variable length consisting of
    > > command name and also possibly including command specific data;
    > > - merged docs update with the code changes;
    > > - updated docs for -D,--delay=-1 option for stat and record modes;
    > >
    > > v2: https://lore.kernel.org/lkml/d582cc3d-2302-c7e2-70d3-bc7ab6f628c3@linux.intel.com/
    > >
    > > Changes in v2:
    > > - renamed resume and pause commands to enable and disable ones, renamed
    > > CTL_CMD_RESUME and CTL_CMD_PAUSE to CTL_CMD_ENABLE and CTL_CMD_DISABLE
    > > to fit to the appropriate ioctls and avoid mixing up with PAUSE_OUTPUT
    > > ioctl;
    > > - factored out event handling loop into a handle_events() for stat mode;
    > > - separated -D,--delay=-1 into separate patches for stat and record modes;
    > >
    > > v1: https://lore.kernel.org/lkml/825a5132-b58d-c0b6-b050-5a6040386ec7@linux.intel.com/
    > >
    > > repo: tip of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git perf/core
    > >
    > > The patch set implements handling of 'start disabled', 'enable' and 'disable'
    > > external control commands which can be provided for stat and record modes
    > > of the tool from an external controlling process. 'start disabled' command
    > > can be used to postpone enabling of events in the beginning of a monitoring
    > > session. 'enable' and 'disable' commands can be used to enable and disable
    > > events correspondingly any time after the start of the session.
    > >
    > > The 'start disabled', 'enable' and 'disable' external control commands can be
    > > used to focus measurement on specially selected time intervals of workload
    > > execution. Focused measurement reduces tool intrusion and influence on
    > > workload behavior, reduces distortion and amount of collected and stored
    > > data, mitigates data accuracy loss because measurement and data capturing
    > > happen only during intervals of interest.
    > >
    > > A controlling process can be a bash shell script [1], native executable or
    > > any other language program that can directly work with file descriptors,
    > > e.g. pipes [2], and spawn a process, specially the tool one.
    > >
    > > -D,--delay <val> option is extended with -1 value to skip events enabling
    > > in the beginning of a monitoring session ('start disabled' command).
    > > --control fd:ctl-fd[,ack-fd] command line option is introduced to provide the
    > > tool with a pair of file descriptors to listen to control commands and reply
    > > to the controlling process on the completion of received commands.
    > >
    > > The tool reads control command message from ctl-fd descriptor, handles the
    > > command and optionally replies acknowledgement message to ack-fd descriptor,
    > > if it is specified on the command line. 'enable' command is recognized as
    > > 'enable' string message and 'disable' command is recognized as 'disable'
    > > string message both received from ctl-fd descriptor. Completion message is
    > > 'ack\n' and sent to ack-fd descriptor.
    > >
    > > Example bash script demonstrating simple use case follows:
    > >
    > > #!/bin/bash
    > >
    > > ctl_dir=/tmp/
    > >
    > > ctl_fifo=${ctl_dir}perf_ctl.fifo
    > > test -p ${ctl_fifo} && unlink ${ctl_fifo}
    > > mkfifo ${ctl_fifo} && exec {ctl_fd}<>${ctl_fifo}
    > >
    > > ctl_ack_fifo=${ctl_dir}perf_ctl_ack.fifo
    > > test -p ${ctl_ack_fifo} && unlink ${ctl_ack_fifo}
    > > mkfifo ${ctl_ack_fifo} && exec {ctl_fd_ack}<>${ctl_ack_fifo}
    > >
    > > perf stat -D -1 -e cpu-cycles -a -I 1000 \
    > > --control fd:${ctl_fd},${ctl_fd_ack} \
    > > -- sleep 40 &
    > > perf_pid=$!
    > >
    > > sleep 5 && echo 'enable' >&${ctl_fd} && read -u ${ctl_fd_ack} e1 && echo "enabled(${e1})"
    > > sleep 10 && echo 'disable' >&${ctl_fd} && read -u ${ctl_fd_ack} d1 && echo "disabled(${d1})"
    > > sleep 5 && echo 'enable' >&${ctl_fd} && read -u ${ctl_fd_ack} e2 && echo "enabled(${e2})"
    > > sleep 10 && echo 'disable' >&${ctl_fd} && read -u ${ctl_fd_ack} d2 && echo "disabled(${d2})"
    > >
    > > exec {ctl_fd_ack}>&- && unlink ${ctl_ack_fifo}
    > > exec {ctl_fd}>&- && unlink ${ctl_fifo}
    > >
    > > wait -n ${perf_pid}
    > > exit $?
    > >
    > >
    > > Script output:
    > >
    > > [root@host dir] example
    > > Events disabled
    > > # time counts unit events
    > > 1.001101062 <not counted> cpu-cycles
    > > 2.002994944 <not counted> cpu-cycles
    > > 3.004864340 <not counted> cpu-cycles
    > > 4.006727177 <not counted> cpu-cycles
    > > Events enabled
    > > enabled(ack)
    > > 4.993808464 3,124,246 cpu-cycles
    > > 5.008597004 3,325,624 cpu-cycles
    > > 6.010387483 83,472,992 cpu-cycles
    > > 7.012266598 55,877,621 cpu-cycles
    > > 8.014175695 97,892,729 cpu-cycles
    > > 9.016056093 68,461,242 cpu-cycles
    > > 10.017937507 55,449,643 cpu-cycles
    > > 11.019830154 68,938,167 cpu-cycles
    > > 12.021719952 55,164,101 cpu-cycles
    > > 13.023627550 70,535,720 cpu-cycles
    > > 14.025580995 53,240,125 cpu-cycles
    > > disabled(ack)
    > > 14.997518260 53,558,068 cpu-cycles
    > > Events disabled
    > > 15.027216416 <not counted> cpu-cycles
    > > 16.029052729 <not counted> cpu-cycles
    > > 17.030904762 <not counted> cpu-cycles
    > > 18.032073424 <not counted> cpu-cycles
    > > 19.033805074 <not counted> cpu-cycles
    > > Events enabled
    > > enabled(ack)
    > > 20.001279097 3,021,022 cpu-cycles
    > > 20.035044381 6,434,367 cpu-cycles
    > > 21.036923813 89,358,251 cpu-cycles
    > > 22.038825169 72,516,351 cpu-cycles
    > > # time counts unit events
    > > 23.040715596 55,046,157 cpu-cycles
    > > 24.042643757 78,128,649 cpu-cycles
    > > 25.044558535 61,052,428 cpu-cycles
    > > 26.046452785 62,142,806 cpu-cycles
    > > 27.048353021 74,477,971 cpu-cycles
    > > 28.050241286 61,001,623 cpu-cycles
    > > 29.052149961 61,653,502 cpu-cycles
    > > disabled(ack)
    > > 30.004980264 82,729,640 cpu-cycles
    > > Events disabled
    > > 30.053516176 <not counted> cpu-cycles
    > > 31.055348366 <not counted> cpu-cycles
    > > 32.057202097 <not counted> cpu-cycles
    > > 33.059040702 <not counted> cpu-cycles
    > > 34.060843288 <not counted> cpu-cycles
    > > 35.000888624 <not counted> cpu-cycles
    > > [root@host dir]#
    > >
    > > [1] http://man7.org/linux/man-pages/man1/bash.1.html
    > > [2] http://man7.org/linux/man-pages/man2/pipe.2.html
    > >
    > > ---
    > > Alexey Budankov (13):
    > > tools/libperf: avoid moving of fds at fdarray__filter() call
    > > perf evlist: introduce control file descriptors
    > > perf evlist: implement control command handling functions
    > > perf stat: factor out body of event handling loop for system wide
    > > perf stat: move target check to loop control statement
    > > perf stat: factor out body of event handling loop for fork case
    > > perf stat: factor out event handling loop into dispatch_events()
    > > perf stat: extend -D,--delay option with -1 value
    > > perf stat: implement control commands handling
    > > perf stat: introduce --control fd:ctl-fd[,ack-fd] options
    > > perf record: extend -D,--delay option with -1 value
    > > perf record: implement control commands handling
    > > perf record: introduce --control fd:ctl-fd[,ack-fd] options
    > >
    > > tools/lib/api/fd/array.c | 11 +-
    > > tools/perf/Documentation/perf-record.txt | 44 +++++-
    > > tools/perf/Documentation/perf-stat.txt | 44 +++++-
    > > tools/perf/builtin-record.c | 65 ++++++++-
    > > tools/perf/builtin-stat.c | 176 ++++++++++++++++++-----
    > > tools/perf/builtin-trace.c | 2 +-
    > > tools/perf/tests/fdarray.c | 20 +--
    > > tools/perf/util/evlist.c | 136 ++++++++++++++++++
    > > tools/perf/util/evlist.h | 25 ++++
    > > tools/perf/util/record.h | 4 +-
    > > tools/perf/util/stat.h | 4 +-
    > > 11 files changed, 458 insertions(+), 73 deletions(-)
    > >
    >

    \
     
     \ /
      Last update: 2020-06-22 10:56    [W:4.427 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site