Re: [PATCH 4/6] perf tools: Add FIFO file names as alternative options to --control

From: Adrian Hunter
Date: Mon Aug 31 2020 - 09:33:18 EST


On 31/08/20 4:19 pm, Jiri Olsa wrote:
> On Sat, Aug 29, 2020 at 01:50:13PM +0300, Adrian Hunter wrote:
>
> SNIP
>
>> + *p = '\0';
>> +
>> + /*
>> + * O_RDWR avoids POLLHUPs which is necessary to allow the other
>> + * end of a FIFO to be repeatedly opened and closed.
>> + */
>> + fd = open(s, O_RDWR | O_NONBLOCK | O_CLOEXEC);
>> + if (fd < 0) {
>> + pr_err("Failed to open '%s'\n", s);
>> + ret = -errno;
>> + goto out_free;
>> + }
>> + *ctl_fd = fd;
>> + *ctl_fd_close = true;
>> +
>> + if (p && *++p) {
>> + /* O_RDWR | O_NONBLOCK means the other end need not be open */
>> + fd = open(p, O_RDWR | O_NONBLOCK | O_CLOEXEC);
>> + if (fd < 0) {
>> + pr_err("Failed to open '%s'\n", p);
>> + ret = -errno;
>> + goto out_free;
>> + }
>> + *ctl_fd_ack = fd;
>> + }
>> +
>> +out_free:
>> + free(s);
>> + return ret;
>> +}
>> +
>> +int evlist__parse_control(const char *str, int *ctl_fd, int *ctl_fd_ack, bool *ctl_fd_close)
>> {
>> char *comma = NULL, *endptr = NULL;
>>
>> if (strncmp(str, "fd:", 3))
>> - return -EINVAL;
>> + return evlist__parse_control_names(str, ctl_fd, ctl_fd_ack, ctl_fd_close);
>
> do we want to mention somewhere that the fifo name is everything
> except for 'fd:' ?

It is only mentioned in the documentation i.e.

--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -627,7 +627,9 @@ option. The -e option and this one can be mixed and matched. Events
can be grouped using the {} notation.
endif::HAVE_LIBPFM[]

+--control=ctl-fifo[,ack-fifo]::
--control=fd:ctl-fd[,ack-fd]::
+ctl-fifo / ack-fifo are opened and used as ctl-fd / ack-fd as follows.
Listen on ctl-fd descriptor for command to control measurement ('enable': enable events,
'disable': disable events). Measurements can be started with events disabled using
--delay=-1 option. Optionally send control command completion ('ack\n') to ack-fd descriptor

>
> also how likely is that we will add another channel type that
> will need another keyword (likd 'fd:')? I originaly thought
> we'd use 'fifo:filename' for this ... would be great to somehow
> avoid future confusions

Sure, I will add fifo: in V2