From: Koki Sanagi <sanagi.koki@jp.fujitsu.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
davem@davemloft.net, kaneshige.kenji@jp.fujitsu.com,
izumi.taku@jp.fujitsu.com, kosaki.motohiro@jp.fujitsu.com,
laijs@cn.fujitsu.com, scott.a.mcmillan@intel.com,
rostedt@goodmis.org, eric.dumazet@gmail.com, fweisbec@gmail.com,
mathieu.desnoyers@polymtl.ca
Subject: Re: [RFC PATCH v3 3/5] netdev: add tracepoints to netdev layer
Date: Wed, 21 Jul 2010 16:01:19 +0900 [thread overview]
Message-ID: <4C469B3F.9030305@jp.fujitsu.com> (raw)
In-Reply-To: <20100720114152.GC1995@hmsreliant.think-freely.org>
(2010/07/20 20:41), Neil Horman wrote:
> On Tue, Jul 20, 2010 at 09:47:59AM +0900, Koki Sanagi wrote:
>> This patch adds tracepoint to dev_queue_xmit, dev_hard_start_xmit and
>> netif_receive_skb. These tracepoints help you to monitor network driver's
>> input/output.
>>
>> sshd-4445 [001] 241367.066046: net_dev_queue: dev=eth3 skbaddr=dd6b2538 len=114
>> sshd-4445 [001] 241367.066047: net_dev_xmit: dev=eth3 skbaddr=dd6b2538 len=114 rc=0
>> <idle>-0 [001] 241367.067472: net_dev_receive: dev=eth3 skbaddr=f5e59000 len=52
>>
>> Signed-off-by: Koki Sanagi <sanagi.koki@jp.fujitsu.com>
>> ---
>> include/trace/events/net.h | 75 ++++++++++++++++++++++++++++++++++++++++++++
>> net/core/dev.c | 5 +++
>> net/core/net-traces.c | 1 +
>> 3 files changed, 81 insertions(+), 0 deletions(-)
>>
>> diff --git a/include/trace/events/net.h b/include/trace/events/net.h
>> new file mode 100644
>> index 0000000..8a21361
>> --- /dev/null
>> +++ b/include/trace/events/net.h
>> @@ -0,0 +1,75 @@
>> +#undef TRACE_SYSTEM
>> +#define TRACE_SYSTEM net
>> +
>> +#if !defined(_TRACE_NET_H) || defined(TRACE_HEADER_MULTI_READ)
>> +#define _TRACE_NET_H
>> +
>> +#include <linux/skbuff.h>
>> +#include <linux/netdevice.h>
>> +#include <linux/ip.h>
>> +#include <linux/tracepoint.h>
>> +
>> +TRACE_EVENT(net_dev_xmit,
>> +
>> + TP_PROTO(struct sk_buff *skb,
>> + int rc),
>> +
>> + TP_ARGS(skb, rc),
>> +
>> + TP_STRUCT__entry(
>> + __field( void *, skbaddr )
>> + __field( unsigned int, len )
>> + __field( int, rc )
>> + __string( name, skb->dev->name )
>> + ),
>> +
>> + TP_fast_assign(
>> + __entry->skbaddr = skb;
>> + __entry->len = skb->len;
>> + __entry->rc = rc;
>> + __assign_str(name, skb->dev->name);
>> + ),
>> +
>> + TP_printk("dev=%s skbaddr=%p len=%u rc=%d",
>> + __get_str(name), __entry->skbaddr, __entry->len, __entry->rc)
>> +);
>> +
>> +DECLARE_EVENT_CLASS(net_dev_template,
>> +
>> + TP_PROTO(struct sk_buff *skb),
>> +
>> + TP_ARGS(skb),
>> +
>> + TP_STRUCT__entry(
>> + __field( void *, skbaddr )
>> + __field( unsigned int, len )
>> + __string( name, skb->dev->name )
>> + ),
>> +
>> + TP_fast_assign(
>> + __entry->skbaddr = skb;
>> + __entry->len = skb->len;
>> + __assign_str(name, skb->dev->name);
>> + ),
>> +
>> + TP_printk("dev=%s skbaddr=%p len=%u",
>> + __get_str(name), __entry->skbaddr, __entry->len)
>> +)
>> +
>> +DEFINE_EVENT(net_dev_template, net_dev_queue,
>> +
>> + TP_PROTO(struct sk_buff *skb),
>> +
>> + TP_ARGS(skb)
>> +);
>> +
>> +DEFINE_EVENT(net_dev_template, net_dev_receive,
>> +
>> + TP_PROTO(struct sk_buff *skb),
>> +
>> + TP_ARGS(skb)
>> +);
>> +#endif /* _TRACE_NET_H */
>> +
>> +/* This part must be outside protection */
>> +#include <trace/define_trace.h>
>> diff --git a/net/core/dev.c b/net/core/dev.c
>> index 93b8929..4acfec6 100644
>> --- a/net/core/dev.c
>> +++ b/net/core/dev.c
>> @@ -130,6 +130,7 @@
>> #include <linux/jhash.h>
>> #include <linux/random.h>
>> #include <trace/events/napi.h>
>> +#include <trace/events/net.h>
>> #include <linux/pci.h>
>>
>> #include "net-sysfs.h"
>> @@ -1955,6 +1956,7 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
>> }
>>
>> rc = ops->ndo_start_xmit(skb, dev);
>> + trace_net_dev_xmit(skb, rc);
>> if (rc == NETDEV_TX_OK)
>> txq_trans_update(txq);
>> return rc;
>> @@ -1975,6 +1977,7 @@ gso:
>> skb_dst_drop(nskb);
>>
>> rc = ops->ndo_start_xmit(nskb, dev);
>> + trace_net_dev_xmit(nskb, rc);
>> if (unlikely(rc != NETDEV_TX_OK)) {
>> if (rc & ~NETDEV_TX_MASK)
>> goto out_kfree_gso_skb;
>> @@ -2165,6 +2168,7 @@ int dev_queue_xmit(struct sk_buff *skb)
>> #ifdef CONFIG_NET_CLS_ACT
>> skb->tc_verd = SET_TC_AT(skb->tc_verd, AT_EGRESS);
>> #endif
>> + trace_net_dev_queue(skb);
>> if (q->enqueue) {
>> rc = __dev_xmit_skb(skb, q, dev, txq);
>> goto out;
>> @@ -2939,6 +2943,7 @@ int netif_receive_skb(struct sk_buff *skb)
>> if (netdev_tstamp_prequeue)
>> net_timestamp_check(skb);
>>
>> + trace_net_dev_receive(skb);
>
> I imagine for completeness you'll want to make a call to this in netif_rx and
> netif_rx_ni as well.
>
It might be better to add tracepoint to netif_rx to determine a time between
netif_rx and netif_receive_skb.
Thanks,
Koki Sanagi.
>
>
>
next prev parent reply other threads:[~2010-07-21 7:01 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-20 0:43 [RFC PATCH v3 0/5] netdev: show a process of packets Koki Sanagi
2010-07-20 0:45 ` [RFC PATCH v3 1/5] irq: add tracepoint to softirq_raise Koki Sanagi
2010-07-20 11:04 ` Neil Horman
2010-07-21 6:57 ` Koki Sanagi
2010-07-21 11:14 ` Neil Horman
2010-07-21 13:01 ` KOSAKI Motohiro
2010-07-21 13:56 ` Neil Horman
2010-07-23 5:34 ` KOSAKI Motohiro
2010-07-22 8:41 ` Koki Sanagi
2010-07-20 0:46 ` [RFC PATCH v3 2/5] napi: convert trace_napi_poll to TRACE_EVENT Koki Sanagi
2010-07-20 11:09 ` Neil Horman
2010-07-21 7:00 ` Koki Sanagi
2010-07-21 11:24 ` Neil Horman
2010-07-20 0:47 ` [RFC PATCH v3 3/5] netdev: add tracepoints to netdev layer Koki Sanagi
2010-07-20 11:41 ` Neil Horman
2010-07-21 7:01 ` Koki Sanagi [this message]
2010-07-20 0:49 ` [RFC PATCH v3 4/5] skb: add tracepoints to freeing skb Koki Sanagi
2010-07-20 4:54 ` Eric Dumazet
2010-07-20 6:47 ` Koki Sanagi
2010-07-20 11:50 ` Neil Horman
2010-07-21 7:02 ` Koki Sanagi
2010-07-21 10:56 ` Neil Horman
2010-07-22 8:39 ` Koki Sanagi
2010-07-22 14:57 ` Neil Horman
2010-07-20 0:50 ` [RFC PATCH v3 5/5] perf:add a script shows a process of packet Koki Sanagi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C469B3F.9030305@jp.fujitsu.com \
--to=sanagi.koki@jp.fujitsu.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=fweisbec@gmail.com \
--cc=izumi.taku@jp.fujitsu.com \
--cc=kaneshige.kenji@jp.fujitsu.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=netdev@vger.kernel.org \
--cc=nhorman@tuxdriver.com \
--cc=rostedt@goodmis.org \
--cc=scott.a.mcmillan@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.