[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1503535426.2499.66.camel@edumazet-glaptop3.roam.corp.google.com>
Date: Wed, 23 Aug 2017 17:43:46 -0700
From: Eric Dumazet <eric.dumazet@...il.com>
To: Florian Fainelli <f.fainelli@...il.com>
Cc: netdev@...r.kernel.org, edumazet@...il.com, pabeni@...hat.com,
willemb@...gle.com, davem@...emloft.net
Subject: Re: UDP sockets oddities
On Wed, 2017-08-23 at 17:03 -0700, Florian Fainelli wrote:
> Attached is the perf report --stdio of:
>
> # perf record -a -g -e skb:kfree_skb iperf -c 192.168.1.23 -b 800M -t 60
> WARNING: option -b implies udp testing
> ------------------------------------------------------------
> Client connecting to 192.168.1.23, UDP port 5001
> Sending 1470 byte datagrams
> UDP buffer size: 160 KByte (default)
> ------------------------------------------------------------
> [ 4] local 192.168.1.66 port 36169 connected with 192.168.1.23 port 5001
> [ ID] Interval Transfer Bandwidth
> [ 4] 0.0-60.0 sec 685 MBytes 95.8 Mbits/sec
> [ 4] Sent 488633 datagrams
> [ 4] Server Report:
> [ 4] 0.0-74.4 sec 685 MBytes 77.2 Mbits/sec 0.187 ms 300/488632
> (0.061%)
> [ 4] 0.0-74.4 sec 58 datagrams received out-of-order
>
> It measured 488644 events which is greater than the number of packets
> transmitted by iperf but I only count 8 non-IP packets being sent
> (protocl=2054 -> ETH_P_ARP) so I am not sure what the other 4 were and
> why there are not accounted for.
>
> Almost all events came from net_tx_action() except 2 that came from
> net/core/neighbour.c::neigh_probe() and 65 that came from
> arch/arm/include/asm/irqflags.h::arch_local_irq_save() ?!?
Oh you have too much noise and need this fix :
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
index dc3052751bc1..fcfa8d991850 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -597,7 +597,7 @@ static int bcm_sysport_set_coalesce(struct net_device *dev,
static void bcm_sysport_free_cb(struct bcm_sysport_cb *cb)
{
- dev_kfree_skb_any(cb->skb);
+ dev_consume_skb_any(cb->skb);
cb->skb = NULL;
dma_unmap_addr_set(cb, dma_addr, 0);
}
Powered by blists - more mailing lists