Hi Alex, On 11/13/20 9:34 PM, Alejandro Colomar wrote: > Signed-off-by: Alejandro Colomar <alx.manpages@xxxxxxxxx> > --- > > Hi Michael, > > Here are a few srcfixes I found. > And an unnecessary parentheses removal in an example. Thanks. Applied. Cheers, Michael > man2/perf_event_open.2 | 215 +++++++++++++++++++++++------------------ > 1 file changed, 122 insertions(+), 93 deletions(-) > > diff --git a/man2/perf_event_open.2 b/man2/perf_event_open.2 > index eb7ab29ea..e7b0aa132 100644 > --- a/man2/perf_event_open.2 > +++ b/man2/perf_event_open.2 > @@ -126,7 +126,7 @@ The leader is created first, with > The rest of the group members are created with subsequent > .BR perf_event_open () > calls with > -.IR group_fd > +.I group_fd > being set to the file descriptor of the group leader. > (A single event on its own is created with > .IR group_fd " = \-1" > @@ -162,7 +162,7 @@ then > .TP > .BR PERF_FLAG_FD_NO_GROUP > This flag tells the event to ignore the > -.IR group_fd > +.I group_fd > parameter except for the purpose of setting up output redirection > using the > .B PERF_FLAG_FD_OUTPUT > @@ -352,7 +352,11 @@ These two dynamic PMUs create a kprobe/uprobe and attach it to the > file descriptor generated by perf_event_open. > The kprobe/uprobe will be destroyed on the destruction of the file descriptor. > See fields > -.IR kprobe_func ", " uprobe_path ", " kprobe_addr ", and " probe_offset > +.IR kprobe_func , > +.IR uprobe_path , > +.IR kprobe_addr , > +and > +.I probe_offset > for more details. > .RE > .TP > @@ -401,7 +405,9 @@ the > .I type > field. > The > -.IR config1 " and " config2 > +.I config1 > +and > +.I config2 > fields are also taken into account in cases where 64 bits is not > enough to fully specify the event. > The encoding of these fields are event dependent. > @@ -558,15 +564,15 @@ then we are measuring a hardware CPU cache event. > To calculate the appropriate > .I config > value use the following equation: > -.PP > -.RS 4 > .RS 4 > +.PP > +.in +4n > .EX > config = (perf_hw_cache_id) | > (perf_hw_cache_op_id << 8) | > (perf_hw_cache_op_result_id << 16); > .EE > -.RE > +.in > .PP > where > .I perf_hw_cache_id > @@ -652,24 +658,28 @@ Its parameters are set in other places. > If > .I type > is > -.BR kprobe > +.B kprobe > or > .BR uprobe , > set > -.IR retprobe > +.I retprobe > (bit 0 of > .IR config , > see > .IR /sys/bus/event_source/devices/[k,u]probe/format/retprobe ) > for kretprobe/uretprobe. > See fields > -.IR kprobe_func ", " uprobe_path ", " kprobe_addr ", and " probe_offset > +.IR kprobe_func , > +.IR uprobe_path , > +.IR kprobe_addr , > +and > +.I probe_offset > for more details. > .RE > .TP > .IR kprobe_func ", " uprobe_path ", " kprobe_addr ", and " probe_offset > These fields describe the kprobe/uprobe for dynamic PMUs > -.BR kprobe > +.B kprobe > and > .BR uprobe . > For > @@ -712,7 +722,7 @@ to try and achieve the desired rate. > The rate of adjustment is a > timer tick. > .TP > -.I "sample_type" > +.I sample_type > The various bits in this field specify which values to include > in the sample. > They will be recorded in a ring-buffer, > @@ -859,7 +869,7 @@ hardware at the time of the sampled > instruction's retirement. > .RE > .TP > -.IR "read_format" > +.I read_format > This field specifies the format of the data returned by > .BR read (2) > on a > @@ -888,7 +898,7 @@ Adds a 64-bit unique value that corresponds to the event group. > Allows all counter values in an event group to be read with one read. > .RE > .TP > -.IR "disabled" > +.I disabled > The > .I disabled > bit specifies whether the counter starts out disabled or enabled. > @@ -909,7 +919,7 @@ Despite > being 0, the child events will not start until the group leader > is enabled. > .TP > -.IR "inherit" > +.I inherit > The > .I inherit > bit specifies that this counter should count events of child > @@ -923,7 +933,7 @@ Inherit does not work for some combinations of > values, such as > .BR PERF_FORMAT_GROUP . > .TP > -.IR "pinned" > +.I pinned > The > .I pinned > bit specifies that the counter should always be on the CPU if at all > @@ -936,7 +946,7 @@ return end-of-file (i.e., > .BR read (2) > returns 0) until the counter is subsequently enabled or disabled. > .TP > -.IR "exclusive" > +.I exclusive > The > .I exclusive > bit specifies that when this counter's group is on the CPU, > @@ -952,13 +962,13 @@ This includes any users running a system-wide > measurement as well as any kernel use of the performance counters > (including the commonly enabled NMI Watchdog Timer interface). > .TP > -.IR "exclude_user" > +.I exclude_user > If this bit is set, the count excludes events that happen in user space. > .TP > -.IR "exclude_kernel" > +.I exclude_kernel > If this bit is set, the count excludes events that happen in kernel space. > .TP > -.IR "exclude_hv" > +.I exclude_hv > If this bit is set, the count excludes events that happen in the > hypervisor. > This is mainly for PMUs that have built-in support for handling this > @@ -966,12 +976,12 @@ This is mainly for PMUs that have built-in support for handling this > Extra support is needed for handling hypervisor measurements on most > machines. > .TP > -.IR "exclude_idle" > +.I exclude_idle > If set, don't count when the CPU is running the idle task. > While you can currently enable this for any event type, it is ignored > for all but software events. > .TP > -.IR "mmap" > +.I mmap > The > .I mmap > bit enables generation of > @@ -985,7 +995,7 @@ This allows tools to notice new executable code being mapped into > a program (dynamic shared libraries for example) > so that addresses can be mapped back to the original code. > .TP > -.IR "comm" > +.I comm > The > .I comm > bit enables tracking of process command name as modified by the > @@ -1004,30 +1014,30 @@ can be used to differentiate the > .BR exec (2) > case from the others. > .TP > -.IR "freq" > +.I freq > If this bit is set, then > .I sample_frequency > not > .I sample_period > is used when setting up the sampling interval. > .TP > -.IR "inherit_stat" > +.I inherit_stat > This bit enables saving of event counts on context switch for > inherited tasks. > This is meaningful only if the > .I inherit > field is set. > .TP > -.IR "enable_on_exec" > +.I enable_on_exec > If this bit is set, a counter is automatically > enabled after a call to > .BR exec (2). > .TP > -.IR "task" > +.I task > If this bit is set, then > fork/exit notifications are included in the ring buffer. > .TP > -.IR "watermark" > +.I watermark > If set, have an overflow notification happen when we cross the > .I wakeup_watermark > boundary. > @@ -1035,7 +1045,7 @@ Otherwise, overflow notifications happen after > .I wakeup_events > samples. > .TP > -.IR "precise_ip" " (since Linux 2.6.35)" > +.IR precise_ip " (since Linux 2.6.35)" > .\" commit ab608344bcbde4f55ec4cd911b686b0ce3eae076 > This controls the amount of skid. > Skid is how many instructions > @@ -1064,7 +1074,7 @@ See also the description of > .BR PERF_RECORD_MISC_EXACT_IP . > .RE > .TP > -.IR "mmap_data" " (since Linux 2.6.36)" > +.IR mmap_data " (since Linux 2.6.36)" > .\" commit 3af9e859281bda7eb7c20b51879cf43aa788ac2e > This is the counterpart of the > .I mmap > @@ -1077,7 +1087,7 @@ calls that do not have > .B PROT_EXEC > set (for example data and SysV shared memory). > .TP > -.IR "sample_id_all" " (since Linux 2.6.38)" > +.IR sample_id_all " (since Linux 2.6.38)" > .\" commit c980d1091810df13f21aabbce545fd98f545bbf7 > If set, then TID, TIME, ID, STREAM_ID, and CPU can > additionally be included in > @@ -1109,7 +1119,7 @@ struct sample_id { > .EE > .in > .TP > -.IR "exclude_host" " (since Linux 3.2)" > +.IR exclude_host " (since Linux 3.2)" > .\" commit a240f76165e6255384d4bdb8139895fac7988799 > When conducting measurements that include processes running > VM instances (i.e., have executed a > @@ -1120,7 +1130,7 @@ This is only meaningful outside the guests; this setting does > not change counts gathered inside of a guest. > Currently, this functionality is x86 only. > .TP > -.IR "exclude_guest" " (since Linux 3.2)" > +.IR exclude_guest " (since Linux 3.2)" > .\" commit a240f76165e6255384d4bdb8139895fac7988799 > When conducting measurements that include processes running > VM instances (i.e., have executed a > @@ -1131,15 +1141,15 @@ This is only meaningful outside the guests; this setting does > not change counts gathered inside of a guest. > Currently, this functionality is x86 only. > .TP > -.IR "exclude_callchain_kernel" " (since Linux 3.7)" > +.IR exclude_callchain_kernel " (since Linux 3.7)" > .\" commit d077526485d5c9b12fe85d0b2b3b7041e6bc5f91 > Do not include kernel callchains. > .TP > -.IR "exclude_callchain_user" " (since Linux 3.7)" > +.IR exclude_callchain_user " (since Linux 3.7)" > .\" commit d077526485d5c9b12fe85d0b2b3b7041e6bc5f91 > Do not include user callchains. > .TP > -.IR "mmap2" " (since Linux 3.16)" > +.IR mmap2 " (since Linux 3.16)" > .\" commit 13d7a2410fa637f450a29ecb515ac318ee40c741 > .\" This is tricky; was committed during 3.12 development > .\" but right before release was disabled. > @@ -1152,7 +1162,7 @@ The > .I mmap > flag must also be set for this to work. > .TP > -.IR "comm_exec" " (since Linux 3.16)" > +.IR comm_exec " (since Linux 3.16)" > .\" commit 82b897782d10fcc4930c9d4a15b175348fdd2871 > This is purely a feature-detection flag, it does not change > kernel behavior. > @@ -1168,7 +1178,7 @@ reported was caused by a call to > This allows tools to distinguish between the various > types of process renaming. > .TP > -.IR "use_clockid" " (since Linux 4.1)" > +.IR use_clockid " (since Linux 4.1)" > .\" commit 34f439278cef7b1177f8ce24f9fc81dfc6221d3b > This allows selecting which internal Linux clock to use > when generating timestamps via the > @@ -1177,7 +1187,7 @@ field. > This can make it easier to correlate perf sample times with > timestamps generated by other tools. > .TP > -.IR "context_switch" " (since Linux 4.3)" > +.IR context_switch " (since Linux 4.3)" > .\" commit 45ac1403f564f411c6a383a2448688ba8dd705a4 > This enables the generation of > .B PERF_RECORD_SWITCH > @@ -1192,7 +1202,7 @@ information even with strict > .I perf_event_paranoid > settings. > .TP > -.IR "wakeup_events" ", " "wakeup_watermark" > +.IR wakeup_events ", " wakeup_watermark > This union sets how many samples > .RI ( wakeup_events ) > or bytes > @@ -1218,25 +1228,25 @@ Prior to Linux 3.0, setting > to 0 resulted in no overflow notifications; > more recent kernels treat 0 the same as 1. > .TP > -.IR "bp_type" " (since Linux 2.6.33)" > +.IR bp_type " (since Linux 2.6.33)" > .\" commit 24f1e32c60c45c89a997c73395b69c8af6f0a84e > This chooses the breakpoint type. > It is one of: > .RS > .TP > -.BR HW_BREAKPOINT_EMPTY > +.B HW_BREAKPOINT_EMPTY > No breakpoint. > .TP > -.BR HW_BREAKPOINT_R > +.B HW_BREAKPOINT_R > Count when we read the memory location. > .TP > -.BR HW_BREAKPOINT_W > +.B HW_BREAKPOINT_W > Count when we write the memory location. > .TP > -.BR HW_BREAKPOINT_RW > +.B HW_BREAKPOINT_RW > Count when we read or write the memory location. > .TP > -.BR HW_BREAKPOINT_X > +.B HW_BREAKPOINT_X > Count when we execute code at the memory location. > .PP > The values can be combined via a bitwise or, but the > @@ -1249,14 +1259,14 @@ with > is not allowed. > .RE > .TP > -.IR "bp_addr" " (since Linux 2.6.33)" > +.IR bp_addr " (since Linux 2.6.33)" > .\" commit 24f1e32c60c45c89a997c73395b69c8af6f0a84e > This is the address of the breakpoint. > For execution breakpoints, this is the memory address of the instruction > of interest; for read and write breakpoints, it is the memory address > of the memory location of interest. > .TP > -.IR "config1" " (since Linux 2.6.39)" > +.IR config1 " (since Linux 2.6.39)" > .\" commit a7e3ed1e470116c9d12c2f778431a481a6be8ab6 > .I config1 > is used for setting events that need an extra register or otherwise > @@ -1264,7 +1274,7 @@ do not fit in the regular config field. > Raw OFFCORE_EVENTS on Nehalem/Westmere/SandyBridge use this field > on Linux 3.3 and later kernels. > .TP > -.IR "bp_len" " (since Linux 2.6.33)" > +.IR bp_len " (since Linux 2.6.33)" > .\" commit 24f1e32c60c45c89a997c73395b69c8af6f0a84e > .I bp_len > is the length of the breakpoint being measured if > @@ -1280,14 +1290,14 @@ and > For an execution breakpoint, set this to > .IR sizeof(long) . > .TP > -.IR "config2" " (since Linux 2.6.39)" > +.IR config2 " (since Linux 2.6.39)" > .\" commit a7e3ed1e470116c9d12c2f778431a481a6be8ab6 > .I config2 > is a further extension of the > .I config1 > field. > .TP > -.IR "branch_sample_type" " (since Linux 3.4)" > +.IR branch_sample_type " (since Linux 3.4)" > .\" commit bce38cd53e5ddba9cb6d708c4ef3d04a4016ec7e > If > .B PERF_SAMPLE_BRANCH_STACK > @@ -1358,20 +1368,20 @@ This requires hardware support, currently only found > on Intel x86 Haswell or newer. > .RE > .TP > -.IR "sample_regs_user" " (since Linux 3.7)" > +.IR sample_regs_user " (since Linux 3.7)" > .\" commit 4018994f3d8785275ef0e7391b75c3462c029e56 > This bit mask defines the set of user CPU registers to dump on samples. > The layout of the register mask is architecture-specific and > is described in the kernel header file > .IR arch/ARCH/include/uapi/asm/perf_regs.h . > .TP > -.IR "sample_stack_user" " (since Linux 3.7)" > +.IR sample_stack_user " (since Linux 3.7)" > .\" commit c5ebcedb566ef17bda7b02686e0d658a7bb42ee7 > This defines the size of the user stack to dump if > .B PERF_SAMPLE_STACK_USER > is specified. > .TP > -.IR "clockid" " (since Linux 4.1)" > +.IR clockid " (since Linux 4.1)" > .\" commit 34f439278cef7b1177f8ce24f9fc81dfc6221d3b > If > .I use_clockid > @@ -1388,13 +1398,13 @@ and > .B CLOCK_TAI > currently supported. > .TP > -.IR "aux_watermark" " (since Linux 4.1)" > +.IR aux_watermark " (since Linux 4.1)" > .\" commit 1a5941312414c71dece6717da9a0fa1303127afa > This specifies how much data is required to trigger a > .B PERF_RECORD_AUX > sample. > .TP > -.IR "sample_max_stack" " (since Linux 4.8)" > +.IR sample_max_stack " (since Linux 4.8)" > .\" commit 97c79a38cd454602645f0470ffb444b3b75ce574 > When > .I sample_type > @@ -1682,34 +1692,39 @@ delta since > .I time_enabled > (in nanoseconds) using rdtsc or similar. > .IP > -.nf > - u64 quot, rem; > - u64 delta; > - quot = (cyc >> time_shift); > - rem = cyc & (((u64)1 << time_shift) \- 1); > - delta = time_offset + quot * time_mult + > - ((rem * time_mult) >> time_shift); > -.fi > +.in +4n > +.EX > +u64 quot, rem; > +u64 delta; > + > +quot = cyc >> time_shift; > +rem = cyc & (((u64)1 << time_shift) \- 1); > +delta = time_offset + quot * time_mult + > + ((rem * time_mult) >> time_shift); > +.EE > +.in > .IP > Where > .IR time_offset , > .IR time_mult , > .IR time_shift , > and > -.IR cyc > +.I cyc > are read in the > seqcount loop described above. > This delta can then be added to > enabled and possible running (if idx), improving the scaling: > .IP > -.nf > - enabled += delta; > - if (idx) > - running += delta; > - quot = count / running; > - rem = count % running; > - count = quot * enabled + (rem * enabled) / running; > -.fi > +.in +4n > +.EX > +enabled += delta; > +if (idx) > + running += delta; > +quot = count / running; > +rem = count % running; > +count = quot * enabled + (rem * enabled) / running; > +.EE > +.in > .TP > .IR time_zero " (since Linux 3.12)" > .\" commit fa7315871046b9a4c48627905691dbde57e51033 > @@ -1718,23 +1733,31 @@ If > .I cap_usr_time_zero > is set, then the hardware clock (the TSC timestamp counter on x86) > can be calculated from the > -.IR time_zero ", " time_mult ", and " time_shift " values:" > +.IR time_zero , > +.IR time_mult , > +and > +.I time_shift > +values: > .IP > -.nf > - time = timestamp - time_zero; > - quot = time / time_mult; > - rem = time % time_mult; > - cyc = (quot << time_shift) + (rem << time_shift) / time_mult; > -.fi > +.in +4n > +.EX > +time = timestamp - time_zero; > +quot = time / time_mult; > +rem = time % time_mult; > +cyc = (quot << time_shift) + (rem << time_shift) / time_mult; > +.EE > +.in > .IP > And vice versa: > .IP > -.nf > - quot = cyc >> time_shift; > - rem = cyc & (((u64)1 << time_shift) - 1); > - timestamp = time_zero + quot * time_mult + > - ((rem * time_mult) >> time_shift); > -.fi > +.in +4n > +.EX > +quot = cyc >> time_shift; > +rem = cyc & (((u64)1 << time_shift) - 1); > +timestamp = time_zero + quot * time_mult + > + ((rem * time_mult) >> time_shift); > +.EE > +.in > .TP > .I data_head > This points to the head of the data section. > @@ -1785,7 +1808,7 @@ The desired offset and size must be page aligned, and the size > must be a power of two. > These values are then passed to mmap in order to map the AUX buffer. > Pages in the AUX buffer are included as part of the > -.BR RLIMIT_MEMLOCK > +.B RLIMIT_MEMLOCK > resource limit (see > .BR setrlimit (2)), > and also as part of the > @@ -1802,10 +1825,14 @@ new data began, and it is the consumer's job to disable > measurement while reading to avoid possible data races. > .IP > The > -.IR aux_head " and " aux_tail > +.I aux_head > +and > +.I aux_tail > ring buffer pointers have the same behavior and ordering > rules as the previous described > -.IR data_head " and " data_tail . > +.I data_head > +and > +.IR data_tail . > .PP > The following 2^n ring-buffer pages have the layout described below. > .PP > @@ -1897,9 +1924,9 @@ system call. > .BR PERF_RECORD_MISC_SWITCH_OUT " (since Linux 4.3)" > .\" commit 45ac1403f564f411c6a383a2448688ba8dd705a4 > When a > -.BR PERF_RECORD_SWITCH > +.B PERF_RECORD_SWITCH > or > -.BR PERF_RECORD_SWITCH_CPU_WIDE > +.B PERF_RECORD_SWITCH_CPU_WIDE > record is generated, this bit indicates that the > context switch is away from the current process > (instead of into the current process). > @@ -2267,7 +2294,7 @@ Support for > .IR mispred , > .IR predicted , > and > -.IR cycles > +.I cycles > is optional; if not supported, those > values will be 0. > .PP > @@ -2284,7 +2311,9 @@ is enabled, then the user CPU registers are recorded. > The > .I abi > field is one of > -.BR PERF_SAMPLE_REGS_ABI_NONE ", " PERF_SAMPLE_REGS_ABI_32 " or" > +.BR PERF_SAMPLE_REGS_ABI_NONE , > +.BR PERF_SAMPLE_REGS_ABI_32 , > +or > .BR PERF_SAMPLE_REGS_ABI_64 . > .IP > The > -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/