-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
core: add tracepoints for queueing skb to rcvbuf
This patch adds 2 tracepoints to get a status of a socket receive queue and related parameter. One tracepoint is added to sock_queue_rcv_skb. It records rcvbuf size and its usage. The other tracepoint is added to __sk_mem_schedule and it records limitations of memory for sockets and current usage. By using these tracepoints we're able to know detailed reason why kernel drop the packet. Signed-off-by: Satoru Moriya <satoru.moriya@hds.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
- Loading branch information
Satoru Moriya
authored and
David S. Miller
committed
Jun 21, 2011
1 parent
296f7ea
commit 3847ce3
Showing
3 changed files
with
74 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
#undef TRACE_SYSTEM | ||
#define TRACE_SYSTEM sock | ||
|
||
#if !defined(_TRACE_SOCK_H) || defined(TRACE_HEADER_MULTI_READ) | ||
#define _TRACE_SOCK_H | ||
|
||
#include <net/sock.h> | ||
#include <linux/tracepoint.h> | ||
|
||
TRACE_EVENT(sock_rcvqueue_full, | ||
|
||
TP_PROTO(struct sock *sk, struct sk_buff *skb), | ||
|
||
TP_ARGS(sk, skb), | ||
|
||
TP_STRUCT__entry( | ||
__field(int, rmem_alloc) | ||
__field(unsigned int, truesize) | ||
__field(int, sk_rcvbuf) | ||
), | ||
|
||
TP_fast_assign( | ||
__entry->rmem_alloc = atomic_read(&sk->sk_rmem_alloc); | ||
__entry->truesize = skb->truesize; | ||
__entry->sk_rcvbuf = sk->sk_rcvbuf; | ||
), | ||
|
||
TP_printk("rmem_alloc=%d truesize=%u sk_rcvbuf=%d", | ||
__entry->rmem_alloc, __entry->truesize, __entry->sk_rcvbuf) | ||
); | ||
|
||
TRACE_EVENT(sock_exceed_buf_limit, | ||
|
||
TP_PROTO(struct sock *sk, struct proto *prot, long allocated), | ||
|
||
TP_ARGS(sk, prot, allocated), | ||
|
||
TP_STRUCT__entry( | ||
__array(char, name, 32) | ||
__field(long *, sysctl_mem) | ||
__field(long, allocated) | ||
__field(int, sysctl_rmem) | ||
__field(int, rmem_alloc) | ||
), | ||
|
||
TP_fast_assign( | ||
strncpy(__entry->name, prot->name, 32); | ||
__entry->sysctl_mem = prot->sysctl_mem; | ||
__entry->allocated = allocated; | ||
__entry->sysctl_rmem = prot->sysctl_rmem[0]; | ||
__entry->rmem_alloc = atomic_read(&sk->sk_rmem_alloc); | ||
), | ||
|
||
TP_printk("proto:%s sysctl_mem=%ld,%ld,%ld allocated=%ld " | ||
"sysctl_rmem=%d rmem_alloc=%d", | ||
__entry->name, | ||
__entry->sysctl_mem[0], | ||
__entry->sysctl_mem[1], | ||
__entry->sysctl_mem[2], | ||
__entry->allocated, | ||
__entry->sysctl_rmem, | ||
__entry->rmem_alloc) | ||
); | ||
|
||
#endif /* _TRACE_SOCK_H */ | ||
|
||
/* This part must be outside protection */ | ||
#include <trace/define_trace.h> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters