Jason Xing wrote: > From: Jason Xing <kernelxing@xxxxxxxxxxx> > > A few weeks ago, I planned to extend SO_TIMESTMAMPING feature by using > tracepoint to print information (say, tstamp) so that we can > transparently equip applications with this feature and require no > modification in user side. > > Later, we discussed at netconf and agreed that we can use bpf for better > extension, which is mainly suggested by John Fastabend and Willem de > Bruijn. Many thanks here! So I post this series to see if we have a > better solution to extend. > > This approach relies on existing SO_TIMESTAMPING feature, for tx path, > users only needs to pass certain flags through bpf program to make sure > the last skb from each sendmsg() has timestamp related controlled flag. > For rx path, we have to use bpf_setsockopt() to set the sk->sk_tsflags > and wait for the moment when recvmsg() is called. As you mention, overall I am very supportive of having a way to add timestamping by adminstrators, without having to rebuild applications. BPF hooks seem to be the right place for this. There is existing kprobe/kretprobe/kfunc support. Supporting SO_TIMESTAMPING directly may be useful due to its targeted feature set, and correlation between measurements for the same data in the stream. > After this series, we could step by step implement more advanced > functions/flags already in SO_TIMESTAMPING feature for bpf extension. My main implementation concern is where this API overlaps with the existing user API, and how they might conflict. A few questions in the patches. Also, I'm not the best person to give in-depth BPF feedback. > Here is the test output: > 1) receive path > iperf3-987305 [008] ...11 179955.200990: bpf_trace_printk: rx: port: 5201:55192, swtimestamp: 1728167973,670426346, hwtimestamp: 0,0 > 2) xmit path > iperf3-19765 [013] ...11 2021.329602: bpf_trace_printk: tx: port: 47528:5201, key: 1036, timestamp: 1728357067,436678584 > iperf3-19765 [013] b..11 2021.329611: bpf_trace_printk: tx: port: 47528:5201, key: 1036, timestamp: 1728357067,436689976 > iperf3-19765 [013] ...11 2021.329622: bpf_trace_printk: tx: port: 47528:5201, key: 1036, timestamp: 1728357067,436700739