用户和内核数据的 Perf 分支过滤器
Perf branch filter for both user and kernel data
对于以下每个命令
perf record -e cycles -j any -a -o perf.data -p 3696
我想记录用户和内核数据。我知道修饰符 :uk
对 cycles
有效,但我不知道是否必须为 -j
选项应用 ,uk
。根据手册
-j, --branch-filter
any: any type of branches
u: only when the branch target is at the user level
k: only when the branch target is in the kernel
hv: only when the target is at the hypervisor level
因此,对于使用数据,我通常 运行 perf record -e cycles:u -j any,u -a -o perf.data -p 3696
。不过,这次
perf record -e cycles:uk -j any,uk -a -o perf.data -p 3696
未知分支过滤器失败。
只对用户和内核数据使用 -j any
可以吗?
没有。使用 any
意味着它将对任何 'type' 采取的分支进行采样(例如函数 call/function return/indirect 分支等)。
要同时记录user
和kernel
数据,你应该运行perf record
这样-
perf record -e cycles:u -j any,u,k -a -o perf.data -p <PID>
此外,您不需要同时使用 -a
和 -p <PID>
选项,在这种情况下 -p <PID>
开关会覆盖 -a
选项。
对于以下每个命令
perf record -e cycles -j any -a -o perf.data -p 3696
我想记录用户和内核数据。我知道修饰符 :uk
对 cycles
有效,但我不知道是否必须为 -j
选项应用 ,uk
。根据手册
-j, --branch-filter any: any type of branches u: only when the branch target is at the user level k: only when the branch target is in the kernel hv: only when the target is at the hypervisor level
因此,对于使用数据,我通常 运行 perf record -e cycles:u -j any,u -a -o perf.data -p 3696
。不过,这次
perf record -e cycles:uk -j any,uk -a -o perf.data -p 3696
未知分支过滤器失败。
只对用户和内核数据使用 -j any
可以吗?
没有。使用 any
意味着它将对任何 'type' 采取的分支进行采样(例如函数 call/function return/indirect 分支等)。
要同时记录user
和kernel
数据,你应该运行perf record
这样-
perf record -e cycles:u -j any,u,k -a -o perf.data -p <PID>
此外,您不需要同时使用 -a
和 -p <PID>
选项,在这种情况下 -p <PID>
开关会覆盖 -a
选项。