Hi,

Sorry to create this duplicate message, the previous one was not
formatted as plain text ...

With recent versions of the kernel, ftrace seems to experience some
latencies when writing events filter files on a real time kernel.  
Latencies experienced add a extra minute of runtime with trace-cmd
compare to a regular execution and sometimes `trace-cmd` just hangs for
multiples minutes.

The bug has been tested and reproduced with these version of the kernel
(all with real time enable) : 6.12.19, 6.14-rc7, 6.15 and current
upstream.  
The bug has also been reproduced on two machines, both running Ubuntu
24.04 with an upstream kernel, one running with an INTEL(R) XEON(R)
GOLD 5512U, the other a Intel(R) Xeon(R) E-2278GE. The bug also appears
is virtualised environments (KVM/QEMU).  
I have run `git-bisect` between v6.12 and v6.15, the faulty commit
seems to be this one : a363d27cdbc2bc2d1899b5a1520b64e3590fcd9a

To reproduce the bug I used this script :  
```  
while read file; do  
echo "0" > $file  
done  
```  
And ran it like this :  
```  
sudo time ./reproduce.sh < events.txt  
```

When measuring execution time with `/usr/bin/time`, I have these
results :  
Non RT kernel v6.15 :  
```  
0.06user 0.02system 0:08.77elapsed 1%CPU (0avgtext+0avgdata
22928maxresident)k  
2016inputs+0outputs (9major+8835minor)pagefaults 0swaps  
```  
RT kernel v6.15 :  
```  
0.00user 0.00system 1:06.96elapsed 0%CPU (0avgtext+0avgdata
6888maxresident)k  
0inputs+0outputs (0major+595minor)pagefaults 0swaps  
```  
RT kernel on a363d27cdbc2bc2d1899b5a1520b64e3590fcd9a :  
```  
0.00user 0.00system 0:43.21elapsed 0%CPU (0avgtext+0avgdata
6760maxresident)k  
0inputs+0outputs (0major+596minor)pagefaults 0swaps  
```  
RT kernel on 4aadde89d81fbf4cf3105a61dbc48888b819ecfb :  
```  
0.00user 0.00system 0:01.25elapsed 0%CPU (0avgtext+0avgdata
6828maxresident)k  
0inputs+0outputs (0major+602minor)pagefaults 0swaps  
```

Problematic files were identified with running the following command :
`sudo strace -tt trace-cmd record -p function sleep 1`. Here is a
extract of the output produced by strace (on v6.15) :  
```  
...  
07:56:34.868273 openat(AT_FDCWD,
"/sys/kernel/tracing/events/osnoise/filter", O_WRONLY) = 4  
07:56:34.868401 write(4, "0", 1)        = 1  
07:56:35.485148 close(4)                = 0  
07:56:35.485251 openat(AT_FDCWD,
"/sys/kernel/tracing/events/page_isolation/filter", O_WRONLY) = 4  
07:56:35.485375 write(4, "0", 1)        = 1  
07:56:36.397172 close(4)                = 0  
07:56:36.397328 openat(AT_FDCWD,
"/sys/kernel/tracing/events/page_pool/filter", O_WRONLY) = 4  
07:56:36.397465 write(4, "0", 1)        = 1  
07:56:36.786157 close(4)                = 0  
07:56:36.786256 openat(AT_FDCWD,
"/sys/kernel/tracing/events/pagemap/filter", O_WRONLY) = 4  
07:56:36.786379 write(4, "0", 1)        = 1  
07:56:37.446188 close(4)                = 0  
07:56:37.446286 openat(AT_FDCWD,
"/sys/kernel/tracing/events/percpu/filter", O_WRONLY) = 4  
07:56:37.446403 write(4, "0", 1)        = 1  
07:56:37.738142 close(4)                = 0  
...  
```

If you have an idea on how to fix this issue, I am very grateful.

--  
Julien Flot  
Siemens AG  
[www.siemens.com](https://www.siemens.com)



Appendix

Faulty commit message :  
```  
commit a363d27cdbc2bc2d1899b5a1520b64e3590fcd9a  
Author: Mathieu Desnoyers
<[mathieu.desnoy...@efficios.com](mailto:mathieu.desnoy...@efficios.com
)>  
Date:   Tue Oct 8 21:07:15 2024 -0400  
fix  
tracing: Allow system call tracepoints to handle page faults

Use Tasks Trace RCU to protect iteration of system call enter/exit  
tracepoint probes to allow those probes to handle page faults.

In preparation for this change, all tracers registering to system call
enter/exit tracepoints should expect those to be called with preemption
enabled.

This allows tracers to fault-in userspace system call arguments such as
path strings within their probe callbacks.

Cc: Michael Jeanson
<[mjean...@efficios.com](mailto:mjean...@efficios.com)>  
Cc: Masami Hiramatsu
<[mhira...@kernel.org](mailto:mhira...@kernel.org)>  
Cc: Peter Zijlstra <[pet...@infradea.org](mailto:pet...@infradea.org)>
Cc: Alexei Starovoitov <[a...@kernel.org](mailto:a...@kernel.org)>  
Cc: Yonghong Song <[y...@fb.com](mailto:y...@fb.com)>  
Cc: Paul E. McKenney <[paul...@kernel.org](mailto:paul...@kernel.org)>
Cc: Ingo Molnar <[mi...@redhat.com](mailto:mi...@redhat.com)>  
Cc: Arnaldo Carvalho de Melo
<[a...@kernel.org](mailto:a...@kernel.org)>  
Cc: Mark Rutland <[mark.rutl...@arm.com](mailto:mark.rutl...@arm.com)>
Cc: Alexander Shishkin
<[alexander.shish...@linux.intel.com](mailto:alexander.shish...@linux.intel.com
)>  
Cc: Namhyung Kim <[namhy...@kernel.org](mailto:namhy...@kernel.org)>  
Cc: Andrii Nakryiko
<[andrii.nakry...@gmail.com](mailto:andrii.nakry...@gmail.com)>  
Cc: [b...@vger.kernel.org](mailto:b...@vger.kernel.org)  
Cc: Joel Fernandes
<[j...@joelfernandes.org](mailto:j...@joelfernandes.org)>  
Link:
[https://lore.kernel.org/20241009010718.2050182-6-mathieu.desnoy...@efficios.com](https://lore.kernel.org/20241009010718.2050182-6-mathieu.desnoy...@efficios.com)
 
Signed-off-by: Mathieu Desnoyers
<[mathieu.desnoy...@efficios.com](mailto:mathieu.desnoy...@efficios.com
)>  
Signed-off-by: Steven Rostedt (Google)
<[rost...@goodmis.org](mailto:rost...@goodmis.org)>

include/linux/tracepoint.h | 18 ++++++++++++++++--  
init/Kconfig               |  1 +  
2 files changed, 17 insertions(+), 2 deletions(-)  
```

List of files identified as problematic (on v6.15) :  
```  
/sys/kernel/tracing/events/alarmtimer/filter  
/sys/kernel/tracing/events/amd_cpu/filter  
/sys/kernel/tracing/events/avc/filter  
/sys/kernel/tracing/events/block/filter  
/sys/kernel/tracing/events/bpf_test_run/filter  
/sys/kernel/tracing/events/bpf_trace/filter  
/sys/kernel/tracing/events/bridge/filter  
/sys/kernel/tracing/events/btrfs/filter  
/sys/kernel/tracing/events/capability/filter  
/sys/kernel/tracing/events/cfg80211/filter  
/sys/kernel/tracing/events/cgroup/filter  
/sys/kernel/tracing/events/clk/filter  
/sys/kernel/tracing/events/compaction/filter  
/sys/kernel/tracing/events/context_tracking/filter  
/sys/kernel/tracing/events/cpuhp/filter  
/sys/kernel/tracing/events/cros_ec/filter  
/sys/kernel/tracing/events/csd/filter  
/sys/kernel/tracing/events/cxl/filter  
/sys/kernel/tracing/events/dev/filter  
/sys/kernel/tracing/events/devfreq/filter  
/sys/kernel/tracing/events/devlink/filter  
/sys/kernel/tracing/events/dma/filter  
/sys/kernel/tracing/events/dma_fence/filter  
/sys/kernel/tracing/events/drm/filter  
/sys/kernel/tracing/events/error_report/filter  
/sys/kernel/tracing/events/exceptions/filter  
/sys/kernel/tracing/events/ext4/filter  
/sys/kernel/tracing/events/fib/filter  
/sys/kernel/tracing/events/fib6/filter  
/sys/kernel/tracing/events/filelock/filter  
/sys/kernel/tracing/events/filemap/filter  
/sys/kernel/tracing/events/fs_dax/filter  
/sys/kernel/tracing/events/fuse/filter  
/sys/kernel/tracing/events/gpio/filter  
/sys/kernel/tracing/events/handshake/filter  
/sys/kernel/tracing/events/hugetlbfs/filter  
/sys/kernel/tracing/events/hwmon/filter  
/sys/kernel/tracing/events/hyperv/filter  
/sys/kernel/tracing/events/i2c/filter  
/sys/kernel/tracing/events/icmp/filter  
/sys/kernel/tracing/events/initcall/filter  
/sys/kernel/tracing/events/intel_ifs/filter  
/sys/kernel/tracing/events/intel_iommu/filter  
/sys/kernel/tracing/events/interconnect/filter  
/sys/kernel/tracing/events/io_uring/filter  
/sys/kernel/tracing/events/iocost/filter  
/sys/kernel/tracing/events/iomap/filter  
/sys/kernel/tracing/events/iommu/filter  
/sys/kernel/tracing/events/ipi/filter  
/sys/kernel/tracing/events/irq/filter  
/sys/kernel/tracing/events/irq_matrix/filter  
/sys/kernel/tracing/events/irq_vectors/filter  
/sys/kernel/tracing/events/jbd2/filter  
/sys/kernel/tracing/events/kmem/filter  
/sys/kernel/tracing/events/kvm/filter  
/sys/kernel/tracing/events/kvmmmu/filter  
/sys/kernel/tracing/events/libata/filter  
/sys/kernel/tracing/events/lock/filter  
/sys/kernel/tracing/events/maple_tree/filter  
/sys/kernel/tracing/events/mce/filter  
/sys/kernel/tracing/events/mctp/filter  
/sys/kernel/tracing/events/mdio/filter  
/sys/kernel/tracing/events/mei/filter  
/sys/kernel/tracing/events/memcg/filter  
/sys/kernel/tracing/events/migrate/filter  
/sys/kernel/tracing/events/mmap/filter  
/sys/kernel/tracing/events/mmap_lock/filter  
/sys/kernel/tracing/events/mmc/filter  
/sys/kernel/tracing/events/module/filter  
/sys/kernel/tracing/events/mptcp/filter  
/sys/kernel/tracing/events/msr/filter  
/sys/kernel/tracing/events/napi/filter  
/sys/kernel/tracing/events/neigh/filter  
/sys/kernel/tracing/events/net/filter  
/sys/kernel/tracing/events/netlink/filter  
/sys/kernel/tracing/events/nmi/filter  
/sys/kernel/tracing/events/notifier/filter  
/sys/kernel/tracing/events/oom/filter  
/sys/kernel/tracing/events/osnoise/filter  
/sys/kernel/tracing/events/page_isolation/filter  
/sys/kernel/tracing/events/page_pool/filter  
/sys/kernel/tracing/events/pagemap/filter  
/sys/kernel/tracing/events/percpu/filter  
/sys/kernel/tracing/events/power/filter  
/sys/kernel/tracing/events/printk/filter  
/sys/kernel/tracing/events/pwm/filter  
/sys/kernel/tracing/events/qdisc/filter  
/sys/kernel/tracing/events/qrtr/filter  
/sys/kernel/tracing/events/ras/filter  
/sys/kernel/tracing/events/raw_syscalls/filter  
/sys/kernel/tracing/events/rcu/filter  
/sys/kernel/tracing/events/regmap/filter  
/sys/kernel/tracing/events/regulator/filter  
/sys/kernel/tracing/events/resctrl/filter  
/sys/kernel/tracing/events/rpm/filter  
/sys/kernel/tracing/events/rseq/filter  
/sys/kernel/tracing/events/rtc/filter  
/sys/kernel/tracing/events/rv/filter  
/sys/kernel/tracing/events/sched/filter  
/sys/kernel/tracing/events/scsi/filter  
/sys/kernel/tracing/events/sd/filter  
/sys/kernel/tracing/events/signal/filter  
/sys/kernel/tracing/events/skb/filter  
/sys/kernel/tracing/events/smbus/filter  
/sys/kernel/tracing/events/sock/filter  
/sys/kernel/tracing/events/spi/filter  
/sys/kernel/tracing/events/swiotlb/filter  
/sys/kernel/tracing/events/sync_trace/filter  
/sys/kernel/tracing/events/syscalls/filter  
/sys/kernel/tracing/events/task/filter  
/sys/kernel/tracing/events/tcp/filter  
/sys/kernel/tracing/events/thermal/filter  
/sys/kernel/tracing/events/thermal_power_allocator/filter  
/sys/kernel/tracing/events/timer/filter  
/sys/kernel/tracing/events/timer_migration/filter  
/sys/kernel/tracing/events/timestamp/filter  
/sys/kernel/tracing/events/tlb/filter  
/sys/kernel/tracing/events/udp/filter  
/sys/kernel/tracing/events/vmalloc/filter  
/sys/kernel/tracing/events/vmscan/filter  
/sys/kernel/tracing/events/vsock/filter  
/sys/kernel/tracing/events/vsyscall/filter  
/sys/kernel/tracing/events/watchdog/filter  
/sys/kernel/tracing/events/wbt/filter  
/sys/kernel/tracing/events/workqueue/filter  
/sys/kernel/tracing/events/writeback/filter  
/sys/kernel/tracing/events/x86_fpu/filter  
/sys/kernel/tracing/events/xdp/filter  
/sys/kernel/tracing/events/xen/filter  
/sys/kernel/tracing/events/xhci-hcd/filter  
```

Reply via email to