net: skb ftracer - add tracepoint to skb_copy_datagram_iovec (v3)
skb allocation / cosumption tracer - Add consumption tracepoint This patch adds a tracepoint to skb_copy_datagram_iovec, which is called each time a userspace process copies a frame from a socket receive queue to a user space buffer. It allows us to hook in and examine each sk_buff that the system receives on a per-socket bases, and can be use to compile a list of which skb's were received by which processes. Signed-off-by: Neil Horman <nhorman@tuxdriver.com> include/trace/events/skb.h | 20 ++++++++++++++++++++ net/core/datagram.c | 3 +++ 2 files changed, 23 insertions(+) Signed-off-by: David S. Miller <davem@davemloft.net>hifive-unleashed-5.1
parent
1e5053b763
commit
e9b3cc1b37
|
@ -5,6 +5,7 @@
|
||||||
#define _TRACE_SKB_H
|
#define _TRACE_SKB_H
|
||||||
|
|
||||||
#include <linux/skbuff.h>
|
#include <linux/skbuff.h>
|
||||||
|
#include <linux/netdevice.h>
|
||||||
#include <linux/tracepoint.h>
|
#include <linux/tracepoint.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -34,6 +35,25 @@ TRACE_EVENT(kfree_skb,
|
||||||
__entry->skbaddr, __entry->protocol, __entry->location)
|
__entry->skbaddr, __entry->protocol, __entry->location)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
TRACE_EVENT(skb_copy_datagram_iovec,
|
||||||
|
|
||||||
|
TP_PROTO(const struct sk_buff *skb, int len),
|
||||||
|
|
||||||
|
TP_ARGS(skb, len),
|
||||||
|
|
||||||
|
TP_STRUCT__entry(
|
||||||
|
__field( const void *, skbaddr )
|
||||||
|
__field( int, len )
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_fast_assign(
|
||||||
|
__entry->skbaddr = skb;
|
||||||
|
__entry->len = len;
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_printk("skbaddr=%p len=%d", __entry->skbaddr, __entry->len)
|
||||||
|
);
|
||||||
|
|
||||||
#endif /* _TRACE_SKB_H */
|
#endif /* _TRACE_SKB_H */
|
||||||
|
|
||||||
/* This part must be outside protection */
|
/* This part must be outside protection */
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
#include <net/checksum.h>
|
#include <net/checksum.h>
|
||||||
#include <net/sock.h>
|
#include <net/sock.h>
|
||||||
#include <net/tcp_states.h>
|
#include <net/tcp_states.h>
|
||||||
|
#include <trace/events/skb.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Is a socket 'connection oriented' ?
|
* Is a socket 'connection oriented' ?
|
||||||
|
@ -284,6 +285,8 @@ int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset,
|
||||||
int i, copy = start - offset;
|
int i, copy = start - offset;
|
||||||
struct sk_buff *frag_iter;
|
struct sk_buff *frag_iter;
|
||||||
|
|
||||||
|
trace_skb_copy_datagram_iovec(skb, len);
|
||||||
|
|
||||||
/* Copy header. */
|
/* Copy header. */
|
||||||
if (copy > 0) {
|
if (copy > 0) {
|
||||||
if (copy > len)
|
if (copy > len)
|
||||||
|
|
Loading…
Reference in New Issue