* [RFC PATCH 1/2] netdev: Add tracepoint to dev_hard_start_xmit
2010-04-09 7:37 [RFC PATCH 0/2] netdev: Add tracepoint to network/driver interface Koki Sanagi
@ 2010-04-09 7:39 ` Koki Sanagi
2010-04-09 7:41 ` [RFC PATCH 2/2] netdev: Add tracepoint to netif_receive_skb Koki Sanagi
2010-04-09 11:04 ` [RFC PATCH 0/2] netdev: Add tracepoint to network/driver interface Neil Horman
2 siblings, 0 replies; 5+ messages in thread
From: Koki Sanagi @ 2010-04-09 7:39 UTC (permalink / raw)
To: netdev; +Cc: izumi.taku, kaneshige.kenji, davem, nhorman
This patch adds tracepoint to dev_hard_start_xmit.
It notices that xmit packet passes network/driver interface.
An output is below.
sshd-2443 [001] 68238.415621: netdev_start_xmit: dev=eth3 skbaddr=f3db5138 len=114
sshd-2443 [001] 68238.705459: netdev_start_xmit: dev=eth3 skbaddr=f3db5138 len=114
sshd-2443 [001] 68238.880361: netdev_start_xmit: dev=eth3 skbaddr=f3db5138 len=114
Signed-off-by: Koki Sanagi <sanagi.koki@jp.fujitsu.com>
---
include/trace/events/skb.h | 28 ++++++++++++++++++++++++++++
net/core/dev.c | 3 +++
2 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index 4b2be6d..425a062 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -9,6 +9,34 @@
#include <linux/tracepoint.h>
/*
+ * netdev_start_xmit - invoked when skb is passed to the driver
+ * @skb: pointer to struct sk_buff
+ * @dev: pointer to struct net_device
+ */
+TRACE_EVENT(netdev_start_xmit,
+
+ TP_PROTO(struct sk_buff *skb,
+ struct net_device *dev),
+
+ TP_ARGS(skb, dev),
+
+ TP_STRUCT__entry(
+ __field( const void *, skbaddr )
+ __field( unsigned int, len )
+ __string( name, dev->name )
+ ),
+
+ TP_fast_assign(
+ __entry->skbaddr = skb;
+ __entry->len = skb->len;
+ __assign_str(name, dev->name);
+ ),
+
+ TP_printk("dev=%s skbaddr=%p len=%u",
+ __get_str(name), __entry->skbaddr, __entry->len)
+);
+
+/*
* Tracepoint for free an sk_buff:
*/
TRACE_EVENT(kfree_skb,
diff --git a/net/core/dev.c b/net/core/dev.c
index 2a9b7dd..4667a96 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -129,6 +129,7 @@
#include <linux/jhash.h>
#include <linux/random.h>
#include <trace/events/napi.h>
+#include <trace/events/skb.h>
#include <linux/pci.h>
#include "net-sysfs.h"
@@ -1903,6 +1904,7 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
skb_dst_drop(skb);
+ trace_netdev_start_xmit(skb, dev);
rc = ops->ndo_start_xmit(skb, dev);
if (rc == NETDEV_TX_OK)
txq_trans_update(txq);
@@ -1937,6 +1939,7 @@ gso:
if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
skb_dst_drop(nskb);
+ trace_netdev_start_xmit(nskb, dev);
rc = ops->ndo_start_xmit(nskb, dev);
if (unlikely(rc != NETDEV_TX_OK)) {
if (rc & ~NETDEV_TX_MASK)
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [RFC PATCH 2/2] netdev: Add tracepoint to netif_receive_skb
2010-04-09 7:37 [RFC PATCH 0/2] netdev: Add tracepoint to network/driver interface Koki Sanagi
2010-04-09 7:39 ` [RFC PATCH 1/2] netdev: Add tracepoint to dev_hard_start_xmit Koki Sanagi
@ 2010-04-09 7:41 ` Koki Sanagi
2010-04-09 11:04 ` [RFC PATCH 0/2] netdev: Add tracepoint to network/driver interface Neil Horman
2 siblings, 0 replies; 5+ messages in thread
From: Koki Sanagi @ 2010-04-09 7:41 UTC (permalink / raw)
To: netdev; +Cc: izumi.taku, kaneshige.kenji, davem, nhorman
This patch adds tracepoint to netif_receive_skb.
It notices that receive packet passes network/driver interface.
An output is below.
<idle>-0 [001] 68238.417058: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=52
<idle>-0 [001] 68238.704363: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=100
<idle>-0 [001] 68238.706891: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=52
<idle>-0 [001] 68238.878736: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=100
Signed-off-by: Koki Sanagi <sanagi.koki@jp.fujitsu.com>
---
include/trace/events/skb.h | 28 ++++++++++++++++++++++++++++
net/core/dev.c | 1 +
2 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index 425a062..ca78d49 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -37,6 +37,34 @@ TRACE_EVENT(netdev_start_xmit,
);
/*
+ * netdev_receive_skb - invoked when skb is received from the driver
+ * @skb: pointer to struct sk_buff
+ * @dev: pointer to struct net_device
+ */
+TRACE_EVENT(netdev_receive_skb,
+
+ TP_PROTO(struct sk_buff *skb,
+ struct net_device *dev),
+
+ TP_ARGS(skb, dev),
+
+ TP_STRUCT__entry(
+ __field( const void *, skbaddr )
+ __field( unsigned int, len )
+ __string( name, dev->name )
+ ),
+
+ TP_fast_assign(
+ __entry->skbaddr = skb;
+ __entry->len = skb->len;
+ __assign_str(name, dev->name);
+ ),
+
+ TP_printk("dev=%s skbaddr=%p len=%u",
+ __get_str(name), __entry->skbaddr, __entry->len)
+);
+
+/*
* Tracepoint for free an sk_buff:
*/
TRACE_EVENT(kfree_skb,
diff --git a/net/core/dev.c b/net/core/dev.c
index 4667a96..7281286 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2683,6 +2683,7 @@ static int __netif_receive_skb(struct sk_buff *skb)
__get_cpu_var(netdev_rx_stat).total++;
+ trace_netdev_receive_skb(skb, orig_dev);
skb_reset_network_header(skb);
skb_reset_transport_header(skb);
skb->mac_len = skb->network_header - skb->mac_header;
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [RFC PATCH 0/2] netdev: Add tracepoint to network/driver interface
2010-04-09 7:37 [RFC PATCH 0/2] netdev: Add tracepoint to network/driver interface Koki Sanagi
2010-04-09 7:39 ` [RFC PATCH 1/2] netdev: Add tracepoint to dev_hard_start_xmit Koki Sanagi
2010-04-09 7:41 ` [RFC PATCH 2/2] netdev: Add tracepoint to netif_receive_skb Koki Sanagi
@ 2010-04-09 11:04 ` Neil Horman
2010-04-12 5:20 ` Koki Sanagi
2 siblings, 1 reply; 5+ messages in thread
From: Neil Horman @ 2010-04-09 11:04 UTC (permalink / raw)
To: Koki Sanagi; +Cc: netdev, izumi.taku, kaneshige.kenji, davem
On Fri, Apr 09, 2010 at 04:37:53PM +0900, Koki Sanagi wrote:
> These patches add tracepoints to network/driver interface.
>
> These tracepoints are helpful to investigate whether a packet passes or not.
> For example, when Heart Beat is disconnected, that information is helpful
> to investigate the cause is whether driver/device side or not.
>
> An output is below.
>
> sshd-2443 [001] 68238.415621: netdev_start_xmit: dev=eth3 skbaddr=f3db5138 len=114
> <idle>-0 [001] 68238.417058: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=52
> <idle>-0 [001] 68238.704363: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=100
> sshd-2443 [001] 68238.705459: netdev_start_xmit: dev=eth3 skbaddr=f3db5138 len=114
> <idle>-0 [001] 68238.706891: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=52
> <idle>-0 [001] 68238.878736: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=100
> sshd-2443 [001] 68238.880361: netdev_start_xmit: dev=eth3 skbaddr=f3db5138 len=114
>
> As other use case I have, we can get throughput per interface with some sort of
> perf scripts. I plan to create it.
>
> Thanks
> Koki Sanagi
>
You can get a reasonable estimate of per-interface throughput using ethtool or
even ifconfig in a script. What are the tracepoints needed for that? Don't get
me wrong, I think these tracepoints could have some potential use thats not
covered by other tools, I just don't see the above as a conclusive reason to add
them.
Regards
Neil
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC PATCH 0/2] netdev: Add tracepoint to network/driver interface
2010-04-09 11:04 ` [RFC PATCH 0/2] netdev: Add tracepoint to network/driver interface Neil Horman
@ 2010-04-12 5:20 ` Koki Sanagi
0 siblings, 0 replies; 5+ messages in thread
From: Koki Sanagi @ 2010-04-12 5:20 UTC (permalink / raw)
To: Neil Horman; +Cc: netdev, izumi.taku, kaneshige.kenji, davem
(2010/04/09 20:04), Neil Horman wrote:
> On Fri, Apr 09, 2010 at 04:37:53PM +0900, Koki Sanagi wrote:
>> These patches add tracepoints to network/driver interface.
>>
>> These tracepoints are helpful to investigate whether a packet passes or not.
>> For example, when Heart Beat is disconnected, that information is helpful
>> to investigate the cause is whether driver/device side or not.
>>
>> An output is below.
>>
>> sshd-2443 [001] 68238.415621: netdev_start_xmit: dev=eth3 skbaddr=f3db5138 len=114
>> <idle>-0 [001] 68238.417058: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=52
>> <idle>-0 [001] 68238.704363: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=100
>> sshd-2443 [001] 68238.705459: netdev_start_xmit: dev=eth3 skbaddr=f3db5138 len=114
>> <idle>-0 [001] 68238.706891: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=52
>> <idle>-0 [001] 68238.878736: netdev_receive_skb: dev=eth3 skbaddr=f3c81540 len=100
>> sshd-2443 [001] 68238.880361: netdev_start_xmit: dev=eth3 skbaddr=f3db5138 len=114
>>
>> As other use case I have, we can get throughput per interface with some sort of
>> perf scripts. I plan to create it.
>>
>> Thanks
>> Koki Sanagi
>>
> You can get a reasonable estimate of per-interface throughput using ethtool or
> even ifconfig in a script. What are the tracepoints needed for that? Don't get
> me wrong, I think these tracepoints could have some potential use thats not
> covered by other tools, I just don't see the above as a conclusive reason to add
> them.
Yeah, a script using ethtool or ifconfig can do same thing. But it must be poll
driven. By contrast this implement using tracepoint is event-driven.
It means that a record leaves on memory certainly whenever kernel crashes.
It is useful to investigate network record from dump.
This is superior to ethtool or ifconfig scripts.
^ permalink raw reply [flat|nested] 5+ messages in thread