setup: iperf3 -s #on lantiq ./run.sh testX #on host everything_interrupts.log #cat /proc/interrupts (you may change the SMP affinity) running on experimental 1000Hz build, not much change in speed
As illustrated in vanilla.log, the default xrx200 ethernet driver seems to be really slow in lantiq->host traffic (xDSL download). That seems to be (at least) partially caused by making unnecessary linear skbs in the network stack. These patches (and the ICU SMP ones) can increase the lantiq->host UDP speed to an almost twice as big value and effectively increase the speed of TCP in the both ways too. The changes from "[RFC] [PATCH v2] lantiq: net: ethernet driver with fragments" are: I've had to increase the DMA descriptor count as there is now more than one descriptors for one packet. With the original 64 there would be frequent queue stops, which decreased the speed. With 128 now they are not so much frequent (with 192 even less, almost nonexistant). The main problem is in the TX housekeeping task, where the budgeted cycle of descriptor and skb freeing cannot keep up with xmit function. With a simple computation (I hope it is correct :-D ): 1Gbps / (1500*8 bits) = ~83k, the number of packets which needs to be freed (it will be more descriptors) one run cannot free more than budgeted packets (32), so the housekeeping task would had to be called: 83k / 32 => one every 400 microseconds That's probably nearly impossible. With 1000Hz system the tx housekeeping seemed to be called once about every 3 miliseconds. If the housekeeping gets called after longer time the ring buffer will get actually stuck (it is transmitted, but not yet cleaned) and the queue is stopped until next tx housekeeping is called. I've hacked the housekeeping to ignore budget, so whole possible (= completed and not owned by DMA) ring buffer is freed. I've added dma_unmap_single for tx housekeeping and frags mapping fail path. Interestingly the nonpresence in the original driver was OK for the kernel. Additionally I've changed TX DMA interrupts from an end-of-descriptor to end-of-packet events. The DMA patch tries to change some DMA settings, namely DMA_POLL. I don't have a lantiq technical datasheet (it would be appreciated though :-D), but I assume it is how often does the controller check RAM for DMA_OWN flag. On 0x10 (instead of 0x4) it seems to slighty increase the speed (it is probably using less RAM bus bandwidth). BTW it seems CPOLL register is not dependent on channel settings, so it doesn't have to be on for loop (as in patch). The burst size is set to 8 words (which match 32B alignment in the ethernet driver). P.S. the xrx200 network speed on localhost is only up to 500Mbit/s. Petr
--- a/drivers/net/ethernet/lantiq_xrx200.c 2019-01-30 02:20:35.780993746 +0100 +++ b/drivers/net/ethernet/lantiq_xrx200.c 2019-02-13 22:36:22.536640773 +0100 @@ -36,16 +36,13 @@ #include "lantiq_pce.h" #include "lantiq_xrx200_sw.h" +#include <linux/time.h> //pc2005 time tests + #define SW_POLLING #define SW_ROUTING -#ifdef SW_ROUTING -#define XRX200_MAX_DEV 2 -#else -#define XRX200_MAX_DEV 1 -#endif - #define XRX200_MAX_VLAN 64 + #define XRX200_PCE_ACTVLAN_IDX 0x01 #define XRX200_PCE_VLANMAP_IDX 0x02 @@ -54,7 +51,7 @@ #define XRX200_HEADROOM 4 -#define XRX200_TX_TIMEOUT (10 * HZ) +#define XRX200_TX_TIMEOUT (30 * HZ) /* port type */ #define XRX200_PORT_TYPE_PHY 1 @@ -62,6 +59,8 @@ /* DMA */ #define XRX200_DMA_DATA_LEN 0x600 +#define XRX200_DMA_TX_ALIGN (32 - 1) + #define XRX200_DMA_IRQ INT_NUM_IM2_IRL0 #define XRX200_DMA_RX 0 #define XRX200_DMA_TX 1 @@ -69,6 +68,7 @@ #define XRX200_DMA_IS_TX(x) (x%2) #define XRX200_DMA_IS_RX(x) (!XRX200_DMA_IS_TX(x)) + /* fetch / store dma */ #define FDMA_PCTRL0 0x2A00 #define FDMA_PCTRLx(x) (FDMA_PCTRL0 + (x * 0x18)) @@ -203,50 +203,52 @@ }; struct xrx200_chan { - int idx; - int refcount; - int tx_free; + /* ring buffer tail pointer */ + unsigned tx_free ____cacheline_aligned_in_smp; - struct net_device dummy_dev; - struct net_device *devs[XRX200_MAX_DEV]; - struct tasklet_struct tasklet; - struct napi_struct napi; - struct ltq_dma_channel dma; + /* skb in use reference */ struct sk_buff *skb[LTQ_DESC_NUM]; - spinlock_t lock; -}; + /* saved dma address for unmap */ + dma_addr_t desc_addr[LTQ_DESC_NUM]; -struct xrx200_hw { - struct clk *clk; - struct mii_bus *mii_bus; + /* saved length for unmap */ + size_t desc_size[LTQ_DESC_NUM]; - struct xrx200_chan chan[XRX200_MAX_DMA]; - u16 vlan_vid[XRX200_MAX_VLAN]; - u16 vlan_port_map[XRX200_MAX_VLAN]; - - struct net_device *devs[XRX200_MAX_DEV]; - int num_devs; - - int port_map[XRX200_MAX_PORT]; - unsigned short wan_map; + struct napi_struct napi; + struct ltq_dma_channel dma; + struct xrx200_priv *priv; + spinlock_t lock; - struct switch_dev swdev; }; struct xrx200_priv { struct net_device_stats stats; - int id; + struct xrx200_chan chan_tx; + struct xrx200_chan chan_rx; + + struct clk *clk; + + struct net_device *net_dev; + struct device *dev; struct xrx200_port port[XRX200_MAX_PORT]; int num_port; bool wan; bool sw; - unsigned short port_map; + unsigned short d_port_map; unsigned char mac[6]; - struct xrx200_hw *hw; + struct mii_bus *mii_bus; + + u16 vlan_vid[XRX200_MAX_VLAN]; + u16 vlan_port_map[XRX200_MAX_VLAN]; + + int port_map[XRX200_MAX_PORT]; + unsigned short wan_map; + + struct switch_dev swdev; }; static __iomem void *xrx200_switch_membase; @@ -470,14 +472,14 @@ } // swconfig interface -static void xrx200_hw_init(struct xrx200_hw *hw); +static void xrx200_hw_init(struct xrx200_priv *priv); // global static int xrx200sw_reset_switch(struct switch_dev *dev) { - struct xrx200_hw *hw = container_of(dev, struct xrx200_hw, swdev); + struct xrx200_priv *priv = container_of(dev, struct xrx200_priv, swdev); - xrx200_hw_init(hw); + xrx200_hw_init(priv); return 0; } @@ -523,7 +525,7 @@ static int xrx200sw_set_vlan_vid(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val) { - struct xrx200_hw *hw = container_of(dev, struct xrx200_hw, swdev); + struct xrx200_priv *priv = container_of(dev, struct xrx200_priv, swdev); int i; struct xrx200_pce_table_entry tev; struct xrx200_pce_table_entry tem; @@ -538,7 +540,7 @@ return -EINVAL; } - hw->vlan_vid[val->port_vlan] = val->value.i; + priv->vlan_vid[val->port_vlan] = val->value.i; tev.index = val->port_vlan; xrx200_pce_table_entry_read(&tev); @@ -571,7 +573,7 @@ static int xrx200sw_set_vlan_ports(struct switch_dev *dev, struct switch_val *val) { - struct xrx200_hw *hw = container_of(dev, struct xrx200_hw, swdev); + struct xrx200_priv *priv = container_of(dev, struct xrx200_priv, swdev); int i, portmap, tagmap, untagged; struct xrx200_pce_table_entry tem; @@ -624,7 +626,7 @@ ltq_switch_w32_mask(0, portmap, PCE_PMAP2); ltq_switch_w32_mask(0, portmap, PCE_PMAP3); - hw->vlan_port_map[val->port_vlan] = portmap; + priv->vlan_port_map[val->port_vlan] = portmap; xrx200sw_fixup_pvids(); @@ -722,8 +724,14 @@ link->duplex = xrx200sw_read_x(XRX200_MAC_PSTAT_FDUP, port); - link->rx_flow = !!(xrx200sw_read_x(XRX200_MAC_CTRL_0_FCON, port) && 0x0010); - link->tx_flow = !!(xrx200sw_read_x(XRX200_MAC_CTRL_0_FCON, port) && 0x0020); + +// TODO "&&" is bug +// link->rx_flow = !!(xrx200sw_read_x(XRX200_MAC_CTRL_0_FCON, port) && 0x0010); +// link->tx_flow = !!(xrx200sw_read_x(XRX200_MAC_CTRL_0_FCON, port) && 0x0020); + link->rx_flow = !!(xrx200sw_read_x(XRX200_MAC_CTRL_0_FCON, port) & 0x0010); + link->tx_flow = !!(xrx200sw_read_x(XRX200_MAC_CTRL_0_FCON, port) & 0x0020); + + link->aneg = !(xrx200sw_read_x(XRX200_MAC_CTRL_0_FCON, port)); link->speed = SWITCH_PORT_SPEED_10; @@ -834,19 +842,16 @@ // .get_port_stats = xrx200sw_get_port_stats, //TODO }; -static int xrx200sw_init(struct xrx200_hw *hw) +static int xrx200sw_init(struct xrx200_priv *priv) { - int netdev_num; - for (netdev_num = 0; netdev_num < hw->num_devs; netdev_num++) - { struct switch_dev *swdev; - struct net_device *dev = hw->devs[netdev_num]; - struct xrx200_priv *priv = netdev_priv(dev); - if (!priv->sw) - continue; + if (!priv->sw) { + pr_info("!!!! no switch\n"); + return -ENODEV; + } - swdev = &hw->swdev; + swdev = &priv->swdev; swdev->name = "Lantiq XRX200 Switch"; swdev->vlans = XRX200_MAX_VLAN; @@ -854,10 +859,26 @@ swdev->cpu_port = 6; swdev->ops = &xrx200sw_ops; - register_switch(swdev, dev); + register_switch(swdev, priv->net_dev); return 0; // enough switches +} + +/* drop all the packets from the DMA ring */ +static void xrx200_flush_dma(struct xrx200_chan *ch) +{ + int i; + + for (i = 0; i < LTQ_DESC_NUM; i++) { + struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->dma.desc]; + + if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) != LTQ_DMA_C) + break; + + desc->ctl = LTQ_DMA_OWN | LTQ_DMA_RX_OFFSET(NET_IP_ALIGN) | + XRX200_DMA_DATA_LEN; + ch->dma.desc++; + ch->dma.desc %= LTQ_DESC_NUM; } - return 0; } static int xrx200_open(struct net_device *dev) @@ -865,21 +886,30 @@ struct xrx200_priv *priv = netdev_priv(dev); int i; - for (i = 0; i < XRX200_MAX_DMA; i++) { - if (!priv->hw->chan[i].dma.irq) - continue; - spin_lock_bh(&priv->hw->chan[i].lock); - if (!priv->hw->chan[i].refcount) { - if (XRX200_DMA_IS_RX(i)) - napi_enable(&priv->hw->chan[i].napi); - ltq_dma_open(&priv->hw->chan[i].dma); - } - priv->hw->chan[i].refcount++; - spin_unlock_bh(&priv->hw->chan[i].lock); - } +// TODO DMA chan allocation seems to be more complex in openwrt version + + napi_enable(&priv->chan_tx.napi); + ltq_dma_open(&priv->chan_tx.dma); + ltq_dma_enable_irq(&priv->chan_tx.dma); + + napi_enable(&priv->chan_rx.napi); + ltq_dma_open(&priv->chan_rx.dma); + + /* The boot loader does not always deactivate the receiving of frames + * on the ports and then some packets queue up in the PPE buffers. + * They already passed the PMAC so they do not have the tags + * configured here. Read the these packets here and drop them. + * The HW should have written them into memory after 10us + */ + usleep_range(20, 40); + xrx200_flush_dma(&priv->chan_rx); + + ltq_dma_enable_irq(&priv->chan_rx.dma); + for (i = 0; i < priv->num_port; i++) if (priv->port[i].phydev) phy_start(priv->port[i].phydev); + netif_wake_queue(dev); return 0; @@ -896,19 +926,11 @@ if (priv->port[i].phydev) phy_stop(priv->port[i].phydev); - for (i = 0; i < XRX200_MAX_DMA; i++) { - if (!priv->hw->chan[i].dma.irq) - continue; + napi_disable(&priv->chan_rx.napi); + ltq_dma_close(&priv->chan_rx.dma); - priv->hw->chan[i].refcount--; - if (!priv->hw->chan[i].refcount) { - if (XRX200_DMA_IS_RX(i)) - napi_disable(&priv->hw->chan[i].napi); - spin_lock_bh(&priv->hw->chan[i].lock); - ltq_dma_close(&priv->hw->chan[XRX200_DMA_RX].dma); - spin_unlock_bh(&priv->hw->chan[i].lock); - } - } + napi_disable(&priv->chan_tx.napi); + ltq_dma_close(&priv->chan_tx.dma); return 0; } @@ -916,12 +938,15 @@ static int xrx200_alloc_skb(struct xrx200_chan *ch) { #define DMA_PAD (NET_IP_ALIGN + NET_SKB_PAD) - ch->skb[ch->dma.desc] = dev_alloc_skb(XRX200_DMA_DATA_LEN + DMA_PAD); + ch->skb[ch->dma.desc] = netdev_alloc_skb(ch->priv->net_dev, XRX200_DMA_DATA_LEN + DMA_PAD); if (!ch->skb[ch->dma.desc]) goto skip; skb_reserve(ch->skb[ch->dma.desc], NET_SKB_PAD); - ch->dma.desc_base[ch->dma.desc].addr = dma_map_single(NULL, + + dma_unmap_single(ch->priv->dev, ch->dma.desc_base[ch->dma.desc].addr, XRX200_DMA_DATA_LEN, DMA_FROM_DEVICE); + + ch->dma.desc_base[ch->dma.desc].addr = dma_map_single(ch->priv->dev, ch->skb[ch->dma.desc]->data, XRX200_DMA_DATA_LEN, DMA_FROM_DEVICE); ch->dma.desc_base[ch->dma.desc].addr = @@ -938,8 +963,8 @@ static void xrx200_hw_receive(struct xrx200_chan *ch, int id) { - struct net_device *dev = ch->devs[id]; - struct xrx200_priv *priv = netdev_priv(dev); + struct xrx200_priv *priv = ch->priv; + struct net_device *dev = priv->net_dev; struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->dma.desc]; struct sk_buff *skb = ch->skb[ch->dma.desc]; int len = (desc->ctl & LTQ_DMA_SIZE_MASK); @@ -960,128 +985,180 @@ #ifdef SW_ROUTING skb_pull(skb, 8); #endif + skb->dev = dev; skb->protocol = eth_type_trans(skb, dev); netif_receive_skb(skb); - priv->stats.rx_packets++; - priv->stats.rx_bytes+=len; + dev->stats.rx_packets++; + dev->stats.rx_bytes+=len; } static int xrx200_poll_rx(struct napi_struct *napi, int budget) { struct xrx200_chan *ch = container_of(napi, struct xrx200_chan, napi); - struct xrx200_priv *priv = netdev_priv(ch->devs[0]); + struct xrx200_priv *priv = ch->priv; int rx = 0; - int complete = 0; - while ((rx < budget) && !complete) { + while (rx < budget) { struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->dma.desc]; if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) == LTQ_DMA_C) { #ifdef SW_ROUTING struct sk_buff *skb = ch->skb[ch->dma.desc]; u8 *special_tag = (u8*)skb->data; int port = (special_tag[7] >> SPPID_SHIFT) & SPPID_MASK; - xrx200_hw_receive(ch, priv->hw->port_map[port]); + xrx200_hw_receive(ch, priv->port_map[port]); #else xrx200_hw_receive(ch, 0); #endif rx++; } else { - complete = 1; + break; } } - if (complete || !rx) { - napi_complete(&ch->napi); - ltq_dma_enable_irq(&ch->dma); + if (rx < budget) { + if (napi_complete_done(&ch->napi, rx)) { +//can an unacked irq event wait here now? + ltq_dma_enable_irq(&ch->dma); + } } return rx; } -static void xrx200_tx_housekeeping(unsigned long ptr) + +static struct net_device_stats *xrx200_get_stats (struct net_device *dev) { - struct xrx200_chan *ch = (struct xrx200_chan *) ptr; + struct xrx200_priv *priv = netdev_priv(dev); + + return &priv->stats; +} + +#define TX_BUFFS_AVAIL(tail, head) \ + ((tail <= head) ? \ + tail + (LTQ_DESC_NUM - 1) - head : \ + tail - head - 1) + +static int xrx200_tx_housekeeping(struct napi_struct *napi, int budget) +{ + struct xrx200_chan *ch = container_of(napi, + struct xrx200_chan, napi); + struct net_device *net_dev = ch->priv->net_dev; int pkts = 0; - int i; + unsigned long bytes = 0; + unsigned long flags; - spin_lock_bh(&ch->lock); - ltq_dma_ack_irq(&ch->dma); - while ((ch->dma.desc_base[ch->tx_free].ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) == LTQ_DMA_C) { - struct sk_buff *skb = ch->skb[ch->tx_free]; + spin_lock_irqsave(&ch->lock, flags); - pkts++; - ch->skb[ch->tx_free] = NULL; - dev_kfree_skb(skb); - memset(&ch->dma.desc_base[ch->tx_free], 0, - sizeof(struct ltq_dma_desc)); - ch->tx_free++; - ch->tx_free %= LTQ_DESC_NUM; + while (1) { + struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->tx_free]; + + if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) == LTQ_DMA_C) { + struct sk_buff *skb = ch->skb[ch->tx_free]; + + bytes += ch->desc_size[ch->tx_free]; + ch->skb[ch->tx_free] = NULL; + + dma_unmap_single(ch->priv->dev, ch->desc_addr[ch->tx_free], + ch->desc_size[ch->tx_free], DMA_TO_DEVICE); + + /* Consume skb only at last fragment */ + if (desc->ctl & LTQ_DMA_EOP) { + dev_consume_skb_irq(skb); + pkts++; + } + + memset(desc, 0, sizeof(struct ltq_dma_desc)); + ch->tx_free = (ch->tx_free + 1) % LTQ_DESC_NUM; + } else { + break; + } } - ltq_dma_enable_irq(&ch->dma); - spin_unlock_bh(&ch->lock); - if (!pkts) - return; + spin_unlock_irqrestore(&ch->lock, flags); - for (i = 0; i < XRX200_MAX_DEV && ch->devs[i]; i++) - netif_wake_queue(ch->devs[i]); -} + net_dev->stats.tx_packets += pkts; + net_dev->stats.tx_bytes += bytes; -static struct net_device_stats *xrx200_get_stats (struct net_device *dev) -{ - struct xrx200_priv *priv = netdev_priv(dev); + // HACK, free all descriptors, even over budget (else there will be queue stalls, slow CPU) + pkts = pkts ? (budget - 1) : 0; - return &priv->stats; + if (pkts < budget) { + if (napi_complete_done(&ch->napi, pkts)) { + ltq_dma_enable_irq(&ch->dma); + } + } + + if (netif_queue_stopped(net_dev)) { + if (unlikely(TX_BUFFS_AVAIL(ch->tx_free, ch->dma.desc) > (MAX_SKB_FRAGS + 1))) { + netif_wake_queue(net_dev); + } + } + + return pkts; } static void xrx200_tx_timeout(struct net_device *dev) { struct xrx200_priv *priv = netdev_priv(dev); - printk(KERN_ERR "%s: transmit timed out, disable the dma channel irq\n", dev->name); + pr_err("%s: transmit timed out!\n", dev->name); priv->stats.tx_errors++; - netif_wake_queue(dev); + + ltq_dma_enable_irq(&priv->chan_tx.dma); //TODO necessary? + + if (netif_queue_stopped(dev)) { + netif_wake_queue(dev); + } else { + pr_warn("%s: high transmit load\n", dev->name); + } } -static int xrx200_start_xmit(struct sk_buff *skb, struct net_device *dev) +static void xrx200_unwind_mapped_tx_skb(struct xrx200_chan *ch, int tail, int head) { + + for (; tail != head; tail = (tail + 1) % LTQ_DESC_NUM) { + dma_unmap_single(ch->priv->dev, ch->desc_addr[tail], + ch->desc_size[tail], DMA_TO_DEVICE); + } +} + +static netdev_tx_t xrx200_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct xrx200_priv *priv = netdev_priv(dev); - struct xrx200_chan *ch; + struct xrx200_chan *ch = &priv->chan_tx; + struct ltq_dma_desc *desc; - u32 byte_offset; int ret = NETDEV_TX_OK; int len; + int i; + unsigned long flags; + dma_addr_t mapping; #ifdef SW_ROUTING u32 special_tag = (SPID_CPU_PORT << SPID_SHIFT) | DPID_ENABLE; #endif - if(priv->id) - ch = &priv->hw->chan[XRX200_DMA_TX_2]; - else - ch = &priv->hw->chan[XRX200_DMA_TX]; - - desc = &ch->dma.desc_base[ch->dma.desc]; - skb->dev = dev; - len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len; + if (skb_put_padto(skb, ETH_ZLEN)) { + dev->stats.tx_dropped++; + return NETDEV_TX_OK; + } #ifdef SW_ROUTING if (is_multicast_ether_addr(eth_hdr(skb)->h_dest)) { - u16 port_map = priv->port_map; + u16 port_map = priv->d_port_map; if (priv->sw && skb->protocol == htons(ETH_P_8021Q)) { u16 vid; int i; - port_map = 0; + port_map = 0; if (!__vlan_get_tag(skb, &vid)) { for (i = 0; i < XRX200_MAX_VLAN; i++) { - if (priv->hw->vlan_vid[i] != vid) - continue; - port_map = priv->hw->vlan_port_map[i]; - break; + if (priv->vlan_vid[i] == vid) { + port_map = priv->vlan_port_map[i]; + break; + } } } } @@ -1089,108 +1166,195 @@ special_tag |= (port_map << PORT_MAP_SHIFT) | PORT_MAP_SEL | PORT_MAP_EN; } + if(priv->wan) special_tag |= (1 << DPID_SHIFT); + if(skb_headroom(skb) < 4) { struct sk_buff *tmp = skb_realloc_headroom(skb, 4); dev_kfree_skb_any(skb); skb = tmp; } + skb_push(skb, 4); memcpy(skb->data, &special_tag, sizeof(u32)); - len += 4; #endif - /* dma needs to start on a 16 byte aligned address */ - byte_offset = CPHYSADDR(skb->data) % 16; - - spin_lock_bh(&ch->lock); +// if (TX_BUFFS_AVAIL(ch->tx_free, ch->dma.desc) <= (skb_shinfo(skb)->nr_frags + 1)) { + if (TX_BUFFS_AVAIL(ch->tx_free, ch->dma.desc) <= (MAX_SKB_FRAGS + 1)) { + netif_stop_queue(dev); + netdev_err(dev, "not enough TX ring space\n"); + return NETDEV_TX_BUSY; + } +#if 0 + desc = &ch->dma.desc_base[ch->dma.desc]; if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) || ch->skb[ch->dma.desc]) { - netdev_err(dev, "tx ring full\n"); netif_stop_queue(dev); - ret = NETDEV_TX_BUSY; - goto out; + netdev_err(dev, "tx ring full before send\n"); + return NETDEV_TX_BUSY; } +#endif + spin_lock_irqsave(&ch->lock, flags); + /* Send first fragment */ ch->skb[ch->dma.desc] = skb; + desc = &ch->dma.desc_base[ch->dma.desc]; + + if (skb_shinfo(skb)->nr_frags == 0) { + len = skb->len; + } else { + len = skb_headlen(skb); + } + + mapping = dma_map_single(priv->dev, skb->data, len, DMA_TO_DEVICE); + if (unlikely(dma_mapping_error(priv->dev, mapping))) { + dev_kfree_skb(skb); + netdev_err(dev, "DMA mapping failed\n"); + dev->stats.tx_dropped++; + dev->stats.tx_errors++; + ret = NETDEV_TX_OK; + goto out; + } + + ch->desc_addr[ch->dma.desc] = mapping; + ch->desc_size[ch->dma.desc] = len; + + desc->addr = (mapping & 0x1fffffe0) | (1<<31); + + /* Don't set LTQ_DMA_OWN before filling all fragments descriptors */ + desc->ctl = LTQ_DMA_SOP | LTQ_DMA_TX_OFFSET(mapping & XRX200_DMA_TX_ALIGN) + | (len & LTQ_DMA_SIZE_MASK); + + if (!skb_shinfo(skb)->nr_frags) + desc->ctl |= LTQ_DMA_EOP; + + /* Send rest of fragments */ + for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { + + //TODO saving info for fragments + ch->skb[(ch->dma.desc + i + 1) % LTQ_DESC_NUM ] = skb; + desc = &ch->dma.desc_base[(ch->dma.desc + i + 1) % LTQ_DESC_NUM]; + + len = skb_frag_size(&skb_shinfo(skb)->frags[i]); + + mapping = dma_map_single(priv->dev, skb_frag_address(& skb_shinfo(skb)->frags[i]), len, DMA_TO_DEVICE); + if (unlikely(dma_mapping_error(priv->dev, mapping))) { - netif_trans_update(dev); + xrx200_unwind_mapped_tx_skb(ch, ch->dma.desc, ch->dma.desc + i + 1); + + netdev_err(dev, "DMA mapping for fragment failed\n"); + dev_kfree_skb(skb); + dev->stats.tx_dropped++; + dev->stats.tx_errors++; + ret = NETDEV_TX_OK; + goto out; + } + + ch->desc_addr[ch->dma.desc + i + 1] = mapping; + ch->desc_size[ch->dma.desc + i + 1] = len; + + desc->addr = (mapping & 0x1fffffe0) | (1<<31); + + desc->ctl = LTQ_DMA_OWN | + LTQ_DMA_TX_OFFSET(mapping & XRX200_DMA_TX_ALIGN) | (len & LTQ_DMA_SIZE_MASK); + + if (i == (skb_shinfo(skb)->nr_frags - 1)) + desc->ctl |= LTQ_DMA_EOP; + } + + desc = &ch->dma.desc_base[ch->dma.desc]; + + /* Increment TX ring index */ + ch->dma.desc = (ch->dma.desc + skb_shinfo(skb)->nr_frags + 1) % LTQ_DESC_NUM; - desc->addr = ((unsigned int) dma_map_single(NULL, skb->data, len, - DMA_TO_DEVICE)) - byte_offset; wmb(); - desc->ctl = LTQ_DMA_OWN | LTQ_DMA_SOP | LTQ_DMA_EOP | - LTQ_DMA_TX_OFFSET(byte_offset) | (len & LTQ_DMA_SIZE_MASK); - ch->dma.desc++; - ch->dma.desc %= LTQ_DESC_NUM; - if (ch->dma.desc == ch->tx_free) - netif_stop_queue(dev); + /* Start TX DMA */ + desc->ctl |= LTQ_DMA_OWN; - priv->stats.tx_packets++; - priv->stats.tx_bytes+=len; + if (unlikely(TX_BUFFS_AVAIL(ch->tx_free, ch->dma.desc) <= (MAX_SKB_FRAGS + 1))) { + netif_stop_queue(dev); + } + + skb_tx_timestamp(skb); out: - spin_unlock_bh(&ch->lock); + spin_unlock_irqrestore(&ch->lock, flags); return ret; } -static irqreturn_t xrx200_dma_irq(int irq, void *priv) +static irqreturn_t xrx200_dma_irq(int irq, void *ptr) { - struct xrx200_hw *hw = priv; - int chnr = irq - XRX200_DMA_IRQ; - struct xrx200_chan *ch = &hw->chan[chnr]; + struct xrx200_chan *ch = ptr; ltq_dma_disable_irq(&ch->dma); ltq_dma_ack_irq(&ch->dma); - - if (chnr % 2) - tasklet_schedule(&ch->tasklet); - else - napi_schedule(&ch->napi); + napi_schedule(&ch->napi); return IRQ_HANDLED; } -static int xrx200_dma_init(struct xrx200_hw *hw) +static int xrx200_dma_init(struct xrx200_priv *priv) { - int i, err = 0; + int i; + struct xrx200_chan *ch_rx = &priv->chan_rx; + struct xrx200_chan *ch_tx = &priv->chan_tx; + int ret; ltq_dma_init_port(DMA_PORT_ETOP); - for (i = 0; i < 8 && !err; i++) { - int irq = XRX200_DMA_IRQ + i; - struct xrx200_chan *ch = &hw->chan[i]; - - spin_lock_init(&ch->lock); - - ch->idx = ch->dma.nr = i; - - if (i == XRX200_DMA_TX) { - ltq_dma_alloc_tx(&ch->dma); - err = request_irq(irq, xrx200_dma_irq, 0, "vrx200_tx", hw); - } else if (i == XRX200_DMA_TX_2) { - ltq_dma_alloc_tx(&ch->dma); - err = request_irq(irq, xrx200_dma_irq, 0, "vrx200_tx_2", hw); - } else if (i == XRX200_DMA_RX) { - ltq_dma_alloc_rx(&ch->dma); - for (ch->dma.desc = 0; ch->dma.desc < LTQ_DESC_NUM; - ch->dma.desc++) - if (xrx200_alloc_skb(ch)) - err = -ENOMEM; - ch->dma.desc = 0; - err = request_irq(irq, xrx200_dma_irq, 0, "vrx200_rx", hw); - } else - continue; + ch_rx->dma.nr = XRX200_DMA_RX; + ch_rx->priv = priv; - if (!err) - ch->dma.irq = irq; - else - pr_err("net-xrx200: failed to request irq %d\n", irq); + ltq_dma_alloc_rx(&ch_rx->dma); + for (ch_rx->dma.desc = 0; ch_rx->dma.desc < LTQ_DESC_NUM; + ch_rx->dma.desc++) { + ret = xrx200_alloc_skb(ch_rx); + if (ret) + goto rx_free; } + ch_rx->dma.desc = 0; - return err; + spin_lock_init(&ch_rx->lock); + spin_lock_init(&ch_tx->lock); + + + ret = devm_request_irq(priv->dev, ch_rx->dma.irq, xrx200_dma_irq, 0, + "vrx200_rx", &priv->chan_rx); + if (ret) { + dev_err(priv->dev, "failed to request RX irq %d\n", + ch_rx->dma.irq); + goto rx_ring_free; + } + + ch_tx->dma.nr = XRX200_DMA_TX; + ch_tx->priv = priv; + + ltq_dma_alloc_tx(&ch_tx->dma); + ret = devm_request_irq(priv->dev, ch_tx->dma.irq, xrx200_dma_irq, 0, + "vrx200_tx", &priv->chan_tx); + if (ret) { + dev_err(priv->dev, "failed to request TX irq %d\n", + ch_tx->dma.irq); + goto tx_free; + } + + return ret; + +tx_free: + ltq_dma_free(&ch_tx->dma); + +rx_ring_free: + /* free the allocated RX ring */ + for (i = 0; i < LTQ_DESC_NUM; i++) { + if (priv->chan_rx.skb[i]) + dev_kfree_skb_any(priv->chan_rx.skb[i]); + } + +rx_free: + ltq_dma_free(&ch_rx->dma); + return ret; } #ifdef SW_POLLING @@ -1328,11 +1492,12 @@ { struct net_device *netdev = phydev->attached_dev; - if (do_carrier) + if (do_carrier) { if (up) netif_carrier_on(netdev); else if (!xrx200_phy_has_link(netdev)) netif_carrier_off(netdev); + } phydev->adjust_link(netdev); } @@ -1343,7 +1508,7 @@ struct phy_device *phydev = NULL; unsigned val; - phydev = mdiobus_get_phy(priv->hw->mii_bus, port->phy_addr); + phydev = mdiobus_get_phy(priv->mii_bus, port->phy_addr); if (!phydev) { netdev_err(dev, "no PHY found\n"); @@ -1376,10 +1541,10 @@ #ifdef SW_POLLING phy_read_status(phydev); - val = xrx200_mdio_rd(priv->hw->mii_bus, MDIO_DEVAD_NONE, MII_CTRL1000); + val = xrx200_mdio_rd(priv->mii_bus, MDIO_DEVAD_NONE, MII_CTRL1000); val |= ADVERTIZE_MPD; - xrx200_mdio_wr(priv->hw->mii_bus, MDIO_DEVAD_NONE, MII_CTRL1000, val); - xrx200_mdio_wr(priv->hw->mii_bus, 0, 0, 0x1040); + xrx200_mdio_wr(priv->mii_bus, MDIO_DEVAD_NONE, MII_CTRL1000, val); + xrx200_mdio_wr(priv->mii_bus, 0, 0, 0x1040); phy_start_aneg(phydev); #endif @@ -1522,12 +1687,12 @@ ltq_switch_w32_mask(0, BIT(3), PCE_GCTRL_REG(0)); } -static void xrx200_hw_init(struct xrx200_hw *hw) +static void xrx200_hw_init(struct xrx200_priv *priv) { int i; /* enable clock gate */ - clk_enable(hw->clk); + clk_enable(priv->clk); ltq_switch_w32(1, 0); mdelay(100); @@ -1595,49 +1760,45 @@ xrx200sw_write_x(1, XRX200_BM_QUEUE_GCTRL_GL_MOD, 0); for (i = 0; i < XRX200_MAX_VLAN; i++) - hw->vlan_vid[i] = i; + priv->vlan_vid[i] = i; } -static void xrx200_hw_cleanup(struct xrx200_hw *hw) +static void xrx200_hw_cleanup(struct xrx200_priv *priv) { int i; /* disable the switch */ ltq_mdio_w32_mask(MDIO_GLOB_ENABLE, 0, MDIO_GLOB); - /* free the channels and IRQs */ - for (i = 0; i < 2; i++) { - ltq_dma_free(&hw->chan[i].dma); - if (hw->chan[i].dma.irq) - free_irq(hw->chan[i].dma.irq, hw); - } + ltq_dma_free(&priv->chan_tx.dma); + ltq_dma_free(&priv->chan_rx.dma); /* free the allocated RX ring */ for (i = 0; i < LTQ_DESC_NUM; i++) - dev_kfree_skb_any(hw->chan[XRX200_DMA_RX].skb[i]); + dev_kfree_skb_any(priv->chan_rx.skb[i]); /* clear the mdio bus */ - mdiobus_unregister(hw->mii_bus); - mdiobus_free(hw->mii_bus); + mdiobus_unregister(priv->mii_bus); + mdiobus_free(priv->mii_bus); /* release the clock */ - clk_disable(hw->clk); - clk_put(hw->clk); + clk_disable(priv->clk); + clk_put(priv->clk); } -static int xrx200_of_mdio(struct xrx200_hw *hw, struct device_node *np) +static int xrx200_of_mdio(struct xrx200_priv *priv, struct device_node *np) { - hw->mii_bus = mdiobus_alloc(); - if (!hw->mii_bus) + priv->mii_bus = mdiobus_alloc(); + if (!priv->mii_bus) return -ENOMEM; - hw->mii_bus->read = xrx200_mdio_rd; - hw->mii_bus->write = xrx200_mdio_wr; - hw->mii_bus->name = "lantiq,xrx200-mdio"; - snprintf(hw->mii_bus->id, MII_BUS_ID_SIZE, "%x", 0); + priv->mii_bus->read = xrx200_mdio_rd; + priv->mii_bus->write = xrx200_mdio_wr; + priv->mii_bus->name = "lantiq,xrx200-mdio"; + snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%x", 0); - if (of_mdiobus_register(hw->mii_bus, np)) { - mdiobus_free(hw->mii_bus); + if (of_mdiobus_register(priv->mii_bus, np)) { + mdiobus_free(priv->mii_bus); return -ENXIO; } @@ -1655,6 +1816,7 @@ memset(p, 0, sizeof(struct xrx200_port)); p->phy_node = of_parse_phandle(port, "phy-handle", 0); addr = of_get_property(p->phy_node, "reg", NULL); + if (!addr) return; @@ -1665,6 +1827,7 @@ p->flags = XRX200_PORT_TYPE_MAC; else p->flags = XRX200_PORT_TYPE_PHY; + priv->num_port++; p->gpio = of_get_gpio_flags(port, 0, &p->gpio_flags); @@ -1677,12 +1840,12 @@ } /* is this port a wan port ? */ if (priv->wan) - priv->hw->wan_map |= BIT(p->num); + priv->wan_map |= BIT(p->num); - priv->port_map |= BIT(p->num); + priv->d_port_map |= BIT(p->num); /* store the port id in the hw struct so we can map ports -> devices */ - priv->hw->port_map[p->num] = priv->hw->num_devs; + priv->port_map[p->num] = 0; } static const struct net_device_ops xrx200_netdev_ops = { @@ -1696,29 +1859,18 @@ .ndo_tx_timeout = xrx200_tx_timeout, }; -static void xrx200_of_iface(struct xrx200_hw *hw, struct device_node *iface, struct device *dev) +static void xrx200_of_iface(struct xrx200_priv *priv, struct device_node *iface, struct device *dev) { - struct xrx200_priv *priv; struct device_node *port; const __be32 *wan; const u8 *mac; - /* alloc the network device */ - hw->devs[hw->num_devs] = alloc_etherdev(sizeof(struct xrx200_priv)); - if (!hw->devs[hw->num_devs]) - return; - /* setup the network device */ - strcpy(hw->devs[hw->num_devs]->name, "eth%d"); - hw->devs[hw->num_devs]->netdev_ops = &xrx200_netdev_ops; - hw->devs[hw->num_devs]->watchdog_timeo = XRX200_TX_TIMEOUT; - hw->devs[hw->num_devs]->needed_headroom = XRX200_HEADROOM; - SET_NETDEV_DEV(hw->devs[hw->num_devs], dev); - - /* setup our private data */ - priv = netdev_priv(hw->devs[hw->num_devs]); - priv->hw = hw; - priv->id = hw->num_devs; + strcpy(priv->net_dev->name, "eth%d"); + priv->net_dev->netdev_ops = &xrx200_netdev_ops; + priv->net_dev->watchdog_timeo = XRX200_TX_TIMEOUT; + priv->net_dev->needed_headroom = XRX200_HEADROOM; + SET_NETDEV_DEV(priv->net_dev, dev); mac = of_get_mac_address(iface); if (mac) @@ -1738,20 +1890,34 @@ if (of_device_is_compatible(port, "lantiq,xrx200-pdi-port")) xrx200_of_port(priv, port); - /* register the actual device */ - if (!register_netdev(hw->devs[hw->num_devs])) - hw->num_devs++; } -static struct xrx200_hw xrx200_hw; - static int xrx200_probe(struct platform_device *pdev) { + struct device *dev = &pdev->dev; struct resource *res[4]; struct device_node *mdio_np, *iface_np, *phy_np; struct of_phandle_iterator it; int err; int i; + struct xrx200_priv *priv; + struct net_device *net_dev; + + + /* alloc the network device */ +// TODO add multiqueue? devm_alloc_etherdev_mqs + net_dev = devm_alloc_etherdev(dev, sizeof(struct xrx200_priv)); + if (!net_dev) + return -ENOMEM; + + priv = netdev_priv(net_dev); + priv->net_dev = net_dev; + priv->dev = dev; + + net_dev->netdev_ops = &xrx200_netdev_ops; + SET_NETDEV_DEV(net_dev, dev); + net_dev->min_mtu = ETH_ZLEN; + net_dev->max_mtu = XRX200_DMA_DATA_LEN; /* load the memory ranges */ for (i = 0; i < 4; i++) { @@ -1775,91 +1941,100 @@ phy_np = it.node; if (phy_np) { struct platform_device *phy = of_find_device_by_node(phy_np); - + of_node_put(phy_np); if (!platform_get_drvdata(phy)) return -EPROBE_DEFER; } } + priv->chan_rx.dma.irq = XRX200_DMA_IRQ + XRX200_DMA_RX; + priv->chan_tx.dma.irq = XRX200_DMA_IRQ + XRX200_DMA_TX; + priv->chan_rx.priv = priv; + priv->chan_tx.priv = priv; + /* get the clock */ - xrx200_hw.clk = clk_get(&pdev->dev, NULL); - if (IS_ERR(xrx200_hw.clk)) { + priv->clk = clk_get(&pdev->dev, NULL); + if (IS_ERR(priv->clk)) { dev_err(&pdev->dev, "failed to get clock\n"); - return PTR_ERR(xrx200_hw.clk); + return PTR_ERR(priv->clk); } /* bring up the dma engine and IP core */ - xrx200_dma_init(&xrx200_hw); - xrx200_hw_init(&xrx200_hw); - tasklet_init(&xrx200_hw.chan[XRX200_DMA_TX].tasklet, xrx200_tx_housekeeping, (u32) &xrx200_hw.chan[XRX200_DMA_TX]); - tasklet_init(&xrx200_hw.chan[XRX200_DMA_TX_2].tasklet, xrx200_tx_housekeeping, (u32) &xrx200_hw.chan[XRX200_DMA_TX_2]); + err = xrx200_dma_init(priv); + if (err) + return err; + + /* enable clock gate */ + err = clk_prepare_enable(priv->clk); + if (err) + goto err_uninit_dma; + + xrx200_hw_init(priv); /* bring up the mdio bus */ mdio_np = of_find_compatible_node(pdev->dev.of_node, NULL, "lantiq,xrx200-mdio"); if (mdio_np) - if (xrx200_of_mdio(&xrx200_hw, mdio_np)) + if (xrx200_of_mdio(priv, mdio_np)) dev_err(&pdev->dev, "mdio probe failed\n"); /* load the interfaces */ for_each_child_of_node(pdev->dev.of_node, iface_np) - if (of_device_is_compatible(iface_np, "lantiq,xrx200-pdi")) { - if (xrx200_hw.num_devs < XRX200_MAX_DEV) - xrx200_of_iface(&xrx200_hw, iface_np, &pdev->dev); - else - dev_err(&pdev->dev, - "only %d interfaces allowed\n", - XRX200_MAX_DEV); - } - - if (!xrx200_hw.num_devs) { - xrx200_hw_cleanup(&xrx200_hw); - dev_err(&pdev->dev, "failed to load interfaces\n"); - return -ENOENT; - } + if (of_device_is_compatible(iface_np, "lantiq,xrx200-pdi")) { + xrx200_of_iface(priv, iface_np, &pdev->dev); + break; //hack + } - xrx200sw_init(&xrx200_hw); + xrx200sw_init(priv); /* set wan port mask */ - ltq_pmac_w32(xrx200_hw.wan_map, PMAC_EWAN); - - for (i = 0; i < xrx200_hw.num_devs; i++) { - xrx200_hw.chan[XRX200_DMA_RX].devs[i] = xrx200_hw.devs[i]; - xrx200_hw.chan[XRX200_DMA_TX].devs[i] = xrx200_hw.devs[i]; - xrx200_hw.chan[XRX200_DMA_TX_2].devs[i] = xrx200_hw.devs[i]; - } + ltq_pmac_w32(priv->wan_map, PMAC_EWAN); /* setup NAPI */ - init_dummy_netdev(&xrx200_hw.chan[XRX200_DMA_RX].dummy_dev); - netif_napi_add(&xrx200_hw.chan[XRX200_DMA_RX].dummy_dev, - &xrx200_hw.chan[XRX200_DMA_RX].napi, xrx200_poll_rx, 32); + netif_napi_add(net_dev, &priv->chan_rx.napi, xrx200_poll_rx, 32); //32 + netif_tx_napi_add(net_dev, &priv->chan_tx.napi, xrx200_tx_housekeeping, 32); - platform_set_drvdata(pdev, &xrx200_hw); + net_dev->features |= NETIF_F_SG ; + net_dev->hw_features |= NETIF_F_SG; + net_dev->vlan_features |= NETIF_F_SG; + + platform_set_drvdata(pdev, priv); + + err = register_netdev(net_dev); + if (err) + goto err_unprepare_clk; return 0; + +err_unprepare_clk: + clk_disable_unprepare(priv->clk); + +err_uninit_dma: + xrx200_hw_cleanup(priv); + + return err; } static int xrx200_remove(struct platform_device *pdev) { - struct net_device *dev = platform_get_drvdata(pdev); - struct xrx200_priv *priv; - if (!dev) - return 0; - - priv = netdev_priv(dev); + struct xrx200_priv *priv = platform_get_drvdata(pdev); + struct net_device *net_dev = priv->net_dev; /* free stack related instances */ - netif_stop_queue(dev); - netif_napi_del(&xrx200_hw.chan[XRX200_DMA_RX].napi); - - /* shut down hardware */ - xrx200_hw_cleanup(&xrx200_hw); + netif_stop_queue(net_dev); + netif_napi_del(&priv->chan_tx.napi); + netif_napi_del(&priv->chan_rx.napi); /* remove the actual device */ - unregister_netdev(dev); - free_netdev(dev); + unregister_netdev(net_dev); + + /* release the clock */ + clk_disable_unprepare(priv->clk); + + /* shut down hardware */ + xrx200_hw_cleanup(priv); return 0; }
--- a/arch/mips/lantiq/xway/dma.c 2019-01-26 09:37:07.000000000 +0100 +++ b/arch/mips/lantiq/xway/dma.c 2019-02-12 09:02:03.995200621 +0100 @@ -49,7 +49,10 @@ #define DMA_IRQ_ACK 0x7e /* IRQ status register */ #define DMA_POLL BIT(31) /* turn on channel polling */ #define DMA_CLK_DIV4 BIT(6) /* polling clock divider */ -#define DMA_2W_BURST BIT(1) /* 2 word burst length */ +#define DMA_1W_BURST 0x0 /* 1 word burst length/no burst */ +#define DMA_2W_BURST 0x1 /* 2 word burst length */ +#define DMA_4W_BURST 0x2 /* 4 word burst length */ +#define DMA_8W_BURST 0x3 /* 8 word burst length */ #define DMA_MAX_CHANNEL 20 /* the soc has 20 channels */ #define DMA_ETOP_ENDIANNESS (0xf << 8) /* endianness swap etop channels */ #define DMA_WEIGHT (BIT(17) | BIT(16)) /* default channel wheight */ @@ -138,7 +141,7 @@ spin_lock_irqsave(<q_dma_lock, flags); ltq_dma_w32(ch->nr, LTQ_DMA_CS); ltq_dma_w32(ch->phys, LTQ_DMA_CDBA); - ltq_dma_w32(LTQ_DESC_NUM, LTQ_DMA_CDLEN); + ltq_dma_w32(LTQ_DESC_NUM, LTQ_DMA_CDLEN); //0xff mask ltq_dma_w32_mask(DMA_CHAN_ON, 0, LTQ_DMA_CCTRL); wmb(); ltq_dma_w32_mask(0, DMA_CHAN_RST, LTQ_DMA_CCTRL); @@ -155,7 +158,13 @@ ltq_dma_alloc(ch); spin_lock_irqsave(<q_dma_lock, flags); - ltq_dma_w32(DMA_DESCPT, LTQ_DMA_CIE); + +//DMA_DESCPT BIT(3) //end of descriptor +//BIT(1) //end of packet +// ltq_dma_w32(DMA_DESCPT, LTQ_DMA_CIE); + ltq_dma_w32(BIT(1), LTQ_DMA_CIE); + + ltq_dma_w32_mask(0, 1 << ch->nr, LTQ_DMA_IRNEN); ltq_dma_w32(DMA_WEIGHT | DMA_TX, LTQ_DMA_CCTRL); spin_unlock_irqrestore(<q_dma_lock, flags); @@ -194,6 +203,12 @@ ltq_dma_w32(p, LTQ_DMA_PS); switch (p) { case DMA_PORT_ETOP: + + /* 8 words burst, data must be aligned on 4*N bytes or freeze */ +//TODO? different bursts for TX and RX (RX is fine at 1G eth) + ltq_dma_w32_mask(0x3c, (DMA_8W_BURST << 4) | (DMA_8W_BURST << 2), + LTQ_DMA_PCTRL); + /* * Tell the DMA engine to swap the endianness of data frames and * drop packets if the channel arbitration fails. @@ -241,10 +256,18 @@ for (i = 0; i < DMA_MAX_CHANNEL; i++) { ltq_dma_w32(i, LTQ_DMA_CS); ltq_dma_w32(DMA_CHAN_RST, LTQ_DMA_CCTRL); - ltq_dma_w32(DMA_POLL | DMA_CLK_DIV4, LTQ_DMA_CPOLL); ltq_dma_w32_mask(DMA_CHAN_ON, 0, LTQ_DMA_CCTRL); } +//TODO 0x100 << 4 fastest TX without fragments +// 0x100 for fragments timeouts, 0x10 only under really _heavy_ load +//TODO not dependent on channel select (LTQ_DMA_CS), why it was in for cycle + ltq_dma_w32(DMA_POLL | (0x10 << 4), LTQ_DMA_CPOLL); + +//TODO packet arbitration ???, test different values +//0x3ff << 16 multiple burst count, 1<<30 multiple burst arbitration, 1<<31 packet arbitration, 1<<0 reset (!) +// ltq_dma_w32((1 << 31) | 0x40000, LTQ_DMA_CTRL); + id = ltq_dma_r32(LTQ_DMA_ID); dev_info(&pdev->dev, "Init done - hw rev: %X, ports: %d, channels: %d\n",
CPU0 CPU1 7: 1451904 1447178 MIPS 7 timer 8: 1470 1583 MIPS 0 IPI call 9: 13209 23532 MIPS 1 IPI resched 22: 14753 1 icu 22 spi_rx 23: 2487 1 icu 23 spi_tx 24: 0 0 icu 24 spi_err 62: 0 0 icu 62 1e101000.usb, dwc2_hsotg:usb1 63: 54612 0 icu 63 mei_cpe 72: 72429 0 icu 72 vrx200_rx 73: 0 525338 icu 73 vrx200_tx 91: 0 0 icu 91 1e106000.usb, dwc2_hsotg:usb2 112: 640 0 icu 112 asc_tx 113: 0 105 icu 113 asc_rx 114: 0 0 icu 114 asc_err 126: 0 0 icu 126 gptu 127: 0 0 icu 127 gptu 128: 0 0 icu 128 gptu 129: 0 0 icu 129 gptu 130: 0 0 icu 130 gptu 131: 0 0 icu 131 gptu 161: 0 0 icu 161 ifx_pcie_rc0 ERR: 1
+ : ':::::::[' configuration final_single_queue_everything ']:::::::' : + iperf3 -c 10.0.0.80 Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 48266 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 34.1 MBytes 286 Mbits/sec 0 214 KBytes [ 4] 1.00-2.00 sec 35.6 MBytes 299 Mbits/sec 2 214 KBytes [ 4] 2.00-3.00 sec 37.0 MBytes 310 Mbits/sec 0 215 KBytes [ 4] 3.00-4.00 sec 35.9 MBytes 301 Mbits/sec 3 204 KBytes [ 4] 4.00-5.00 sec 34.7 MBytes 291 Mbits/sec 2 170 KBytes [ 4] 5.00-6.00 sec 35.5 MBytes 298 Mbits/sec 2 214 KBytes [ 4] 6.00-7.00 sec 34.4 MBytes 288 Mbits/sec 9 127 KBytes [ 4] 7.00-8.00 sec 32.9 MBytes 276 Mbits/sec 6 160 KBytes [ 4] 8.00-9.00 sec 33.8 MBytes 284 Mbits/sec 0 215 KBytes [ 4] 9.00-10.00 sec 34.0 MBytes 285 Mbits/sec 5 214 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 348 MBytes 292 Mbits/sec 29 sender [ 4] 0.00-10.00 sec 347 MBytes 291 Mbits/sec receiver iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -R Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 48272 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-1.00 sec 27.8 MBytes 233 Mbits/sec [ 4] 1.00-2.00 sec 28.1 MBytes 236 Mbits/sec [ 4] 2.00-3.00 sec 27.9 MBytes 234 Mbits/sec [ 4] 3.00-4.00 sec 28.0 MBytes 235 Mbits/sec [ 4] 4.00-5.00 sec 28.1 MBytes 236 Mbits/sec [ 4] 5.00-6.00 sec 28.0 MBytes 235 Mbits/sec [ 4] 6.00-7.00 sec 28.1 MBytes 236 Mbits/sec [ 4] 7.00-8.00 sec 27.9 MBytes 234 Mbits/sec [ 4] 8.00-9.00 sec 28.0 MBytes 235 Mbits/sec [ 4] 9.00-10.00 sec 28.1 MBytes 235 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 281 MBytes 236 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 281 MBytes 236 Mbits/sec receiver iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 150M Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 44387 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-1.00 sec 16.5 MBytes 138 Mbits/sec 2111 [ 4] 1.00-2.00 sec 17.9 MBytes 151 Mbits/sec 2297 [ 4] 2.00-3.00 sec 17.8 MBytes 149 Mbits/sec 2281 [ 4] 3.00-4.00 sec 17.8 MBytes 149 Mbits/sec 2272 [ 4] 4.00-5.00 sec 17.9 MBytes 150 Mbits/sec 2296 [ 4] 5.00-6.00 sec 17.9 MBytes 150 Mbits/sec 2286 [ 4] 6.00-7.00 sec 17.9 MBytes 150 Mbits/sec 2286 [ 4] 7.00-8.00 sec 18.0 MBytes 151 Mbits/sec 2299 [ 4] 8.00-9.00 sec 17.9 MBytes 150 Mbits/sec 2285 [ 4] 9.00-10.00 sec 18.1 MBytes 152 Mbits/sec 2313 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 178 MBytes 149 Mbits/sec 22.169 ms 836/1047 (80%) [ 4] Sent 1047 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 150M -R Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 58068 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-1.00 sec 17.9 MBytes 150 Mbits/sec 0.069 ms 0/2288 (0%) [ 4] 1.00-2.00 sec 17.9 MBytes 150 Mbits/sec 0.049 ms 0/2288 (0%) [ 4] 2.00-3.00 sec 17.9 MBytes 150 Mbits/sec 0.061 ms 0/2289 (0%) [ 4] 3.00-4.00 sec 17.9 MBytes 150 Mbits/sec 0.067 ms 0/2290 (0%) [ 4] 4.00-5.00 sec 17.9 MBytes 150 Mbits/sec 0.060 ms 0/2288 (0%) [ 4] 5.00-6.00 sec 17.9 MBytes 150 Mbits/sec 0.063 ms 0/2289 (0%) [ 4] 6.00-7.00 sec 17.9 MBytes 150 Mbits/sec 0.059 ms 0/2289 (0%) [ 4] 7.00-8.00 sec 17.9 MBytes 150 Mbits/sec 0.059 ms 0/2288 (0%) [ 4] 8.00-9.00 sec 17.9 MBytes 150 Mbits/sec 0.065 ms 0/2289 (0%) [ 4] 9.00-10.00 sec 17.9 MBytes 150 Mbits/sec 0.087 ms 0/2288 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 179 MBytes 150 Mbits/sec 0.082 ms 0/22888 (0%) [ 4] Sent 22888 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 500M Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 47429 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-1.00 sec 55.8 MBytes 468 Mbits/sec 7141 [ 4] 1.00-2.00 sec 59.3 MBytes 497 Mbits/sec 7585 [ 4] 2.00-3.00 sec 60.1 MBytes 504 Mbits/sec 7689 [ 4] 3.00-4.00 sec 59.0 MBytes 495 Mbits/sec 7552 [ 4] 4.00-5.00 sec 60.0 MBytes 504 Mbits/sec 7683 [ 4] 5.00-6.00 sec 58.6 MBytes 492 Mbits/sec 7504 [ 4] 6.00-7.00 sec 62.7 MBytes 526 Mbits/sec 8020 [ 4] 7.00-8.00 sec 60.6 MBytes 508 Mbits/sec 7753 [ 4] 8.00-9.00 sec 59.9 MBytes 503 Mbits/sec 7672 [ 4] 9.00-10.00 sec 59.6 MBytes 500 Mbits/sec 7625 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 596 MBytes 500 Mbits/sec 326.537 ms 64686/64855 (1e+02%) [ 4] Sent 64855 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 500M -R Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 51567 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-1.00 sec 26.0 MBytes 218 Mbits/sec 0.060 ms 0/3327 (0%) [ 4] 1.00-2.00 sec 26.1 MBytes 219 Mbits/sec 0.038 ms 0/3336 (0%) [ 4] 2.00-3.00 sec 26.3 MBytes 221 Mbits/sec 0.059 ms 0/3366 (0%) [ 4] 3.00-4.00 sec 26.2 MBytes 220 Mbits/sec 0.054 ms 0/3353 (0%) [ 4] 4.00-5.00 sec 26.2 MBytes 220 Mbits/sec 0.074 ms 0/3357 (0%) [ 4] 5.00-6.00 sec 26.2 MBytes 220 Mbits/sec 0.052 ms 0/3355 (0%) [ 4] 6.00-7.00 sec 26.2 MBytes 220 Mbits/sec 0.051 ms 0/3354 (0%) [ 4] 7.00-8.00 sec 26.2 MBytes 220 Mbits/sec 0.053 ms 0/3359 (0%) [ 4] 8.00-9.00 sec 26.2 MBytes 220 Mbits/sec 0.038 ms 0/3356 (0%) [ 4] 9.00-10.00 sec 26.1 MBytes 219 Mbits/sec 0.056 ms 0/3347 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 262 MBytes 220 Mbits/sec 0.064 ms 0/33511 (0%) [ 4] Sent 33511 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 1000M Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 48563 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-1.00 sec 105 MBytes 884 Mbits/sec 13482 [ 4] 1.00-2.00 sec 105 MBytes 879 Mbits/sec 13413 [ 4] 2.00-3.00 sec 103 MBytes 862 Mbits/sec 13148 [ 4] 3.00-4.00 sec 104 MBytes 872 Mbits/sec 13309 [ 4] 4.00-5.00 sec 103 MBytes 862 Mbits/sec 13154 [ 4] 5.00-6.00 sec 104 MBytes 872 Mbits/sec 13300 [ 4] 6.00-7.00 sec 104 MBytes 871 Mbits/sec 13285 [ 4] 7.00-8.00 sec 104 MBytes 873 Mbits/sec 13322 [ 4] 8.00-9.00 sec 105 MBytes 877 Mbits/sec 13389 [ 4] 9.00-10.00 sec 104 MBytes 875 Mbits/sec 13349 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 1.02 GBytes 873 Mbits/sec 23058.560 ms 131667/131770 (1e+02%) [ 4] Sent 131770 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 1000M -R Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 50599 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-1.00 sec 26.2 MBytes 220 Mbits/sec 0.081 ms 0/3352 (0%) [ 4] 1.00-2.00 sec 26.2 MBytes 220 Mbits/sec 0.041 ms 0/3358 (0%) [ 4] 2.00-3.00 sec 26.3 MBytes 220 Mbits/sec 0.082 ms 0/3362 (0%) [ 4] 3.00-4.00 sec 26.1 MBytes 219 Mbits/sec 0.070 ms 0/3341 (0%) [ 4] 4.00-5.00 sec 26.1 MBytes 219 Mbits/sec 0.066 ms 0/3340 (0%) [ 4] 5.00-6.00 sec 26.1 MBytes 219 Mbits/sec 0.089 ms 0/3336 (0%) [ 4] 6.00-7.00 sec 26.2 MBytes 220 Mbits/sec 0.042 ms 0/3352 (0%) [ 4] 7.00-8.00 sec 26.2 MBytes 220 Mbits/sec 0.062 ms 0/3360 (0%) [ 4] 8.00-9.00 sec 26.2 MBytes 220 Mbits/sec 0.071 ms 0/3358 (0%) [ 4] 9.00-10.00 sec 26.2 MBytes 220 Mbits/sec 0.060 ms 0/3356 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 262 MBytes 220 Mbits/sec 0.062 ms 0/33516 (0%) [ 4] Sent 33516 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -P3 Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 48312 connected to 10.0.0.80 port 5201 [ 6] local 10.0.0.1 port 48314 connected to 10.0.0.80 port 5201 [ 9] local 10.0.0.1 port 48316 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 9.57 MBytes 80.2 Mbits/sec 30 17.0 KBytes [ 6] 0.00-1.00 sec 14.8 MBytes 124 Mbits/sec 16 11.3 KBytes [ 9] 0.00-1.00 sec 8.64 MBytes 72.4 Mbits/sec 73 69.3 KBytes [SUM] 0.00-1.00 sec 33.0 MBytes 277 Mbits/sec 119 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 1.00-2.00 sec 7.33 MBytes 61.5 Mbits/sec 52 17.0 KBytes [ 6] 1.00-2.00 sec 15.8 MBytes 133 Mbits/sec 31 122 KBytes [ 9] 1.00-2.00 sec 10.0 MBytes 83.9 Mbits/sec 45 39.6 KBytes [SUM] 1.00-2.00 sec 33.2 MBytes 278 Mbits/sec 128 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 2.00-3.00 sec 5.72 MBytes 48.0 Mbits/sec 48 14.1 KBytes [ 6] 2.00-3.00 sec 20.3 MBytes 171 Mbits/sec 48 67.9 KBytes [ 9] 2.00-3.00 sec 7.02 MBytes 58.9 Mbits/sec 41 32.5 KBytes [SUM] 2.00-3.00 sec 33.1 MBytes 277 Mbits/sec 137 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 3.00-4.00 sec 6.90 MBytes 57.9 Mbits/sec 62 25.5 KBytes [ 6] 3.00-4.00 sec 17.3 MBytes 145 Mbits/sec 28 66.5 KBytes [ 9] 3.00-4.00 sec 8.45 MBytes 70.9 Mbits/sec 44 31.1 KBytes [SUM] 3.00-4.00 sec 32.6 MBytes 274 Mbits/sec 134 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 4.00-5.00 sec 5.59 MBytes 46.9 Mbits/sec 48 60.8 KBytes [ 6] 4.00-5.00 sec 15.8 MBytes 133 Mbits/sec 28 86.3 KBytes [ 9] 4.00-5.00 sec 11.1 MBytes 93.3 Mbits/sec 60 72.1 KBytes [SUM] 4.00-5.00 sec 32.6 MBytes 273 Mbits/sec 136 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 5.00-6.00 sec 8.20 MBytes 68.8 Mbits/sec 75 26.9 KBytes [ 6] 5.00-6.00 sec 18.3 MBytes 154 Mbits/sec 16 67.9 KBytes [ 9] 5.00-6.00 sec 5.47 MBytes 45.9 Mbits/sec 54 32.5 KBytes [SUM] 5.00-6.00 sec 32.0 MBytes 269 Mbits/sec 145 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 6.00-7.00 sec 9.69 MBytes 81.3 Mbits/sec 61 24.0 KBytes [ 6] 6.00-7.00 sec 17.3 MBytes 145 Mbits/sec 17 103 KBytes [ 9] 6.00-7.00 sec 4.72 MBytes 39.6 Mbits/sec 48 39.6 KBytes [SUM] 6.00-7.00 sec 31.7 MBytes 266 Mbits/sec 126 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 7.00-8.00 sec 6.28 MBytes 52.6 Mbits/sec 60 74.9 KBytes [ 6] 7.00-8.00 sec 11.1 MBytes 93.3 Mbits/sec 42 49.5 KBytes [ 9] 7.00-8.00 sec 15.6 MBytes 131 Mbits/sec 32 67.9 KBytes [SUM] 7.00-8.00 sec 33.0 MBytes 277 Mbits/sec 134 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 8.00-9.00 sec 9.69 MBytes 81.3 Mbits/sec 49 39.6 KBytes [ 6] 8.00-9.00 sec 3.42 MBytes 28.7 Mbits/sec 55 28.3 KBytes [ 9] 8.00-9.00 sec 18.8 MBytes 157 Mbits/sec 16 123 KBytes [SUM] 8.00-9.00 sec 31.9 MBytes 267 Mbits/sec 120 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 9.00-10.00 sec 6.46 MBytes 54.2 Mbits/sec 66 59.4 KBytes [ 6] 9.00-10.00 sec 14.7 MBytes 124 Mbits/sec 11 161 KBytes [ 9] 9.00-10.00 sec 11.7 MBytes 98.0 Mbits/sec 37 21.2 KBytes [SUM] 9.00-10.00 sec 32.9 MBytes 276 Mbits/sec 114 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 75.4 MBytes 63.3 Mbits/sec 551 sender [ 4] 0.00-10.00 sec 74.8 MBytes 62.8 Mbits/sec receiver [ 6] 0.00-10.00 sec 149 MBytes 125 Mbits/sec 292 sender [ 6] 0.00-10.00 sec 148 MBytes 124 Mbits/sec receiver [ 9] 0.00-10.00 sec 101 MBytes 85.1 Mbits/sec 450 sender [ 9] 0.00-10.00 sec 101 MBytes 84.4 Mbits/sec receiver [SUM] 0.00-10.00 sec 326 MBytes 273 Mbits/sec 1293 sender [SUM] 0.00-10.00 sec 323 MBytes 271 Mbits/sec receiver iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -P3 -R Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 48320 connected to 10.0.0.80 port 5201 [ 6] local 10.0.0.1 port 48322 connected to 10.0.0.80 port 5201 [ 9] local 10.0.0.1 port 48324 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-1.00 sec 9.25 MBytes 77.6 Mbits/sec [ 6] 0.00-1.00 sec 9.25 MBytes 77.6 Mbits/sec [ 9] 0.00-1.00 sec 8.00 MBytes 67.1 Mbits/sec [SUM] 0.00-1.00 sec 26.5 MBytes 222 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 1.00-2.00 sec 9.25 MBytes 77.6 Mbits/sec [ 6] 1.00-2.00 sec 9.19 MBytes 77.1 Mbits/sec [ 9] 1.00-2.00 sec 9.12 MBytes 76.5 Mbits/sec [SUM] 1.00-2.00 sec 27.6 MBytes 231 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 2.00-3.00 sec 9.10 MBytes 76.4 Mbits/sec [ 6] 2.00-3.00 sec 9.06 MBytes 76.0 Mbits/sec [ 9] 2.00-3.00 sec 9.12 MBytes 76.6 Mbits/sec [SUM] 2.00-3.00 sec 27.3 MBytes 229 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 3.00-4.00 sec 9.15 MBytes 76.7 Mbits/sec [ 6] 3.00-4.00 sec 9.25 MBytes 77.6 Mbits/sec [ 9] 3.00-4.00 sec 9.21 MBytes 77.2 Mbits/sec [SUM] 3.00-4.00 sec 27.6 MBytes 232 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 4.00-5.00 sec 9.12 MBytes 76.5 Mbits/sec [ 6] 4.00-5.00 sec 9.12 MBytes 76.6 Mbits/sec [ 9] 4.00-5.00 sec 9.04 MBytes 75.9 Mbits/sec [SUM] 4.00-5.00 sec 27.3 MBytes 229 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 5.00-6.00 sec 9.12 MBytes 76.5 Mbits/sec [ 6] 5.00-6.00 sec 9.12 MBytes 76.5 Mbits/sec [ 9] 5.00-6.00 sec 9.19 MBytes 77.1 Mbits/sec [SUM] 5.00-6.00 sec 27.4 MBytes 230 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 6.00-7.00 sec 9.25 MBytes 77.6 Mbits/sec [ 6] 6.00-7.00 sec 9.12 MBytes 76.5 Mbits/sec [ 9] 6.00-7.00 sec 9.19 MBytes 77.1 Mbits/sec [SUM] 6.00-7.00 sec 27.6 MBytes 231 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 7.00-8.00 sec 9.00 MBytes 75.5 Mbits/sec [ 6] 7.00-8.00 sec 9.12 MBytes 76.5 Mbits/sec [ 9] 7.00-8.00 sec 9.06 MBytes 76.0 Mbits/sec [SUM] 7.00-8.00 sec 27.2 MBytes 228 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 8.00-9.00 sec 9.12 MBytes 76.5 Mbits/sec [ 6] 8.00-9.00 sec 9.12 MBytes 76.5 Mbits/sec [ 9] 8.00-9.00 sec 9.19 MBytes 77.1 Mbits/sec [SUM] 8.00-9.00 sec 27.4 MBytes 230 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 9.00-10.00 sec 9.14 MBytes 76.7 Mbits/sec [ 6] 9.00-10.00 sec 9.12 MBytes 76.6 Mbits/sec [ 9] 9.00-10.00 sec 9.12 MBytes 76.6 Mbits/sec [SUM] 9.00-10.00 sec 27.4 MBytes 230 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 92.5 MBytes 77.6 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 92.5 MBytes 77.6 Mbits/sec receiver [ 6] 0.00-10.00 sec 92.4 MBytes 77.5 Mbits/sec 0 sender [ 6] 0.00-10.00 sec 92.4 MBytes 77.5 Mbits/sec receiver [ 9] 0.00-10.00 sec 91.2 MBytes 76.5 Mbits/sec 0 sender [ 9] 0.00-10.00 sec 91.2 MBytes 76.5 Mbits/sec receiver [SUM] 0.00-10.00 sec 276 MBytes 232 Mbits/sec 0 sender [SUM] 0.00-10.00 sec 276 MBytes 232 Mbits/sec receiver iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -P3 -u -b 800M Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 58529 connected to 10.0.0.80 port 5201 [ 6] local 10.0.0.1 port 48003 connected to 10.0.0.80 port 5201 [ 9] local 10.0.0.1 port 37996 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-1.00 sec 36.9 MBytes 310 Mbits/sec 4726 [ 6] 0.00-1.00 sec 36.9 MBytes 310 Mbits/sec 4726 [ 9] 0.00-1.00 sec 36.9 MBytes 310 Mbits/sec 4726 [SUM] 0.00-1.00 sec 111 MBytes 929 Mbits/sec 14178 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 1.00-2.00 sec 37.5 MBytes 315 Mbits/sec 4802 [ 6] 1.00-2.00 sec 37.5 MBytes 315 Mbits/sec 4802 [ 9] 1.00-2.00 sec 37.5 MBytes 315 Mbits/sec 4802 [SUM] 1.00-2.00 sec 113 MBytes 944 Mbits/sec 14406 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 2.00-3.00 sec 37.5 MBytes 314 Mbits/sec 4798 [ 6] 2.00-3.00 sec 37.5 MBytes 314 Mbits/sec 4798 [ 9] 2.00-3.00 sec 37.5 MBytes 314 Mbits/sec 4798 [SUM] 2.00-3.00 sec 112 MBytes 943 Mbits/sec 14394 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 3.00-4.00 sec 37.6 MBytes 316 Mbits/sec 4816 [ 6] 3.00-4.00 sec 37.6 MBytes 316 Mbits/sec 4816 [ 9] 3.00-4.00 sec 37.6 MBytes 316 Mbits/sec 4816 [SUM] 3.00-4.00 sec 113 MBytes 947 Mbits/sec 14448 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 4.00-5.00 sec 37.6 MBytes 316 Mbits/sec 4817 [ 6] 4.00-5.00 sec 37.6 MBytes 316 Mbits/sec 4817 [ 9] 4.00-5.00 sec 37.6 MBytes 316 Mbits/sec 4817 [SUM] 4.00-5.00 sec 113 MBytes 947 Mbits/sec 14451 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 5.00-6.00 sec 37.6 MBytes 316 Mbits/sec 4816 [ 6] 5.00-6.00 sec 37.6 MBytes 316 Mbits/sec 4816 [ 9] 5.00-6.00 sec 37.6 MBytes 316 Mbits/sec 4816 [SUM] 5.00-6.00 sec 113 MBytes 947 Mbits/sec 14448 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 6.00-7.00 sec 37.6 MBytes 316 Mbits/sec 4816 [ 6] 6.00-7.00 sec 37.6 MBytes 316 Mbits/sec 4816 [ 9] 6.00-7.00 sec 37.6 MBytes 316 Mbits/sec 4816 [SUM] 6.00-7.00 sec 113 MBytes 947 Mbits/sec 14448 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 7.00-8.00 sec 37.6 MBytes 315 Mbits/sec 4809 [ 6] 7.00-8.00 sec 37.6 MBytes 315 Mbits/sec 4809 [ 9] 7.00-8.00 sec 37.6 MBytes 315 Mbits/sec 4809 [SUM] 7.00-8.00 sec 113 MBytes 946 Mbits/sec 14427 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 8.00-9.00 sec 37.1 MBytes 311 Mbits/sec 4748 [ 6] 8.00-9.00 sec 37.1 MBytes 311 Mbits/sec 4748 [ 9] 8.00-9.00 sec 37.1 MBytes 311 Mbits/sec 4748 [SUM] 8.00-9.00 sec 111 MBytes 933 Mbits/sec 14244 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 9.00-10.00 sec 37.8 MBytes 317 Mbits/sec 4833 [ 6] 9.00-10.00 sec 37.8 MBytes 317 Mbits/sec 4833 [ 9] 9.00-10.00 sec 37.8 MBytes 317 Mbits/sec 4833 [SUM] 9.00-10.00 sec 113 MBytes 950 Mbits/sec 14499 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 375 MBytes 314 Mbits/sec 619852.537 ms 43828/43880 (1e+02%) [ 4] Sent 43880 datagrams [ 6] 0.00-10.00 sec 375 MBytes 314 Mbits/sec 1181885.514 ms 43899/43941 (1e+02%) [ 6] Sent 43941 datagrams [ 9] 0.00-10.00 sec 375 MBytes 314 Mbits/sec 802422.739 ms 43889/43937 (1e+02%) [ 9] Sent 43937 datagrams [SUM] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec 868053.597 ms 131616/131758 (1e+02%) iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -P3 -R -u -b 800M Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 57931 connected to 10.0.0.80 port 5201 [ 6] local 10.0.0.1 port 54966 connected to 10.0.0.80 port 5201 [ 9] local 10.0.0.1 port 43968 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-1.00 sec 9.13 MBytes 76.6 Mbits/sec 0.062 ms 0/1169 (0%) [ 6] 0.00-1.00 sec 9.13 MBytes 76.6 Mbits/sec 0.045 ms 0/1169 (0%) [ 9] 0.00-1.00 sec 9.12 MBytes 76.5 Mbits/sec 0.037 ms 0/1168 (0%) [SUM] 0.00-1.00 sec 27.4 MBytes 230 Mbits/sec 0.048 ms 0/3506 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 1.00-2.00 sec 9.12 MBytes 76.5 Mbits/sec 0.042 ms 0/1168 (0%) [ 6] 1.00-2.00 sec 9.12 MBytes 76.5 Mbits/sec 0.076 ms 0/1168 (0%) [ 9] 1.00-2.00 sec 9.12 MBytes 76.5 Mbits/sec 0.040 ms 0/1168 (0%) [SUM] 1.00-2.00 sec 27.4 MBytes 230 Mbits/sec 0.053 ms 0/3504 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 2.00-3.00 sec 9.08 MBytes 76.2 Mbits/sec 0.144 ms 0/1162 (0%) [ 6] 2.00-3.00 sec 9.08 MBytes 76.2 Mbits/sec 0.128 ms 0/1162 (0%) [ 9] 2.00-3.00 sec 9.07 MBytes 76.1 Mbits/sec 0.174 ms 0/1161 (0%) [SUM] 2.00-3.00 sec 27.2 MBytes 228 Mbits/sec 0.149 ms 0/3485 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 3.00-4.00 sec 9.07 MBytes 76.1 Mbits/sec 0.094 ms 0/1161 (0%) [ 6] 3.00-4.00 sec 9.07 MBytes 76.1 Mbits/sec 0.171 ms 0/1161 (0%) [ 9] 3.00-4.00 sec 9.08 MBytes 76.2 Mbits/sec 0.138 ms 0/1162 (0%) [SUM] 3.00-4.00 sec 27.2 MBytes 228 Mbits/sec 0.134 ms 0/3484 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 4.00-5.00 sec 9.12 MBytes 76.5 Mbits/sec 0.098 ms 0/1168 (0%) [ 6] 4.00-5.00 sec 9.12 MBytes 76.5 Mbits/sec 0.052 ms 0/1167 (0%) [ 9] 4.00-5.00 sec 9.12 MBytes 76.5 Mbits/sec 0.114 ms 0/1167 (0%) [SUM] 4.00-5.00 sec 27.4 MBytes 229 Mbits/sec 0.088 ms 0/3502 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 5.00-6.00 sec 9.10 MBytes 76.4 Mbits/sec 0.189 ms 0/1165 (0%) [ 6] 5.00-6.00 sec 9.11 MBytes 76.4 Mbits/sec 0.172 ms 0/1166 (0%) [ 9] 5.00-6.00 sec 9.10 MBytes 76.4 Mbits/sec 0.121 ms 0/1165 (0%) [SUM] 5.00-6.00 sec 27.3 MBytes 229 Mbits/sec 0.161 ms 0/3496 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 6.00-7.00 sec 9.08 MBytes 76.2 Mbits/sec 0.173 ms 0/1162 (0%) [ 6] 6.00-7.00 sec 9.08 MBytes 76.2 Mbits/sec 0.143 ms 0/1162 (0%) [ 9] 6.00-7.00 sec 9.08 MBytes 76.2 Mbits/sec 0.106 ms 0/1162 (0%) [SUM] 6.00-7.00 sec 27.2 MBytes 228 Mbits/sec 0.141 ms 0/3486 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 7.00-8.00 sec 9.09 MBytes 76.2 Mbits/sec 0.030 ms 0/1163 (0%) [ 6] 7.00-8.00 sec 9.09 MBytes 76.2 Mbits/sec 0.061 ms 0/1163 (0%) [ 9] 7.00-8.00 sec 9.09 MBytes 76.2 Mbits/sec 0.043 ms 0/1163 (0%) [SUM] 7.00-8.00 sec 27.3 MBytes 229 Mbits/sec 0.045 ms 0/3489 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 8.00-9.00 sec 9.09 MBytes 76.3 Mbits/sec 0.126 ms 0/1164 (0%) [ 6] 8.00-9.00 sec 9.09 MBytes 76.3 Mbits/sec 0.191 ms 0/1164 (0%) [ 9] 8.00-9.00 sec 9.09 MBytes 76.3 Mbits/sec 0.156 ms 0/1164 (0%) [SUM] 8.00-9.00 sec 27.3 MBytes 229 Mbits/sec 0.157 ms 0/3492 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 9.00-10.00 sec 9.10 MBytes 76.3 Mbits/sec 0.082 ms 0/1165 (0%) [ 6] 9.00-10.00 sec 9.09 MBytes 76.3 Mbits/sec 0.174 ms 0/1164 (0%) [ 9] 9.00-10.00 sec 9.10 MBytes 76.3 Mbits/sec 0.132 ms 0/1165 (0%) [SUM] 9.00-10.00 sec 27.3 MBytes 229 Mbits/sec 0.129 ms 0/3494 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 91.0 MBytes 76.3 Mbits/sec 0.082 ms 0/11647 (0%) [ 4] Sent 11647 datagrams [ 6] 0.00-10.00 sec 91.0 MBytes 76.3 Mbits/sec 0.165 ms 0/11647 (0%) [ 6] Sent 11647 datagrams [ 9] 0.00-10.00 sec 91.0 MBytes 76.3 Mbits/sec 0.131 ms 0/11646 (0%) [ 9] Sent 11646 datagrams [SUM] 0.00-10.00 sec 273 MBytes 229 Mbits/sec 0.126 ms 0/34940 (0%) iperf Done.
+ : ':::::::[' configuration vanilla ']:::::::' : + iperf3 -c 10.0.0.80 Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 51814 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 21.2 MBytes 178 Mbits/sec 27 72.1 KBytes [ 4] 1.00-2.00 sec 20.6 MBytes 173 Mbits/sec 29 70.7 KBytes [ 4] 2.00-3.00 sec 20.8 MBytes 174 Mbits/sec 35 60.8 KBytes [ 4] 3.00-4.00 sec 20.8 MBytes 174 Mbits/sec 29 73.5 KBytes [ 4] 4.00-5.00 sec 20.8 MBytes 174 Mbits/sec 32 70.7 KBytes [ 4] 5.00-6.00 sec 20.7 MBytes 174 Mbits/sec 35 69.3 KBytes [ 4] 6.00-7.00 sec 20.8 MBytes 174 Mbits/sec 36 60.8 KBytes [ 4] 7.00-8.00 sec 20.8 MBytes 175 Mbits/sec 29 59.4 KBytes [ 4] 8.00-9.00 sec 20.8 MBytes 175 Mbits/sec 41 46.7 KBytes [ 4] 9.00-10.00 sec 20.8 MBytes 175 Mbits/sec 28 50.9 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 208 MBytes 174 Mbits/sec 321 sender [ 4] 0.00-10.00 sec 208 MBytes 174 Mbits/sec receiver iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -R Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 51862 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-1.00 sec 9.63 MBytes 80.7 Mbits/sec [ 4] 1.00-2.00 sec 9.65 MBytes 81.0 Mbits/sec [ 4] 2.00-3.00 sec 9.52 MBytes 79.9 Mbits/sec [ 4] 3.00-4.00 sec 9.69 MBytes 81.3 Mbits/sec [ 4] 4.00-5.00 sec 9.68 MBytes 81.2 Mbits/sec [ 4] 5.00-6.00 sec 9.66 MBytes 81.0 Mbits/sec [ 4] 6.00-7.00 sec 9.68 MBytes 81.2 Mbits/sec [ 4] 7.00-8.00 sec 9.70 MBytes 81.4 Mbits/sec [ 4] 8.00-9.00 sec 9.69 MBytes 81.3 Mbits/sec [ 4] 9.00-10.00 sec 9.79 MBytes 82.1 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 97.0 MBytes 81.4 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 97.0 MBytes 81.4 Mbits/sec receiver iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 150M Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 51957 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-1.00 sec 16.4 MBytes 138 Mbits/sec 2101 [ 4] 1.00-2.00 sec 17.9 MBytes 150 Mbits/sec 2288 [ 4] 2.00-3.00 sec 17.9 MBytes 150 Mbits/sec 2285 [ 4] 3.00-4.00 sec 17.9 MBytes 150 Mbits/sec 2292 [ 4] 4.00-5.00 sec 17.9 MBytes 150 Mbits/sec 2287 [ 4] 5.00-6.00 sec 17.9 MBytes 150 Mbits/sec 2291 [ 4] 6.00-7.00 sec 17.9 MBytes 150 Mbits/sec 2288 [ 4] 7.00-8.00 sec 17.9 MBytes 150 Mbits/sec 2291 [ 4] 8.00-9.00 sec 17.8 MBytes 150 Mbits/sec 2282 [ 4] 9.00-10.00 sec 17.9 MBytes 150 Mbits/sec 2292 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 177 MBytes 149 Mbits/sec 136434.385 ms 1349/1417 (95%) [ 4] Sent 1417 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 150M -R Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 46317 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-1.00 sec 14.7 MBytes 124 Mbits/sec 0.077 ms 0/1885 (0%) [ 4] 1.00-2.00 sec 15.2 MBytes 127 Mbits/sec 0.072 ms 0/1942 (0%) [ 4] 2.00-3.00 sec 15.0 MBytes 126 Mbits/sec 0.074 ms 0/1924 (0%) [ 4] 3.00-4.00 sec 14.3 MBytes 120 Mbits/sec 0.080 ms 0/1825 (0%) [ 4] 4.00-5.00 sec 14.4 MBytes 120 Mbits/sec 0.079 ms 0/1837 (0%) [ 4] 5.00-6.00 sec 14.8 MBytes 124 Mbits/sec 0.065 ms 0/1888 (0%) [ 4] 6.00-7.00 sec 15.3 MBytes 128 Mbits/sec 0.076 ms 0/1956 (0%) [ 4] 7.00-8.00 sec 15.2 MBytes 128 Mbits/sec 0.095 ms 0/1948 (0%) [ 4] 8.00-9.00 sec 15.1 MBytes 127 Mbits/sec 0.092 ms 0/1932 (0%) [ 4] 9.00-10.00 sec 15.1 MBytes 127 Mbits/sec 0.095 ms 0/1938 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 149 MBytes 125 Mbits/sec 0.085 ms 0/19082 (0%) [ 4] Sent 19082 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 500M Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 48172 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-1.00 sec 58.5 MBytes 491 Mbits/sec 7494 [ 4] 1.00-2.00 sec 60.6 MBytes 508 Mbits/sec 7756 [ 4] 2.00-3.00 sec 58.7 MBytes 492 Mbits/sec 7508 [ 4] 3.00-4.00 sec 60.2 MBytes 505 Mbits/sec 7710 [ 4] 4.00-5.00 sec 59.0 MBytes 495 Mbits/sec 7556 [ 4] 5.00-6.00 sec 60.5 MBytes 508 Mbits/sec 7744 [ 4] 6.00-7.00 sec 58.7 MBytes 492 Mbits/sec 7508 [ 4] 7.00-8.00 sec 59.1 MBytes 496 Mbits/sec 7565 [ 4] 8.00-9.00 sec 60.4 MBytes 507 Mbits/sec 7730 [ 4] 9.00-10.00 sec 59.9 MBytes 502 Mbits/sec 7664 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 596 MBytes 500 Mbits/sec 2051749.337 ms 64268/64294 (1e+02%) [ 4] Sent 64294 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 500M -R Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 35361 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-1.00 sec 14.3 MBytes 120 Mbits/sec 0.097 ms 0/1830 (0%) [ 4] 1.00-2.00 sec 14.3 MBytes 120 Mbits/sec 0.101 ms 0/1830 (0%) [ 4] 2.00-3.00 sec 14.3 MBytes 120 Mbits/sec 0.072 ms 0/1827 (0%) [ 4] 3.00-4.00 sec 14.2 MBytes 119 Mbits/sec 0.081 ms 0/1819 (0%) [ 4] 4.00-5.00 sec 14.3 MBytes 120 Mbits/sec 0.070 ms 0/1834 (0%) [ 4] 5.00-6.00 sec 14.3 MBytes 120 Mbits/sec 0.085 ms 0/1833 (0%) [ 4] 6.00-7.00 sec 14.3 MBytes 120 Mbits/sec 0.082 ms 0/1835 (0%) [ 4] 7.00-8.00 sec 14.3 MBytes 120 Mbits/sec 0.109 ms 0/1836 (0%) [ 4] 8.00-9.00 sec 14.2 MBytes 119 Mbits/sec 0.080 ms 0/1822 (0%) [ 4] 9.00-10.00 sec 14.3 MBytes 120 Mbits/sec 0.090 ms 0/1825 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 143 MBytes 120 Mbits/sec 0.104 ms 0/18298 (0%) [ 4] Sent 18298 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 1000M Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 53231 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-1.00 sec 107 MBytes 902 Mbits/sec 13759 [ 4] 1.00-2.00 sec 107 MBytes 896 Mbits/sec 13675 [ 4] 2.00-3.00 sec 107 MBytes 901 Mbits/sec 13753 [ 4] 3.00-4.00 sec 107 MBytes 898 Mbits/sec 13700 [ 4] 4.00-5.00 sec 107 MBytes 902 Mbits/sec 13759 [ 4] 5.00-6.00 sec 108 MBytes 902 Mbits/sec 13762 [ 4] 6.00-7.00 sec 107 MBytes 899 Mbits/sec 13719 [ 4] 7.00-8.00 sec 108 MBytes 902 Mbits/sec 13760 [ 4] 8.00-9.00 sec 107 MBytes 901 Mbits/sec 13753 [ 4] 9.00-10.00 sec 107 MBytes 902 Mbits/sec 13756 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 1.05 GBytes 900 Mbits/sec 5762140.265 ms 210/220 (95%) [ 4] Sent 220 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -u -b 1000M -R Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 34296 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-1.00 sec 14.3 MBytes 120 Mbits/sec 0.084 ms 0/1835 (0%) [ 4] 1.00-2.00 sec 14.3 MBytes 120 Mbits/sec 0.075 ms 0/1835 (0%) [ 4] 2.00-3.00 sec 14.5 MBytes 122 Mbits/sec 0.062 ms 0/1858 (0%) [ 4] 3.00-4.00 sec 15.1 MBytes 127 Mbits/sec 0.060 ms 0/1935 (0%) [ 4] 4.00-5.00 sec 15.3 MBytes 128 Mbits/sec 0.076 ms 0/1958 (0%) [ 4] 5.00-6.00 sec 14.5 MBytes 122 Mbits/sec 0.078 ms 0/1861 (0%) [ 4] 6.00-7.00 sec 14.4 MBytes 120 Mbits/sec 0.100 ms 0/1837 (0%) [ 4] 7.00-8.00 sec 14.3 MBytes 120 Mbits/sec 0.098 ms 0/1835 (0%) [ 4] 8.00-9.00 sec 14.2 MBytes 119 Mbits/sec 0.085 ms 0/1821 (0%) [ 4] 9.00-10.00 sec 14.3 MBytes 120 Mbits/sec 0.110 ms 0/1825 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 145 MBytes 122 Mbits/sec 0.101 ms 0/18606 (0%) [ 4] Sent 18606 datagrams iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -P3 Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 52130 connected to 10.0.0.80 port 5201 [ 6] local 10.0.0.1 port 52132 connected to 10.0.0.80 port 5201 [ 9] local 10.0.0.1 port 52134 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 7.47 MBytes 62.6 Mbits/sec 73 17.0 KBytes [ 6] 0.00-1.00 sec 7.21 MBytes 60.5 Mbits/sec 78 19.8 KBytes [ 9] 0.00-1.00 sec 7.14 MBytes 59.9 Mbits/sec 76 31.1 KBytes [SUM] 0.00-1.00 sec 21.8 MBytes 183 Mbits/sec 227 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 1.00-2.00 sec 7.95 MBytes 66.7 Mbits/sec 61 12.7 KBytes [ 6] 1.00-2.00 sec 5.84 MBytes 49.0 Mbits/sec 99 35.4 KBytes [ 9] 1.00-2.00 sec 7.08 MBytes 59.4 Mbits/sec 78 32.5 KBytes [SUM] 1.00-2.00 sec 20.9 MBytes 175 Mbits/sec 238 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 2.00-3.00 sec 6.09 MBytes 51.1 Mbits/sec 73 31.1 KBytes [ 6] 2.00-3.00 sec 8.95 MBytes 75.1 Mbits/sec 64 22.6 KBytes [ 9] 2.00-3.00 sec 6.09 MBytes 51.1 Mbits/sec 81 18.4 KBytes [SUM] 2.00-3.00 sec 21.1 MBytes 177 Mbits/sec 218 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 3.00-4.00 sec 6.71 MBytes 56.3 Mbits/sec 80 11.3 KBytes [ 6] 3.00-4.00 sec 8.26 MBytes 69.3 Mbits/sec 76 17.0 KBytes [ 9] 3.00-4.00 sec 6.28 MBytes 52.7 Mbits/sec 77 42.4 KBytes [SUM] 3.00-4.00 sec 21.3 MBytes 178 Mbits/sec 233 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 4.00-5.00 sec 6.59 MBytes 55.3 Mbits/sec 94 12.7 KBytes [ 6] 4.00-5.00 sec 7.58 MBytes 63.6 Mbits/sec 63 28.3 KBytes [ 9] 4.00-5.00 sec 6.84 MBytes 57.3 Mbits/sec 62 11.3 KBytes [SUM] 4.00-5.00 sec 21.0 MBytes 176 Mbits/sec 219 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 5.00-6.00 sec 8.76 MBytes 73.5 Mbits/sec 57 22.6 KBytes [ 6] 5.00-6.00 sec 6.28 MBytes 52.6 Mbits/sec 80 38.2 KBytes [ 9] 5.00-6.00 sec 6.28 MBytes 52.6 Mbits/sec 90 7.07 KBytes [SUM] 5.00-6.00 sec 21.3 MBytes 179 Mbits/sec 227 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 6.00-7.00 sec 7.33 MBytes 61.5 Mbits/sec 72 18.4 KBytes [ 6] 6.00-7.00 sec 7.02 MBytes 58.9 Mbits/sec 66 35.4 KBytes [ 9] 6.00-7.00 sec 6.77 MBytes 56.8 Mbits/sec 67 17.0 KBytes [SUM] 6.00-7.00 sec 21.1 MBytes 177 Mbits/sec 205 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 7.00-8.00 sec 8.45 MBytes 70.9 Mbits/sec 72 25.5 KBytes [ 6] 7.00-8.00 sec 6.71 MBytes 56.3 Mbits/sec 82 35.4 KBytes [ 9] 7.00-8.00 sec 5.90 MBytes 49.5 Mbits/sec 74 17.0 KBytes [SUM] 7.00-8.00 sec 21.1 MBytes 177 Mbits/sec 228 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 8.00-9.00 sec 6.46 MBytes 54.2 Mbits/sec 77 36.8 KBytes [ 6] 8.00-9.00 sec 6.90 MBytes 57.9 Mbits/sec 78 11.3 KBytes [ 9] 8.00-9.00 sec 7.89 MBytes 66.2 Mbits/sec 68 11.3 KBytes [SUM] 8.00-9.00 sec 21.3 MBytes 178 Mbits/sec 223 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 9.00-10.00 sec 6.59 MBytes 55.3 Mbits/sec 79 38.2 KBytes [ 6] 9.00-10.00 sec 8.76 MBytes 73.5 Mbits/sec 58 24.0 KBytes [ 9] 9.00-10.00 sec 5.72 MBytes 48.0 Mbits/sec 77 7.07 KBytes [SUM] 9.00-10.00 sec 21.1 MBytes 177 Mbits/sec 214 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 72.4 MBytes 60.7 Mbits/sec 738 sender [ 4] 0.00-10.00 sec 72.0 MBytes 60.4 Mbits/sec receiver [ 6] 0.00-10.00 sec 73.5 MBytes 61.7 Mbits/sec 744 sender [ 6] 0.00-10.00 sec 73.2 MBytes 61.4 Mbits/sec receiver [ 9] 0.00-10.00 sec 66.0 MBytes 55.4 Mbits/sec 750 sender [ 9] 0.00-10.00 sec 65.6 MBytes 55.1 Mbits/sec receiver [SUM] 0.00-10.00 sec 212 MBytes 178 Mbits/sec 2232 sender [SUM] 0.00-10.00 sec 211 MBytes 177 Mbits/sec receiver iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -P3 -R Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 52178 connected to 10.0.0.80 port 5201 [ 6] local 10.0.0.1 port 52180 connected to 10.0.0.80 port 5201 [ 9] local 10.0.0.1 port 52182 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-1.00 sec 4.03 MBytes 33.8 Mbits/sec [ 6] 0.00-1.00 sec 2.81 MBytes 23.6 Mbits/sec [ 9] 0.00-1.00 sec 2.79 MBytes 23.4 Mbits/sec [SUM] 0.00-1.00 sec 9.63 MBytes 80.8 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 1.00-2.00 sec 3.25 MBytes 27.3 Mbits/sec [ 6] 1.00-2.00 sec 3.25 MBytes 27.3 Mbits/sec [ 9] 1.00-2.00 sec 3.22 MBytes 27.0 Mbits/sec [SUM] 1.00-2.00 sec 9.72 MBytes 81.5 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 2.00-3.00 sec 3.25 MBytes 27.3 Mbits/sec [ 6] 2.00-3.00 sec 3.25 MBytes 27.3 Mbits/sec [ 9] 2.00-3.00 sec 3.30 MBytes 27.6 Mbits/sec [SUM] 2.00-3.00 sec 9.80 MBytes 82.2 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 3.00-4.00 sec 3.25 MBytes 27.3 Mbits/sec [ 6] 3.00-4.00 sec 3.12 MBytes 26.2 Mbits/sec [ 9] 3.00-4.00 sec 3.19 MBytes 26.8 Mbits/sec [SUM] 3.00-4.00 sec 9.57 MBytes 80.2 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 4.00-5.00 sec 2.22 MBytes 18.6 Mbits/sec [ 6] 4.00-5.00 sec 2.38 MBytes 19.9 Mbits/sec [ 9] 4.00-5.00 sec 2.28 MBytes 19.2 Mbits/sec [SUM] 4.00-5.00 sec 6.88 MBytes 57.7 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 5.00-6.00 sec 3.30 MBytes 27.7 Mbits/sec [ 6] 5.00-6.00 sec 3.37 MBytes 28.3 Mbits/sec [ 9] 5.00-6.00 sec 3.18 MBytes 26.7 Mbits/sec [SUM] 5.00-6.00 sec 9.85 MBytes 82.6 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 6.00-7.00 sec 2.99 MBytes 25.1 Mbits/sec [ 6] 6.00-7.00 sec 2.88 MBytes 24.1 Mbits/sec [ 9] 6.00-7.00 sec 3.00 MBytes 25.2 Mbits/sec [SUM] 6.00-7.00 sec 8.87 MBytes 74.4 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 7.00-8.00 sec 3.14 MBytes 26.3 Mbits/sec [ 6] 7.00-8.00 sec 3.25 MBytes 27.3 Mbits/sec [ 9] 7.00-8.00 sec 3.25 MBytes 27.3 Mbits/sec [SUM] 7.00-8.00 sec 9.64 MBytes 80.9 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 8.00-9.00 sec 3.25 MBytes 27.2 Mbits/sec [ 6] 8.00-9.00 sec 3.25 MBytes 27.3 Mbits/sec [ 9] 8.00-9.00 sec 3.16 MBytes 26.5 Mbits/sec [SUM] 8.00-9.00 sec 9.65 MBytes 81.0 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 9.00-10.00 sec 3.25 MBytes 27.3 Mbits/sec [ 6] 9.00-10.00 sec 3.21 MBytes 26.9 Mbits/sec [ 9] 9.00-10.00 sec 3.22 MBytes 27.0 Mbits/sec [SUM] 9.00-10.00 sec 9.68 MBytes 81.2 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 32.2 MBytes 27.0 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 32.2 MBytes 27.0 Mbits/sec receiver [ 6] 0.00-10.00 sec 31.1 MBytes 26.1 Mbits/sec 0 sender [ 6] 0.00-10.00 sec 31.1 MBytes 26.1 Mbits/sec receiver [ 9] 0.00-10.00 sec 30.9 MBytes 25.9 Mbits/sec 0 sender [ 9] 0.00-10.00 sec 30.9 MBytes 25.9 Mbits/sec receiver [SUM] 0.00-10.00 sec 94.2 MBytes 79.0 Mbits/sec 0 sender [SUM] 0.00-10.00 sec 94.2 MBytes 79.0 Mbits/sec receiver iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -P3 -u -b 800M Connecting to host 10.0.0.80, port 5201 [ 4] local 10.0.0.1 port 36791 connected to 10.0.0.80 port 5201 [ 6] local 10.0.0.1 port 51969 connected to 10.0.0.80 port 5201 [ 9] local 10.0.0.1 port 39473 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-1.00 sec 38.1 MBytes 319 Mbits/sec 4871 [ 6] 0.00-1.00 sec 38.1 MBytes 319 Mbits/sec 4871 [ 9] 0.00-1.00 sec 38.1 MBytes 319 Mbits/sec 4871 [SUM] 0.00-1.00 sec 114 MBytes 958 Mbits/sec 14613 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 1.00-2.00 sec 38.1 MBytes 319 Mbits/sec 4873 [ 6] 1.00-2.00 sec 38.1 MBytes 319 Mbits/sec 4873 [ 9] 1.00-2.00 sec 38.1 MBytes 319 Mbits/sec 4873 [SUM] 1.00-2.00 sec 114 MBytes 958 Mbits/sec 14619 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 2.00-3.00 sec 38.1 MBytes 319 Mbits/sec 4875 [ 6] 2.00-3.00 sec 38.1 MBytes 319 Mbits/sec 4875 [ 9] 2.00-3.00 sec 38.1 MBytes 319 Mbits/sec 4875 [SUM] 2.00-3.00 sec 114 MBytes 958 Mbits/sec 14625 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 3.00-4.00 sec 38.1 MBytes 319 Mbits/sec 4874 [ 6] 3.00-4.00 sec 38.1 MBytes 319 Mbits/sec 4874 [ 9] 3.00-4.00 sec 38.1 MBytes 319 Mbits/sec 4874 [SUM] 3.00-4.00 sec 114 MBytes 958 Mbits/sec 14622 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 4.00-5.00 sec 38.0 MBytes 319 Mbits/sec 4864 [ 6] 4.00-5.00 sec 38.0 MBytes 319 Mbits/sec 4864 [ 9] 4.00-5.00 sec 38.0 MBytes 319 Mbits/sec 4864 [SUM] 4.00-5.00 sec 114 MBytes 956 Mbits/sec 14592 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 5.00-6.00 sec 38.1 MBytes 319 Mbits/sec 4875 [ 6] 5.00-6.00 sec 38.1 MBytes 319 Mbits/sec 4875 [ 9] 5.00-6.00 sec 38.1 MBytes 319 Mbits/sec 4875 [SUM] 5.00-6.00 sec 114 MBytes 958 Mbits/sec 14625 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 6.00-7.00 sec 38.1 MBytes 319 Mbits/sec 4873 [ 6] 6.00-7.00 sec 38.1 MBytes 319 Mbits/sec 4873 [ 9] 6.00-7.00 sec 38.1 MBytes 319 Mbits/sec 4873 [SUM] 6.00-7.00 sec 114 MBytes 958 Mbits/sec 14619 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 7.00-8.00 sec 38.1 MBytes 319 Mbits/sec 4876 [ 6] 7.00-8.00 sec 38.1 MBytes 319 Mbits/sec 4876 [ 9] 7.00-8.00 sec 38.1 MBytes 319 Mbits/sec 4876 [SUM] 7.00-8.00 sec 114 MBytes 958 Mbits/sec 14628 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 8.00-9.00 sec 38.1 MBytes 319 Mbits/sec 4874 [ 6] 8.00-9.00 sec 38.1 MBytes 319 Mbits/sec 4874 [ 9] 8.00-9.00 sec 38.1 MBytes 319 Mbits/sec 4874 [SUM] 8.00-9.00 sec 114 MBytes 958 Mbits/sec 14622 - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 9.00-10.00 sec 37.9 MBytes 318 Mbits/sec 4856 [ 6] 9.00-10.00 sec 37.9 MBytes 318 Mbits/sec 4856 [ 9] 9.00-10.00 sec 37.9 MBytes 318 Mbits/sec 4856 [SUM] 9.00-10.00 sec 114 MBytes 955 Mbits/sec 14568 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 381 MBytes 319 Mbits/sec 9052841.391 ms 0/3 (0%) [ 4] Sent 3 datagrams [ 6] 0.00-10.00 sec 381 MBytes 319 Mbits/sec 9052841.281 ms 0/3 (0%) [ 6] Sent 3 datagrams [ 9] 0.00-10.00 sec 381 MBytes 319 Mbits/sec 9052841.181 ms 0/3 (0%) [ 9] Sent 3 datagrams [SUM] 0.00-10.00 sec 1.11 GBytes 958 Mbits/sec 9052841.285 ms 0/9 (0%) iperf Done. + sleep 10 + iperf3 -c 10.0.0.80 -P3 -R -u -b 800M Connecting to host 10.0.0.80, port 5201 Reverse mode, remote host 10.0.0.80 is sending [ 4] local 10.0.0.1 port 43263 connected to 10.0.0.80 port 5201 [ 6] local 10.0.0.1 port 49331 connected to 10.0.0.80 port 5201 [ 9] local 10.0.0.1 port 60542 connected to 10.0.0.80 port 5201 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-1.00 sec 4.92 MBytes 41.3 Mbits/sec 0.156 ms 0/630 (0%) [ 6] 0.00-1.00 sec 4.92 MBytes 41.3 Mbits/sec 0.170 ms 0/630 (0%) [ 9] 0.00-1.00 sec 4.91 MBytes 41.2 Mbits/sec 0.237 ms 0/629 (0%) [SUM] 0.00-1.00 sec 14.8 MBytes 124 Mbits/sec 0.188 ms 0/1889 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 1.00-2.00 sec 4.92 MBytes 41.3 Mbits/sec 0.173 ms 0/630 (0%) [ 6] 1.00-2.00 sec 4.91 MBytes 41.2 Mbits/sec 0.191 ms 0/629 (0%) [ 9] 1.00-2.00 sec 4.91 MBytes 41.2 Mbits/sec 0.192 ms 0/629 (0%) [SUM] 1.00-2.00 sec 14.8 MBytes 124 Mbits/sec 0.185 ms 0/1888 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 2.00-3.00 sec 4.96 MBytes 41.6 Mbits/sec 0.246 ms 0/635 (0%) [ 6] 2.00-3.00 sec 4.97 MBytes 41.7 Mbits/sec 0.167 ms 0/636 (0%) [ 9] 2.00-3.00 sec 4.95 MBytes 41.5 Mbits/sec 0.232 ms 0/634 (0%) [SUM] 2.00-3.00 sec 14.9 MBytes 125 Mbits/sec 0.215 ms 0/1905 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 3.00-4.00 sec 4.97 MBytes 41.7 Mbits/sec 0.189 ms 0/636 (0%) [ 6] 3.00-4.00 sec 4.96 MBytes 41.6 Mbits/sec 0.121 ms 0/635 (0%) [ 9] 3.00-4.00 sec 4.97 MBytes 41.7 Mbits/sec 0.195 ms 0/636 (0%) [SUM] 3.00-4.00 sec 14.9 MBytes 125 Mbits/sec 0.168 ms 0/1907 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 4.00-5.00 sec 4.97 MBytes 41.7 Mbits/sec 0.180 ms 0/636 (0%) [ 6] 4.00-5.00 sec 4.97 MBytes 41.7 Mbits/sec 0.185 ms 0/636 (0%) [ 9] 4.00-5.00 sec 4.96 MBytes 41.6 Mbits/sec 0.132 ms 0/635 (0%) [SUM] 4.00-5.00 sec 14.9 MBytes 125 Mbits/sec 0.166 ms 0/1907 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 5.00-6.00 sec 4.97 MBytes 41.7 Mbits/sec 0.178 ms 0/636 (0%) [ 6] 5.00-6.00 sec 4.97 MBytes 41.7 Mbits/sec 0.209 ms 0/636 (0%) [ 9] 5.00-6.00 sec 4.97 MBytes 41.7 Mbits/sec 0.167 ms 0/636 (0%) [SUM] 5.00-6.00 sec 14.9 MBytes 125 Mbits/sec 0.185 ms 0/1908 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 6.00-7.00 sec 4.91 MBytes 41.2 Mbits/sec 0.141 ms 0/628 (0%) [ 6] 6.00-7.00 sec 4.91 MBytes 41.2 Mbits/sec 0.211 ms 0/628 (0%) [ 9] 6.00-7.00 sec 4.91 MBytes 41.2 Mbits/sec 0.152 ms 0/629 (0%) [SUM] 6.00-7.00 sec 14.7 MBytes 124 Mbits/sec 0.168 ms 0/1885 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 7.00-8.00 sec 4.92 MBytes 41.3 Mbits/sec 0.290 ms 0/630 (0%) [ 6] 7.00-8.00 sec 4.91 MBytes 41.2 Mbits/sec 0.167 ms 0/629 (0%) [ 9] 7.00-8.00 sec 4.91 MBytes 41.2 Mbits/sec 0.367 ms 0/629 (0%) [SUM] 7.00-8.00 sec 14.8 MBytes 124 Mbits/sec 0.275 ms 0/1888 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 8.00-9.00 sec 4.93 MBytes 41.4 Mbits/sec 0.147 ms 0/631 (0%) [ 6] 8.00-9.00 sec 4.91 MBytes 41.2 Mbits/sec 0.170 ms 0/628 (0%) [ 9] 8.00-9.00 sec 4.91 MBytes 41.2 Mbits/sec 0.137 ms 0/628 (0%) [SUM] 8.00-9.00 sec 14.7 MBytes 124 Mbits/sec 0.151 ms 0/1887 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ 4] 9.00-10.00 sec 4.97 MBytes 41.7 Mbits/sec 0.215 ms 0/636 (0%) [ 6] 9.00-10.00 sec 4.98 MBytes 41.7 Mbits/sec 0.150 ms 0/637 (0%) [ 9] 9.00-10.00 sec 4.96 MBytes 41.6 Mbits/sec 0.272 ms 0/635 (0%) [SUM] 9.00-10.00 sec 14.9 MBytes 125 Mbits/sec 0.212 ms 0/1908 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 49.5 MBytes 41.5 Mbits/sec 0.227 ms 0/6335 (0%) [ 4] Sent 6335 datagrams [ 6] 0.00-10.00 sec 49.5 MBytes 41.5 Mbits/sec 0.183 ms 0/6331 (0%) [ 6] Sent 6331 datagrams [ 9] 0.00-10.00 sec 49.4 MBytes 41.5 Mbits/sec 0.261 ms 0/6327 (0%) [ 9] Sent 6327 datagrams [SUM] 0.00-10.00 sec 148 MBytes 124 Mbits/sec 0.224 ms 0/18993 (0%) iperf Done.
run.sh
Description: application/shellscript
diff -aurN a/arch/mips/include/asm/mach-lantiq/xway/xway_dma.h b/arch/mips/include/asm/mach-lantiq/xway/xway_dma.h --- a/arch/mips/include/asm/mach-lantiq/xway/xway_dma.h 2019-01-26 09:37:07.000000000 +0100 +++ b/arch/mips/include/asm/mach-lantiq/xway/xway_dma.h 2019-02-13 23:17:07.560073774 +0100 @@ -19,7 +19,7 @@ #define LTQ_DMA_H__ #define LTQ_DESC_SIZE 0x08 /* each descriptor is 64bit */ -#define LTQ_DESC_NUM 0x40 /* 64 descriptors / channel */ +#define LTQ_DESC_NUM 0x80 /* 128 descriptors / channel */ #define LTQ_DMA_OWN BIT(31) /* owner bit */ #define LTQ_DMA_C BIT(30) /* complete bit */
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel