Re: [PATCH] arm64,trace: Add page fault traceponits

From: Will Deacon
Date: Fri May 06 2022 - 09:17:44 EST


On Wed, Apr 20, 2022 at 03:01:09PM +0800, sunliming wrote:
> The arm64 architecture lacks some tracepoints support, this patch
> adds page fault tracepoints. The code and arch policy is mainly
> inherited from x86.
>
> Experimented on my centos8 virtual machine:
> dracut:/# echo 1 > /sys/kernel/tracing/events/exceptions/enable
> dracut:/# cat /sys/kernel/tracing/trace
>
> The results:
> sh-6098 [001] ..... 1186.024675: page_fault_user: addr=0xffffe153cc00 pc=0xffffa4117338 esr=0xffffe153cc00
> cat-6126 [000] ..... 1186.024677: page_fault_kernel: addr=0xffffa4323740 pc=schedule_tail esr=0xffffa4323740
> sh-6098 [001] ..... 1186.026085: page_fault_user: addr=0xaaaad23fae34 pc=0xaaaad231c0fc esr=0xaaaad23fae34
> cat-6126 [000] ..... 1186.026106: page_fault_user: addr=0xffffa414565c pc=0xffffa414565c esr=0xffffa414565c
> cat-6126 [000] ..... 1186.026222: page_fault_user: addr=0xffffa4214e10 pc=0xffffa4145670 esr=0xffffa4214e10
> cat-6126 [000] ..... 1186.026243: page_fault_user: addr=0xffffa420fd88 pc=0xffffa41456ac esr=0xffffa420fd88
> cat-6126 [000] ..... 1186.026282: page_fault_user: addr=0xffffa4117338 pc=0xffffa4117338 esr=0xffffa4117338
> cat-6126 [000] ..... 1186.026308: page_fault_user: addr=0xffffe153cc00 pc=0xffffa4117338 esr=0xffffe153cc00
> cat-6126 [000] ..... 1186.026365: page_fault_user: addr=0xaaaad231bd84 pc=0xaaaad231bd84 esr=0xaaaad231bd84
> sh-6098 [001] ..... 1186.026372: page_fault_user: addr=0xaaab04330098 pc=0xffffa411be68 esr=0xaaab04330098
> cat-6126 [000] ..... 1186.026394: page_fault_user: addr=0xaaaad22ef420 pc=0xaaaad22ef420 esr=0xaaaad22ef420
> cat-6126 [000] ..... 1186.026414: page_fault_user: addr=0xaaaad23ee9b0 pc=0xaaaad22ef424 esr=0xaaaad23ee9b0
> cat-6126 [000] ..... 1186.026426: page_fault_user: addr=0xffffa40c3110 pc=0xffffa40c3110 esr=0xffffa40c3110
> cat-6126 [000] ..... 1186.026450: page_fault_user: addr=0xaaaad22f23f8 pc=0xaaaad22f23f8 esr=0xaaaad22f23f8
> cat-6126 [000] ..... 1186.026467: page_fault_user: addr=0xaaaad23f0030 pc=0xaaaad22f240c esr=0xaaaad23f0030
> cat-6126 [000] ..... 1186.026481: page_fault_user: addr=0xaaaad23fae3c pc=0xaaaad231be40 esr=0xaaaad23fae3c
> cat-6126 [000] ..... 1186.026530: page_fault_user: addr=0xffffa40d63d8 pc=0xffffa40d63d8 esr=0xffffa40d63d8
> cat-6126 [000] ..... 1186.026554: page_fault_user: addr=0xffffa431f650 pc=0xffffa40d63f8 esr=0xffffa431f650
> sh-6098 [001] ..... 1186.026556: page_fault_user: addr=0xaaab04358d28 pc=0xffffa411be70 esr=0xaaab04358d28
> cat-6126 [000] ..... 1186.026571: page_fault_user: addr=0xaaaad24015d0 pc=0xffffa40d640c esr=0xaaaad24015d0
> cat-6126 [000] ..... 1186.026600: page_fault_user: addr=0xaaaad2332be8 pc=0xaaaad2332be8 esr=0xaaaad2332be8
> cat-6126 [000] ..... 1186.026703: page_fault_user: addr=0xffffa416c438 pc=0xffffa416c438 esr=0xffffa416c438
> sh-6098 [001] ..... 1186.026749: page_fault_user: addr=0xaaab04369d70 pc=0xffffa41193d8 esr=0xaaab04369d70
> cat-6126 [000] ..... 1186.027610: page_fault_user: addr=0xaaaad2307754 pc=0xaaaad2307754 esr=0xaaaad2307754
> cat-6126 [000] ..... 1186.027711: page_fault_user: addr=0xaaaad24014c4 pc=0xaaaad23310e4 esr=0xaaaad24014c4
> cat-6126 [000] ..... 1186.027892: page_fault_user: addr=0xaaab04359a80 pc=0xaaaad23052f0 esr=0xaaab04359a80
> cat-6126 [000] ..... 1186.027916: page_fault_user: addr=0xaaaad236cf80 pc=0xaaaad236cf80 esr=0xaaaad236cf80
>
> Signed-off-by: sunliming <sunliming@xxxxxxxxxx>
> ---
> arch/arm64/include/asm/trace/common.h | 12 +++++
> arch/arm64/include/asm/trace/exceptions.h | 54 +++++++++++++++++++++++
> arch/arm64/kernel/Makefile | 1 +
> arch/arm64/kernel/tracepoint.c | 24 ++++++++++
> arch/arm64/mm/Makefile | 3 ++
> arch/arm64/mm/fault.c | 19 ++++++++

We already report page faults via perf (see the calls to perf_sw_event()),
so why isn't that sufficient?

Will