Hi Will, On Mon, Nov 30, 2020 at 04:46:51PM +0000, Will Deacon wrote: > On Mon, Nov 30, 2020 at 06:24:54PM +0200, James Clark wrote: > > Enable PID_IN_CONTEXTIDR by default when Arm SPE is enabled. > > This flag is required to get PID data in the SPE trace. Without > > it the perf tool will report 0 for PID which isn't very useful, > > especially when doing system wide profiling or profiling > > applications that fork. > > Can perf not figure out the pid some other way? (e.g. by tracing context > switches and correlating that with the SPE data?).
For perf 'per-thread' mode, we can use context switch trace event as assisted info to select thread context. But for "system wide" mode and "snapshot" mode in perf tool, since the trace data is continuous, I think we cannot use context switch trace event to correlate the SPE trace data. > Also, how does this work with pid namespaces? Here we are studying the implemetation of Intel-PT and Arm CoreSight. The context ID is stored into the hardware trace data when record; afterwards when perf tool decodes the trace data and detects the packet for context ID, it will select the machine's thread context in perf [1]. Since the perf tool gathers all the threads infomation in perf data file, based on the context ID, it can find the corresponding thread pointer with function machine__find_thread() [2]. Since your question is for "pid namespace", to be honest, I don't know how perf tool to handle any confliction for differrent processes share the same PID, and I am not sure if you are asking CGroup related stuff or not. If this cannot answer your question, please let me know. Thanks, Leo [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c#n510 [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/perf/util/cs-etm.c#n1076 > > > There is a small performance overhead when enabling > > PID_IN_CONTEXTIDR, but SPE itself is optional and not enabled by > > default so the impact is minimised. > > > > Cc: Will Deacon <[email protected]> > > Cc: Mark Rutland <[email protected]> > > Cc: Al Grant <[email protected]> > > Cc: Leo Yan <[email protected]> > > Cc: John Garry <[email protected]> > > Cc: Suzuki K Poulose <[email protected]> > > Signed-off-by: James Clark <[email protected]> > > --- > > drivers/perf/Kconfig | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig > > index 130327ff0b0e..47ede46c3d57 100644 > > --- a/drivers/perf/Kconfig > > +++ b/drivers/perf/Kconfig > > @@ -125,6 +125,7 @@ config XGENE_PMU > > config ARM_SPE_PMU > > tristate "Enable support for the ARMv8.2 Statistical Profiling > > Extension" > > depends on ARM64 > > + select PID_IN_CONTEXTIDR > > Probably better to make PID_IN_CONTEXTIDR 'default y' if SPE is enabled, > rather than selecting it directly. That way, at least people can turn it > off if they don't want it. > > Will

