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>
This commit is contained in:
Родитель
1e5053b763
Коммит
e9b3cc1b37
|
@ -5,6 +5,7 @@
|
|||
#define _TRACE_SKB_H
|
||||
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
/*
|
||||
|
@ -34,6 +35,25 @@ TRACE_EVENT(kfree_skb,
|
|||
__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 */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
|
|
@ -55,6 +55,7 @@
|
|||
#include <net/checksum.h>
|
||||
#include <net/sock.h>
|
||||
#include <net/tcp_states.h>
|
||||
#include <trace/events/skb.h>
|
||||
|
||||
/*
|
||||
* 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;
|
||||
struct sk_buff *frag_iter;
|
||||
|
||||
trace_skb_copy_datagram_iovec(skb, len);
|
||||
|
||||
/* Copy header. */
|
||||
if (copy > 0) {
|
||||
if (copy > len)
|
||||
|
|
Загрузка…
Ссылка в новой задаче