]> git.ipfire.org Git - ipfire-2.x.git/blob - src/patches/suse-2.6.27.31/patches.trace/lttng-instrumentation-socket.patch
6a58c8af44d7d63dad04324f2d5d47726626b21a
[ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.trace / lttng-instrumentation-socket.patch
1 From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
2 Subject: LTTng instrumentation - socket
3
4 Original patch header:
5 LTTng instrumentation - socket
6
7 Instrument socket creation and activity (msg send, receive). Socket "call"
8 instrumentation should be completed.
9
10 Those tracepoints are used by LTTng.
11
12 About the performance impact of tracepoints (which is comparable to markers),
13 even without immediate values optimizations, tests done by Hideo Aoki on ia64
14 show no regression. His test case was using hackbench on a kernel where
15 scheduler instrumentation (about 5 events in code scheduler code) was added.
16 See the "Tracepoints" patch header for performance result detail.
17
18 Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
19 CC: netdev@vger.kernel.org
20 CC: David S. Miller <davem@davemloft.net>
21 CC: Masami Hiramatsu <mhiramat@redhat.com>
22 CC: 'Peter Zijlstra' <peterz@infradead.org>
23 CC: "Frank Ch. Eigler" <fche@redhat.com>
24 CC: 'Ingo Molnar' <mingo@elte.hu>
25 CC: 'Hideo AOKI' <haoki@redhat.com>
26 CC: Takashi Nishiie <t-nishiie@np.css.fujitsu.com>
27 CC: 'Steven Rostedt' <rostedt@goodmis.org>
28 CC: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
29
30 Acked-by: Jan Blunck <jblunck@suse.de>
31 ---
32 ---
33 include/trace/socket.h | 26 ++++++++++++++++++++++++++
34 net/socket.c | 7 +++++++
35 2 files changed, 33 insertions(+)
36
37 --- /dev/null
38 +++ b/include/trace/socket.h
39 @@ -0,0 +1,26 @@
40 +#ifndef _TRACE_SOCKET_H
41 +#define _TRACE_SOCKET_H
42 +
43 +#include <net/sock.h>
44 +#include <linux/tracepoint.h>
45 +
46 +DEFINE_TRACE(socket_sendmsg,
47 + TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int ret),
48 + TPARGS(sock, msg, size, ret));
49 +DEFINE_TRACE(socket_recvmsg,
50 + TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int flags,
51 + int ret),
52 + TPARGS(sock, msg, size, flags, ret));
53 +DEFINE_TRACE(socket_create,
54 + TPPROTO(struct socket *sock, int fd),
55 + TPARGS(sock, fd));
56 +/*
57 + * socket_call
58 + *
59 + * TODO : This tracepoint should be expanded to cover each element of the
60 + * switch in sys_socketcall().
61 + */
62 +DEFINE_TRACE(socket_call,
63 + TPPROTO(int call, unsigned long a0),
64 + TPARGS(call, a0));
65 +#endif
66 --- a/net/socket.c
67 +++ b/net/socket.c
68 @@ -96,6 +96,7 @@
69
70 #include <net/sock.h>
71 #include <linux/netfilter.h>
72 +#include <trace/socket.h>
73
74 static int sock_no_open(struct inode *irrelevant, struct file *dontcare);
75 static ssize_t sock_aio_read(struct kiocb *iocb, const struct iovec *iov,
76 @@ -575,6 +576,7 @@ int sock_sendmsg(struct socket *sock, st
77 ret = __sock_sendmsg(&iocb, sock, msg, size);
78 if (-EIOCBQUEUED == ret)
79 ret = wait_on_sync_kiocb(&iocb);
80 + trace_socket_sendmsg(sock, msg, size, ret);
81 return ret;
82 }
83
84 @@ -654,10 +656,12 @@ int sock_recvmsg(struct socket *sock, st
85 int ret;
86
87 init_sync_kiocb(&iocb, NULL);
88 +
89 iocb.private = &siocb;
90 ret = __sock_recvmsg(&iocb, sock, msg, size, flags);
91 if (-EIOCBQUEUED == ret)
92 ret = wait_on_sync_kiocb(&iocb);
93 + trace_socket_recvmsg(sock, msg, size, flags, ret);
94 return ret;
95 }
96
97 @@ -1244,6 +1248,7 @@ SYSCALL_DEFINE3(socket, int, family, int
98 if (retval < 0)
99 goto out_release;
100
101 + trace_socket_create(sock, retval);
102 out:
103 /* It may be already another descriptor 8) Not kernel problem. */
104 return retval;
105 @@ -2131,6 +2136,8 @@ SYSCALL_DEFINE2(socketcall, int, call, u
106 a0 = a[0];
107 a1 = a[1];
108
109 + trace_socket_call(call, a0);
110 +
111 switch (call) {
112 case SYS_SOCKET:
113 err = sys_socket(a0, a1, a[2]);