ANDROID: vendor_hooks: Add hooks to tcp/udp send/recv msg functions.

Add hook to tcp/udp to collect network info and do performance tuning.

Bug: 190523684

Change-Id: Id790a381d5ce6c35a747697510f14678ccf3ff2f
Signed-off-by: Liangliang Li <liliangliang@vivo.com>
(cherry picked from commit 81c8161bed77ae0da88c78ff822220ba1a2a7a8a)
This commit is contained in:
Liangliang Li 2021-06-09 20:45:29 +08:00 committed by Todd Kjos
parent cabca1b98e
commit e4e3aadd01
4 changed files with 48 additions and 0 deletions

View File

@ -65,6 +65,7 @@
#include <trace/hooks/dmabuf.h>
#include <trace/hooks/mmc.h>
#include <trace/hooks/evdev.h>
#include <trace/hooks/ipv4.h>
/*
* Export tracepoints that act as a bare tracehook (ie: have no trace event
@ -324,3 +325,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_try_to_unmap_one);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node_memcgs);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_sdio_pm_flag_set);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_account_task_time);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tcp_sendmsg_locked);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tcp_recvmsg);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_udp_sendmsg);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_udp_recvmsg);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tcp_recvmsg_stat);

View File

@ -0,0 +1,34 @@
/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM ipv4
#define TRACE_INCLUDE_PATH trace/hooks
#if !defined(_TRACE_HOOK_IPV4_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_IPV4_H
#include <linux/tracepoint.h>
#include <trace/hooks/vendor_hooks.h>
DECLARE_RESTRICTED_HOOK(android_rvh_tcp_sendmsg_locked,
TP_PROTO(struct sock *sk, int size),
TP_ARGS(sk, size), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_tcp_recvmsg,
TP_PROTO(struct sock *sk),
TP_ARGS(sk), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_udp_sendmsg,
TP_PROTO(struct sock *sk),
TP_ARGS(sk), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_udp_recvmsg,
TP_PROTO(struct sock *sk),
TP_ARGS(sk), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_tcp_recvmsg_stat,
TP_PROTO(struct sock *sk, int size),
TP_ARGS(sk, size), 1);
#endif /* _TRACE_HOOK_IPV4_H */
/* This part must be outside protection */
#include <trace/define_trace.h>

View File

@ -281,6 +281,8 @@
#include <asm/ioctls.h>
#include <net/busy_poll.h>
#include <trace/hooks/ipv4.h>
/* Track pending CMSGs. */
enum {
TCP_CMSG_INQ = 1,
@ -1209,6 +1211,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
bool zc = false;
long timeo;
trace_android_rvh_tcp_sendmsg_locked(sk, size);
flags = msg->msg_flags;
if (flags & MSG_ZEROCOPY && size && sock_flag(sk, SOCK_ZEROCOPY)) {
@ -2516,6 +2519,7 @@ static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
break;
} while (len > 0);
trace_android_rvh_tcp_recvmsg_stat(sk, copied);
/* According to UNIX98, msg_name/msg_namelen are ignored
* on connected socket. I was just happy when found this 8) --ANK
*/
@ -2544,6 +2548,7 @@ int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
if (unlikely(flags & MSG_ERRQUEUE))
return inet_recv_error(sk, msg, len, addr_len);
trace_android_rvh_tcp_recvmsg(sk);
if (sk_can_busy_loop(sk) &&
skb_queue_empty_lockless(&sk->sk_receive_queue) &&

View File

@ -116,6 +116,7 @@
#if IS_ENABLED(CONFIG_IPV6)
#include <net/ipv6_stubs.h>
#endif
#include <trace/hooks/ipv4.h>
struct udp_table udp_table __read_mostly;
EXPORT_SYMBOL(udp_table);
@ -1068,6 +1069,7 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
if (msg->msg_flags & MSG_OOB) /* Mirror BSD error message compatibility */
return -EOPNOTSUPP;
trace_android_rvh_udp_sendmsg(sk);
getfrag = is_udplite ? udplite_getfrag : ip_generic_getfrag;
@ -1862,6 +1864,7 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
skb = __skb_recv_udp(sk, flags, noblock, &off, &err);
if (!skb)
return err;
trace_android_rvh_udp_recvmsg(sk);
ulen = udp_skb_len(skb);
copied = len;