• Jesper Dangaard Brouer's avatar
    selftests/bpf: xdp_hw_metadata track more timestamps · bb323478
    Jesper Dangaard Brouer authored
    To correlate the hardware RX timestamp with something, add tracking of
    two software timestamps both clock source CLOCK_TAI (see description in
    man clock_gettime(2)).
    
    XDP metadata is extended with xdp_timestamp for capturing when XDP
    received the packet. Populated with BPF helper bpf_ktime_get_tai_ns(). I
    could not find a BPF helper for getting CLOCK_REALTIME, which would have
    been preferred. In userspace when AF_XDP sees the packet another
    software timestamp is recorded via clock_gettime() also clock source
    CLOCK_TAI.
    
    Example output shortly after loading igc driver:
    
      poll: 1 (0) skip=1 fail=0 redir=2
      xsk_ring_cons__peek: 1
      0x12557a8: rx_desc[1]->addr=100000000009000 addr=9100 comp_addr=9000
      rx_hash: 0x82A96531 with RSS type:0x1
      rx_timestamp:  1681740540304898909 (sec:1681740540.3049)
      XDP RX-time:   1681740577304958316 (sec:1681740577.3050) delta sec:37.0001 (37000059.407 usec)
      AF_XDP time:   1681740577305051315 (sec:1681740577.3051) delta sec:0.0001 (92.999 usec)
      0x12557a8: complete idx=9 addr=9000
    
    The first observation is that the 37 sec difference between RX HW vs XDP
    timestamps, which indicate hardware is likely clock source
    CLOCK_REALTIME, because (as of this writing) CLOCK_TAI is initialised
    with a 37 sec offset.
    
    The 93 usec (microsec) difference between XDP vs AF_XDP userspace is the
    userspace wakeup time. On this hardware it was caused by CPU idle sleep
    states, which can be reduced by tuning /dev/cpu_dma_latency.
    
    View current requested/allowed latency bound via:
      hexdump --format '"%d\n"' /dev/cpu_dma_latency
    
    More explanation of the output and how this can be used to identify
    clock drift for the HW clock can be seen here[1]:
    
    [1] https://github.com/xdp-project/xdp-project/blob/master/areas/hints/xdp_hints_kfuncs02_driver_igc.orgSigned-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarStanislav Fomichev <sdf@google.com>
    Acked-by: default avatarSong Yoong Siang <yoong.siang.song@intel.com>
    Link: https://lore.kernel.org/bpf/168182466298.616355.2544377890818617459.stgit@firesoul
    bb323478
xdp_hw_metadata.c 11.2 KB