Skip to content

Commit 70a60cb

Browse files
committed
SUNRPC: Record endpoint information in trace log
To make server-side trace events more useful in container-ized environments, capture not just the remote's IP address, but the local IP address and network namespace as well. Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
1 parent aca3ed7 commit 70a60cb

1 file changed

Lines changed: 78 additions & 48 deletions

File tree

include/trace/events/sunrpc.h

Lines changed: 78 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1625,26 +1625,53 @@ TRACE_DEFINE_ENUM(SVC_COMPLETE);
16251625
{ SVC_PENDING, "SVC_PENDING" }, \
16261626
{ SVC_COMPLETE, "SVC_COMPLETE" })
16271627

1628+
#define SVC_RQST_ENDPOINT_FIELDS(r) \
1629+
__sockaddr(server, (r)->rq_xprt->xpt_locallen) \
1630+
__sockaddr(client, (r)->rq_xprt->xpt_remotelen) \
1631+
__field(unsigned int, netns_ino) \
1632+
__field(u32, xid)
1633+
1634+
#define SVC_RQST_ENDPOINT_ASSIGNMENTS(r) \
1635+
do { \
1636+
struct svc_xprt *xprt = (r)->rq_xprt; \
1637+
__assign_sockaddr(server, &xprt->xpt_local, \
1638+
xprt->xpt_locallen); \
1639+
__assign_sockaddr(client, &xprt->xpt_remote, \
1640+
xprt->xpt_remotelen); \
1641+
__entry->netns_ino = xprt->xpt_net->ns.inum; \
1642+
__entry->xid = be32_to_cpu((r)->rq_xid); \
1643+
} while (0)
1644+
1645+
#define SVC_RQST_ENDPOINT_FORMAT \
1646+
"xid=0x%08x server=%pISpc client=%pISpc"
1647+
1648+
#define SVC_RQST_ENDPOINT_VARARGS \
1649+
__entry->xid, __get_sockaddr(server), __get_sockaddr(client)
1650+
16281651
TRACE_EVENT(svc_authenticate,
16291652
TP_PROTO(const struct svc_rqst *rqst, int auth_res),
16301653

16311654
TP_ARGS(rqst, auth_res),
16321655

16331656
TP_STRUCT__entry(
1634-
__field(u32, xid)
1657+
SVC_RQST_ENDPOINT_FIELDS(rqst)
1658+
16351659
__field(unsigned long, svc_status)
16361660
__field(unsigned long, auth_stat)
16371661
),
16381662

16391663
TP_fast_assign(
1640-
__entry->xid = be32_to_cpu(rqst->rq_xid);
1664+
SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
1665+
16411666
__entry->svc_status = auth_res;
16421667
__entry->auth_stat = be32_to_cpu(rqst->rq_auth_stat);
16431668
),
16441669

1645-
TP_printk("xid=0x%08x auth_res=%s auth_stat=%s",
1646-
__entry->xid, svc_show_status(__entry->svc_status),
1647-
rpc_show_auth_stat(__entry->auth_stat))
1670+
TP_printk(SVC_RQST_ENDPOINT_FORMAT
1671+
" auth_res=%s auth_stat=%s",
1672+
SVC_RQST_ENDPOINT_VARARGS,
1673+
svc_show_status(__entry->svc_status),
1674+
rpc_show_auth_stat(__entry->auth_stat))
16481675
);
16491676

16501677
TRACE_EVENT(svc_process,
@@ -1680,28 +1707,27 @@ TRACE_EVENT(svc_process,
16801707
);
16811708

16821709
DECLARE_EVENT_CLASS(svc_rqst_event,
1683-
16841710
TP_PROTO(
16851711
const struct svc_rqst *rqst
16861712
),
16871713

16881714
TP_ARGS(rqst),
16891715

16901716
TP_STRUCT__entry(
1691-
__field(u32, xid)
1717+
SVC_RQST_ENDPOINT_FIELDS(rqst)
1718+
16921719
__field(unsigned long, flags)
1693-
__string(addr, rqst->rq_xprt->xpt_remotebuf)
16941720
),
16951721

16961722
TP_fast_assign(
1697-
__entry->xid = be32_to_cpu(rqst->rq_xid);
1723+
SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
1724+
16981725
__entry->flags = rqst->rq_flags;
1699-
__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
17001726
),
17011727

1702-
TP_printk("addr=%s xid=0x%08x flags=%s",
1703-
__get_str(addr), __entry->xid,
1704-
show_rqstp_flags(__entry->flags))
1728+
TP_printk(SVC_RQST_ENDPOINT_FORMAT " flags=%s",
1729+
SVC_RQST_ENDPOINT_VARARGS,
1730+
show_rqstp_flags(__entry->flags))
17051731
);
17061732
#define DEFINE_SVC_RQST_EVENT(name) \
17071733
DEFINE_EVENT(svc_rqst_event, svc_##name, \
@@ -1714,34 +1740,63 @@ DEFINE_SVC_RQST_EVENT(defer);
17141740
DEFINE_SVC_RQST_EVENT(drop);
17151741

17161742
DECLARE_EVENT_CLASS(svc_rqst_status,
1717-
1718-
TP_PROTO(struct svc_rqst *rqst, int status),
1743+
TP_PROTO(
1744+
const struct svc_rqst *rqst,
1745+
int status
1746+
),
17191747

17201748
TP_ARGS(rqst, status),
17211749

17221750
TP_STRUCT__entry(
1723-
__field(u32, xid)
1751+
SVC_RQST_ENDPOINT_FIELDS(rqst)
1752+
17241753
__field(int, status)
17251754
__field(unsigned long, flags)
1726-
__string(addr, rqst->rq_xprt->xpt_remotebuf)
17271755
),
17281756

17291757
TP_fast_assign(
1730-
__entry->xid = be32_to_cpu(rqst->rq_xid);
1758+
SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
1759+
17311760
__entry->status = status;
17321761
__entry->flags = rqst->rq_flags;
1733-
__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
17341762
),
17351763

1736-
TP_printk("addr=%s xid=0x%08x status=%d flags=%s",
1737-
__get_str(addr), __entry->xid,
1738-
__entry->status, show_rqstp_flags(__entry->flags))
1764+
TP_printk(SVC_RQST_ENDPOINT_FORMAT " status=%d flags=%s",
1765+
SVC_RQST_ENDPOINT_VARARGS,
1766+
__entry->status, show_rqstp_flags(__entry->flags))
17391767
);
17401768

17411769
DEFINE_EVENT(svc_rqst_status, svc_send,
1742-
TP_PROTO(struct svc_rqst *rqst, int status),
1770+
TP_PROTO(const struct svc_rqst *rqst, int status),
17431771
TP_ARGS(rqst, status));
17441772

1773+
TRACE_EVENT(svc_stats_latency,
1774+
TP_PROTO(
1775+
const struct svc_rqst *rqst
1776+
),
1777+
1778+
TP_ARGS(rqst),
1779+
1780+
TP_STRUCT__entry(
1781+
SVC_RQST_ENDPOINT_FIELDS(rqst)
1782+
1783+
__field(unsigned long, execute)
1784+
__string(procedure, svc_proc_name(rqst))
1785+
),
1786+
1787+
TP_fast_assign(
1788+
SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
1789+
1790+
__entry->execute = ktime_to_us(ktime_sub(ktime_get(),
1791+
rqst->rq_stime));
1792+
__assign_str(procedure, svc_proc_name(rqst));
1793+
),
1794+
1795+
TP_printk(SVC_RQST_ENDPOINT_FORMAT " proc=%s execute-us=%lu",
1796+
SVC_RQST_ENDPOINT_VARARGS,
1797+
__get_str(procedure), __entry->execute)
1798+
);
1799+
17451800
#define show_svc_xprt_flags(flags) \
17461801
__print_flags(flags, "|", \
17471802
{ (1UL << XPT_BUSY), "XPT_BUSY"}, \
@@ -1952,31 +2007,6 @@ TRACE_EVENT(svc_alloc_arg_err,
19522007
TP_printk("pages=%u", __entry->pages)
19532008
);
19542009

1955-
TRACE_EVENT(svc_stats_latency,
1956-
TP_PROTO(const struct svc_rqst *rqst),
1957-
1958-
TP_ARGS(rqst),
1959-
1960-
TP_STRUCT__entry(
1961-
__field(u32, xid)
1962-
__field(unsigned long, execute)
1963-
__string(procedure, svc_proc_name(rqst))
1964-
__string(addr, rqst->rq_xprt->xpt_remotebuf)
1965-
),
1966-
1967-
TP_fast_assign(
1968-
__entry->xid = be32_to_cpu(rqst->rq_xid);
1969-
__entry->execute = ktime_to_us(ktime_sub(ktime_get(),
1970-
rqst->rq_stime));
1971-
__assign_str(procedure, svc_proc_name(rqst));
1972-
__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1973-
),
1974-
1975-
TP_printk("addr=%s xid=0x%08x proc=%s execute-us=%lu",
1976-
__get_str(addr), __entry->xid, __get_str(procedure),
1977-
__entry->execute)
1978-
);
1979-
19802010
DECLARE_EVENT_CLASS(svc_deferred_event,
19812011
TP_PROTO(
19822012
const struct svc_deferred_req *dr

0 commit comments

Comments
 (0)