tcp: add earliest departure time to SCM_TIMESTAMPING_OPT_STATS
This change adds TCP_NLA_EDT to SCM_TIMESTAMPING_OPT_STATS that reports the earliest departure time(EDT) of the timestamped skb. By tracking EDT values of the skb from different timestamps, we can observe when and how much the value changed. This allows to measure the precise delay injected on the sender host e.g. by a bpf-base throttler. Signed-off-by: Yousuk Seung <ysseung@google.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Acked-by: Neal Cardwell <ncardwell@google.com> Acked-by: Soheil Hassas Yeganeh <soheil@google.com> Acked-by: Yuchung Cheng <ycheng@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
c6886957d2
commit
48040793fa
@@ -4692,7 +4692,7 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb,
|
||||
if ((sk->sk_tsflags & SOF_TIMESTAMPING_OPT_STATS) &&
|
||||
sk->sk_protocol == IPPROTO_TCP &&
|
||||
sk->sk_type == SOCK_STREAM) {
|
||||
skb = tcp_get_timestamping_opt_stats(sk);
|
||||
skb = tcp_get_timestamping_opt_stats(sk, orig_skb);
|
||||
opt_stats = true;
|
||||
} else
|
||||
#endif
|
||||
|
@@ -3501,10 +3501,12 @@ static size_t tcp_opt_stats_get_size(void)
|
||||
nla_total_size(sizeof(u32)) + /* TCP_NLA_SRTT */
|
||||
nla_total_size(sizeof(u16)) + /* TCP_NLA_TIMEOUT_REHASH */
|
||||
nla_total_size(sizeof(u32)) + /* TCP_NLA_BYTES_NOTSENT */
|
||||
nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_EDT */
|
||||
0;
|
||||
}
|
||||
|
||||
struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk)
|
||||
struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk,
|
||||
const struct sk_buff *orig_skb)
|
||||
{
|
||||
const struct tcp_sock *tp = tcp_sk(sk);
|
||||
struct sk_buff *stats;
|
||||
@@ -3558,6 +3560,8 @@ struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk)
|
||||
nla_put_u16(stats, TCP_NLA_TIMEOUT_REHASH, tp->timeout_rehash);
|
||||
nla_put_u32(stats, TCP_NLA_BYTES_NOTSENT,
|
||||
max_t(int, 0, tp->write_seq - tp->snd_nxt));
|
||||
nla_put_u64_64bit(stats, TCP_NLA_EDT, orig_skb->skb_mstamp_ns,
|
||||
TCP_NLA_PAD);
|
||||
|
||||
return stats;
|
||||
}
|
||||
|
Reference in New Issue
Block a user