diff options
| author | Willem de Bruijn <willemb@google.com> | 2014-08-04 22:11:48 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-08-05 19:35:54 -0400 |
| commit | e7fd2885385157d46c85f282fc6d7d297db43e1f (patch) | |
| tree | 14e9d00ed87b2b45882c8cb8dd1b9b4d221724f8 /include | |
| parent | 09c2d251b70723650ba47e83571ff49281320f7c (diff) | |
net-timestamp: SCHED timestamp on entering packet scheduler
Kernel transmit latency is often incurred in the packet scheduler.
Introduce a new timestamp on transmission just before entering the
scheduler. When data travels through multiple devices (bonding,
tunneling, ...) each device will export an individual timestamp.
Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/skbuff.h | 11 | ||||
| -rw-r--r-- | include/uapi/linux/errqueue.h | 1 | ||||
| -rw-r--r-- | include/uapi/linux/net_tstamp.h | 3 |
3 files changed, 12 insertions, 3 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 0e35b3af7317..50e1e9b3a5a5 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -229,7 +229,7 @@ enum { | |||
| 229 | /* generate hardware time stamp */ | 229 | /* generate hardware time stamp */ |
| 230 | SKBTX_HW_TSTAMP = 1 << 0, | 230 | SKBTX_HW_TSTAMP = 1 << 0, |
| 231 | 231 | ||
| 232 | /* generate software time stamp */ | 232 | /* generate software time stamp when queueing packet to NIC */ |
| 233 | SKBTX_SW_TSTAMP = 1 << 1, | 233 | SKBTX_SW_TSTAMP = 1 << 1, |
| 234 | 234 | ||
| 235 | /* device driver is going to provide hardware time stamp */ | 235 | /* device driver is going to provide hardware time stamp */ |
| @@ -247,9 +247,12 @@ enum { | |||
| 247 | * all frags to avoid possible bad checksum | 247 | * all frags to avoid possible bad checksum |
| 248 | */ | 248 | */ |
| 249 | SKBTX_SHARED_FRAG = 1 << 5, | 249 | SKBTX_SHARED_FRAG = 1 << 5, |
| 250 | |||
| 251 | /* generate software time stamp when entering packet scheduling */ | ||
| 252 | SKBTX_SCHED_TSTAMP = 1 << 6, | ||
| 250 | }; | 253 | }; |
| 251 | 254 | ||
| 252 | #define SKBTX_ANY_SW_TSTAMP SKBTX_SW_TSTAMP | 255 | #define SKBTX_ANY_SW_TSTAMP (SKBTX_SW_TSTAMP | SKBTX_SCHED_TSTAMP) |
| 253 | #define SKBTX_ANY_TSTAMP (SKBTX_HW_TSTAMP | SKBTX_ANY_SW_TSTAMP) | 256 | #define SKBTX_ANY_TSTAMP (SKBTX_HW_TSTAMP | SKBTX_ANY_SW_TSTAMP) |
| 254 | 257 | ||
| 255 | /* | 258 | /* |
| @@ -2695,6 +2698,10 @@ static inline bool skb_defer_rx_timestamp(struct sk_buff *skb) | |||
| 2695 | void skb_complete_tx_timestamp(struct sk_buff *skb, | 2698 | void skb_complete_tx_timestamp(struct sk_buff *skb, |
| 2696 | struct skb_shared_hwtstamps *hwtstamps); | 2699 | struct skb_shared_hwtstamps *hwtstamps); |
| 2697 | 2700 | ||
| 2701 | void __skb_tstamp_tx(struct sk_buff *orig_skb, | ||
| 2702 | struct skb_shared_hwtstamps *hwtstamps, | ||
| 2703 | struct sock *sk, int tstype); | ||
| 2704 | |||
| 2698 | /** | 2705 | /** |
| 2699 | * skb_tstamp_tx - queue clone of skb with send time stamps | 2706 | * skb_tstamp_tx - queue clone of skb with send time stamps |
| 2700 | * @orig_skb: the original outgoing packet | 2707 | * @orig_skb: the original outgoing packet |
diff --git a/include/uapi/linux/errqueue.h b/include/uapi/linux/errqueue.h index accee72cae7c..17437cf297b7 100644 --- a/include/uapi/linux/errqueue.h +++ b/include/uapi/linux/errqueue.h | |||
| @@ -39,6 +39,7 @@ struct scm_timestamping { | |||
| 39 | */ | 39 | */ |
| 40 | enum { | 40 | enum { |
| 41 | SCM_TSTAMP_SND, /* driver passed skb to NIC, or HW */ | 41 | SCM_TSTAMP_SND, /* driver passed skb to NIC, or HW */ |
| 42 | SCM_TSTAMP_SCHED, /* data entered the packet scheduler */ | ||
| 42 | }; | 43 | }; |
| 43 | 44 | ||
| 44 | #endif /* _UAPI_LINUX_ERRQUEUE_H */ | 45 | #endif /* _UAPI_LINUX_ERRQUEUE_H */ |
diff --git a/include/uapi/linux/net_tstamp.h b/include/uapi/linux/net_tstamp.h index 1e861d2e1a31..60733845fcdd 100644 --- a/include/uapi/linux/net_tstamp.h +++ b/include/uapi/linux/net_tstamp.h | |||
| @@ -21,8 +21,9 @@ enum { | |||
| 21 | SOF_TIMESTAMPING_SYS_HARDWARE = (1<<5), | 21 | SOF_TIMESTAMPING_SYS_HARDWARE = (1<<5), |
| 22 | SOF_TIMESTAMPING_RAW_HARDWARE = (1<<6), | 22 | SOF_TIMESTAMPING_RAW_HARDWARE = (1<<6), |
| 23 | SOF_TIMESTAMPING_OPT_ID = (1<<7), | 23 | SOF_TIMESTAMPING_OPT_ID = (1<<7), |
| 24 | SOF_TIMESTAMPING_TX_SCHED = (1<<8), | ||
| 24 | 25 | ||
| 25 | SOF_TIMESTAMPING_LAST = SOF_TIMESTAMPING_OPT_ID, | 26 | SOF_TIMESTAMPING_LAST = SOF_TIMESTAMPING_TX_SCHED, |
| 26 | SOF_TIMESTAMPING_MASK = (SOF_TIMESTAMPING_LAST - 1) | | 27 | SOF_TIMESTAMPING_MASK = (SOF_TIMESTAMPING_LAST - 1) | |
| 27 | SOF_TIMESTAMPING_LAST | 28 | SOF_TIMESTAMPING_LAST |
| 28 | }; | 29 | }; |
