You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ma...@apache.org on 2020/12/18 05:16:23 UTC

[incubator-nuttx] 03/04: arch/netdev: try tcp timer in every txavail call

This is an automated email from the ASF dual-hosted git repository.

masayuki pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 4a559807a5df03208420a6b52d89a852060cf90a
Author: chao.an <an...@xiaomi.com>
AuthorDate: Tue Dec 15 20:47:23 2020 +0800

    arch/netdev: try tcp timer in every txavail call
    
    In the current implementation, the first transmission of the new
    connection handshake is depends entirely by tcp_timer(), which will
    caused 0.5s - 1s delay each time in connect().
    
    This patch is mainly to improve the performance of TCP handshake.
    
    Original:
    
    nsh> tcp_client
    [    1.536100] TCP connect start.
    [    2.000200] TCP connect end. DIFF: tick: 4641, 464ms.
    [    3.000300] TCP connect start.
    [    4.000400] TCP connect end. DIFF: tick: 10001, 1000ms.
    [    5.000500] TCP connect start.
    [    6.000600] TCP connect end. DIFF: tick: 10001, 1000ms.
    [    7.000700] TCP connect start.
    [    8.000800] TCP connect end. DIFF: tick: 10001, 1000ms.
    
    Optimized:
    
    nsh> tcp_client
    [    3.263600] TCP connect start.
    [    3.263700] TCP connect end. DIFF: tick: 1, 0ms.
    [    4.263800] TCP connect start.
    [    4.263800] TCP connect end. DIFF: tick: 0, 0ms.
    [    5.263900] TCP connect start.
    [    5.263900] TCP connect end. DIFF: tick: 0, 0ms.
    [    6.264000] TCP connect start.
    [    6.264000] TCP connect end. DIFF: tick: 0, 0ms.
    [    7.264100] TCP connect start.
    [    7.264100] TCP connect end. DIFF: tick: 0, 0ms.
    
    Signed-off-by: chao.an <an...@xiaomi.com>
---
 arch/arm/src/c5471/c5471_ethernet.c           | 2 +-
 arch/arm/src/imxrt/imxrt_enet.c               | 2 +-
 arch/arm/src/imxrt/imxrt_flexcan.c            | 2 +-
 arch/arm/src/kinetis/kinetis_enet.c           | 2 +-
 arch/arm/src/kinetis/kinetis_flexcan.c        | 2 +-
 arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c | 2 +-
 arch/arm/src/lpc43xx/lpc43_ethernet.c         | 2 +-
 arch/arm/src/lpc54xx/lpc54_ethernet.c         | 2 +-
 arch/arm/src/s32k1xx/s32k1xx_enet.c           | 2 +-
 arch/arm/src/s32k1xx/s32k1xx_flexcan.c        | 2 +-
 arch/arm/src/sam34/sam_emac.c                 | 2 +-
 arch/arm/src/sama5/sam_emaca.c                | 2 +-
 arch/arm/src/sama5/sam_emacb.c                | 2 +-
 arch/arm/src/sama5/sam_gmac.c                 | 2 +-
 arch/arm/src/samd5e5/sam_gmac.c               | 2 +-
 arch/arm/src/samv7/sam_emac.c                 | 2 +-
 arch/arm/src/stm32/stm32_eth.c                | 2 +-
 arch/arm/src/stm32f7/stm32_ethernet.c         | 2 +-
 arch/arm/src/stm32h7/stm32_ethernet.c         | 2 +-
 arch/arm/src/tiva/lm/lm3s_ethernet.c          | 2 +-
 arch/arm/src/tiva/tm4c/tm4c_ethernet.c        | 2 +-
 arch/hc/src/m9s12/m9s12_ethernet.c            | 2 +-
 arch/mips/src/pic32mx/pic32mx_ethernet.c      | 2 +-
 arch/mips/src/pic32mz/pic32mz_ethernet.c      | 2 +-
 arch/misoc/src/common/misoc_net.c             | 2 +-
 arch/renesas/src/rx65n/rx65n_eth.c            | 2 +-
 arch/sim/src/sim/up_netdriver.c               | 2 +-
 arch/xtensa/src/esp32/esp32_emac.c            | 2 +-
 arch/xtensa/src/esp32/esp32_wlan.c            | 2 +-
 arch/z80/src/ez80/ez80_emac.c                 | 2 +-
 30 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/arch/arm/src/c5471/c5471_ethernet.c b/arch/arm/src/c5471/c5471_ethernet.c
index 2c1f073..457fdba 100644
--- a/arch/arm/src/c5471/c5471_ethernet.c
+++ b/arch/arm/src/c5471/c5471_ethernet.c
@@ -2017,7 +2017,7 @@ static void c5471_txavail_work(FAR void *arg)
         {
           /* If so, then poll the network for new XMIT data */
 
-          devif_poll(&priv->c_dev, c5471_txpoll);
+          devif_timer(&priv->c_dev, 0, c5471_txpoll);
         }
     }
 
diff --git a/arch/arm/src/imxrt/imxrt_enet.c b/arch/arm/src/imxrt/imxrt_enet.c
index 573731d..1e8bf58 100644
--- a/arch/arm/src/imxrt/imxrt_enet.c
+++ b/arch/arm/src/imxrt/imxrt_enet.c
@@ -1522,7 +1522,7 @@ static void imxrt_txavail_work(FAR void *arg)
            * new XMIT data.
            */
 
-          devif_poll(&priv->dev, imxrt_txpoll);
+          devif_timer(&priv->dev, 0, imxrt_txpoll);
         }
     }
 
diff --git a/arch/arm/src/imxrt/imxrt_flexcan.c b/arch/arm/src/imxrt/imxrt_flexcan.c
index 6d3c069..f1746dc 100644
--- a/arch/arm/src/imxrt/imxrt_flexcan.c
+++ b/arch/arm/src/imxrt/imxrt_flexcan.c
@@ -1299,7 +1299,7 @@ static void imxrt_txavail_work(FAR void *arg)
            * new XMIT data.
            */
 
-          devif_poll(&priv->dev, imxrt_txpoll);
+          devif_timer(&priv->dev, 0, imxrt_txpoll);
         }
     }
 
diff --git a/arch/arm/src/kinetis/kinetis_enet.c b/arch/arm/src/kinetis/kinetis_enet.c
index 322a05e..7c9941c 100644
--- a/arch/arm/src/kinetis/kinetis_enet.c
+++ b/arch/arm/src/kinetis/kinetis_enet.c
@@ -1367,7 +1367,7 @@ static void kinetis_txavail_work(FAR void *arg)
            * new XMIT data.
            */
 
-          devif_poll(&priv->dev, kinetis_txpoll);
+          devif_timer(&priv->dev, 0, kinetis_txpoll);
         }
     }
 
diff --git a/arch/arm/src/kinetis/kinetis_flexcan.c b/arch/arm/src/kinetis/kinetis_flexcan.c
index c201dc4..53a0a7d 100644
--- a/arch/arm/src/kinetis/kinetis_flexcan.c
+++ b/arch/arm/src/kinetis/kinetis_flexcan.c
@@ -1337,7 +1337,7 @@ static void kinetis_txavail_work(FAR void *arg)
            * new XMIT data.
            */
 
-          devif_poll(&priv->dev, kinetis_txpoll);
+          devif_timer(&priv->dev, 0, kinetis_txpoll);
         }
     }
 
diff --git a/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c b/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c
index d949dc1..1960c18 100644
--- a/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c
+++ b/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c
@@ -1853,7 +1853,7 @@ static void lpc17_40_txavail_work(FAR void *arg)
         {
           /* If so, then poll the network layer for new XMIT data */
 
-          devif_poll(&priv->lp_dev, lpc17_40_txpoll);
+          devif_timer(&priv->lp_dev, 0, lpc17_40_txpoll);
         }
     }
 
diff --git a/arch/arm/src/lpc43xx/lpc43_ethernet.c b/arch/arm/src/lpc43xx/lpc43_ethernet.c
index 68114bc..dfdd05f 100644
--- a/arch/arm/src/lpc43xx/lpc43_ethernet.c
+++ b/arch/arm/src/lpc43xx/lpc43_ethernet.c
@@ -1285,7 +1285,7 @@ static void lpc43_dopoll(FAR struct lpc43_ethmac_s *priv)
 
       if (dev->d_buf)
         {
-          devif_poll(dev, lpc43_txpoll);
+          devif_timer(dev, 0, lpc43_txpoll);
 
           /* We will, most likely end up with a buffer to be freed.  But it
            * might not be the same one that we allocated above.
diff --git a/arch/arm/src/lpc54xx/lpc54_ethernet.c b/arch/arm/src/lpc54xx/lpc54_ethernet.c
index 3565a48..d91639b 100644
--- a/arch/arm/src/lpc54xx/lpc54_ethernet.c
+++ b/arch/arm/src/lpc54xx/lpc54_ethernet.c
@@ -1807,7 +1807,7 @@ static void lpc54_eth_dopoll(struct lpc54_ethdriver_s *priv)
       priv->eth_dev.d_buf = (uint8_t *)lpc54_pktbuf_alloc(priv);
       if (priv->eth_dev.d_buf != NULL)
         {
-          devif_poll(&priv->eth_dev, lpc54_eth_txpoll);
+          devif_timer(&priv->eth_dev, 0, lpc54_eth_txpoll);
 
           /* Make sure that the Tx buffer remaining after the poll is
            * freed.
diff --git a/arch/arm/src/s32k1xx/s32k1xx_enet.c b/arch/arm/src/s32k1xx/s32k1xx_enet.c
index d4f8f27..4319e41 100644
--- a/arch/arm/src/s32k1xx/s32k1xx_enet.c
+++ b/arch/arm/src/s32k1xx/s32k1xx_enet.c
@@ -1521,7 +1521,7 @@ static void s32k1xx_txavail_work(FAR void *arg)
            * new XMIT data.
            */
 
-          devif_poll(&priv->dev, s32k1xx_txpoll);
+          devif_timer(&priv->dev, 0, s32k1xx_txpoll);
         }
     }
 
diff --git a/arch/arm/src/s32k1xx/s32k1xx_flexcan.c b/arch/arm/src/s32k1xx/s32k1xx_flexcan.c
index c7f6aef..b2030c9 100644
--- a/arch/arm/src/s32k1xx/s32k1xx_flexcan.c
+++ b/arch/arm/src/s32k1xx/s32k1xx_flexcan.c
@@ -1340,7 +1340,7 @@ static void s32k1xx_txavail_work(FAR void *arg)
            * new XMIT data.
            */
 
-          devif_poll(&priv->dev, s32k1xx_txpoll);
+          devif_timer(&priv->dev, 0, s32k1xx_txpoll);
         }
     }
 
diff --git a/arch/arm/src/sam34/sam_emac.c b/arch/arm/src/sam34/sam_emac.c
index 1745949..7e51277 100644
--- a/arch/arm/src/sam34/sam_emac.c
+++ b/arch/arm/src/sam34/sam_emac.c
@@ -962,7 +962,7 @@ static void sam_dopoll(struct sam_emac_s *priv)
        * then poll the network for new XMIT data.
        */
 
-      devif_poll(dev, sam_txpoll);
+      devif_timer(dev, 0, sam_txpoll);
     }
 }
 
diff --git a/arch/arm/src/sama5/sam_emaca.c b/arch/arm/src/sama5/sam_emaca.c
index e2dfd90..a059d5c 100644
--- a/arch/arm/src/sama5/sam_emaca.c
+++ b/arch/arm/src/sama5/sam_emaca.c
@@ -970,7 +970,7 @@ static void sam_dopoll(struct sam_emac_s *priv)
        * then poll the network for new XMIT data.
        */
 
-      devif_poll(dev, sam_txpoll);
+      devif_timer(dev, 0, sam_txpoll);
     }
 }
 
diff --git a/arch/arm/src/sama5/sam_emacb.c b/arch/arm/src/sama5/sam_emacb.c
index 9173372..9cc7e43 100644
--- a/arch/arm/src/sama5/sam_emacb.c
+++ b/arch/arm/src/sama5/sam_emacb.c
@@ -1311,7 +1311,7 @@ static void sam_dopoll(struct sam_emac_s *priv)
        * then poll the network for new XMIT data.
        */
 
-      devif_poll(dev, sam_txpoll);
+      devif_timer(dev, 0, sam_txpoll);
     }
 }
 
diff --git a/arch/arm/src/sama5/sam_gmac.c b/arch/arm/src/sama5/sam_gmac.c
index 6d519b7..77eba43 100644
--- a/arch/arm/src/sama5/sam_gmac.c
+++ b/arch/arm/src/sama5/sam_gmac.c
@@ -912,7 +912,7 @@ static void sam_dopoll(struct sam_gmac_s *priv)
        * then poll the network for new XMIT data.
        */
 
-      devif_poll(dev, sam_txpoll);
+      devif_timer(dev, 0, sam_txpoll);
     }
 }
 
diff --git a/arch/arm/src/samd5e5/sam_gmac.c b/arch/arm/src/samd5e5/sam_gmac.c
index 29dbd4d..1349dae 100644
--- a/arch/arm/src/samd5e5/sam_gmac.c
+++ b/arch/arm/src/samd5e5/sam_gmac.c
@@ -900,7 +900,7 @@ static void sam_dopoll(struct sam_gmac_s *priv)
        * then poll the network for new XMIT data.
        */
 
-      devif_poll(dev, sam_txpoll);
+      devif_timer(dev, 0, sam_txpoll);
     }
 }
 
diff --git a/arch/arm/src/samv7/sam_emac.c b/arch/arm/src/samv7/sam_emac.c
index 1e55610..dba2ca1 100644
--- a/arch/arm/src/samv7/sam_emac.c
+++ b/arch/arm/src/samv7/sam_emac.c
@@ -1618,7 +1618,7 @@ static void sam_dopoll(struct sam_emac_s *priv, int qid)
        * then poll the network for new XMIT data.
        */
 
-      devif_poll(dev, sam_txpoll);
+      devif_timer(dev, 0, sam_txpoll);
     }
 }
 
diff --git a/arch/arm/src/stm32/stm32_eth.c b/arch/arm/src/stm32/stm32_eth.c
index 3fcf4ca..d4c6b98 100644
--- a/arch/arm/src/stm32/stm32_eth.c
+++ b/arch/arm/src/stm32/stm32_eth.c
@@ -1396,7 +1396,7 @@ static void stm32_dopoll(FAR struct stm32_ethmac_s *priv)
 
       if (dev->d_buf)
         {
-          devif_poll(dev, stm32_txpoll);
+          devif_timer(dev, 0, stm32_txpoll);
 
           /* We will, most likely end up with a buffer to be freed.  But it
            * might not be the same one that we allocated above.
diff --git a/arch/arm/src/stm32f7/stm32_ethernet.c b/arch/arm/src/stm32f7/stm32_ethernet.c
index a7509fd..667138c 100644
--- a/arch/arm/src/stm32f7/stm32_ethernet.c
+++ b/arch/arm/src/stm32f7/stm32_ethernet.c
@@ -1435,7 +1435,7 @@ static void stm32_dopoll(struct stm32_ethmac_s *priv)
 
       if (dev->d_buf)
         {
-          devif_poll(dev, stm32_txpoll);
+          devif_timer(dev, 0, stm32_txpoll);
 
           /* We will, most likely end up with a buffer to be freed.  But it
            * might not be the same one that we allocated above.
diff --git a/arch/arm/src/stm32h7/stm32_ethernet.c b/arch/arm/src/stm32h7/stm32_ethernet.c
index cc2cd65..3e9dd90 100644
--- a/arch/arm/src/stm32h7/stm32_ethernet.c
+++ b/arch/arm/src/stm32h7/stm32_ethernet.c
@@ -1451,7 +1451,7 @@ static void stm32_dopoll(struct stm32_ethmac_s *priv)
 
       if (dev->d_buf)
         {
-          devif_poll(dev, stm32_txpoll);
+          devif_timer(dev, 0, stm32_txpoll);
 
           /* We will, most likely end up with a buffer to be freed.  But it
            * might not be the same one that we allocated above.
diff --git a/arch/arm/src/tiva/lm/lm3s_ethernet.c b/arch/arm/src/tiva/lm/lm3s_ethernet.c
index bcd04a5..dde9eaa 100644
--- a/arch/arm/src/tiva/lm/lm3s_ethernet.c
+++ b/arch/arm/src/tiva/lm/lm3s_ethernet.c
@@ -1561,7 +1561,7 @@ static void tiva_txavail_work(void *arg)
        * network for new Tx data
        */
 
-      devif_poll(&priv->ld_dev, tiva_txpoll);
+      devif_timer(&priv->ld_dev, 0, tiva_txpoll);
     }
 
   net_unlock();
diff --git a/arch/arm/src/tiva/tm4c/tm4c_ethernet.c b/arch/arm/src/tiva/tm4c/tm4c_ethernet.c
index 63ca62f..0e5e145 100644
--- a/arch/arm/src/tiva/tm4c/tm4c_ethernet.c
+++ b/arch/arm/src/tiva/tm4c/tm4c_ethernet.c
@@ -1386,7 +1386,7 @@ static void tiva_dopoll(FAR struct tiva_ethmac_s *priv)
 
       if (dev->d_buf)
         {
-          devif_poll(dev, tiva_txpoll);
+          devif_timer(dev, 0, tiva_txpoll);
 
           /* We will, most likely end up with a buffer to be freed.  But it
            * might not be the same one that we allocated above.
diff --git a/arch/hc/src/m9s12/m9s12_ethernet.c b/arch/hc/src/m9s12/m9s12_ethernet.c
index 59f9562..bb3a23b 100644
--- a/arch/hc/src/m9s12/m9s12_ethernet.c
+++ b/arch/hc/src/m9s12/m9s12_ethernet.c
@@ -664,7 +664,7 @@ static int emac_txavail(struct net_driver_s *dev)
 
       /* If so, then poll the network for new XMIT data */
 
-      devif_poll(&priv->d_dev, emac_txpoll);
+      devif_timer(&priv->d_dev, 0, emac_txpoll);
     }
 
   leave_critical_section(flags);
diff --git a/arch/mips/src/pic32mx/pic32mx_ethernet.c b/arch/mips/src/pic32mx/pic32mx_ethernet.c
index 2443e71..fb4bda5 100644
--- a/arch/mips/src/pic32mx/pic32mx_ethernet.c
+++ b/arch/mips/src/pic32mx/pic32mx_ethernet.c
@@ -1252,7 +1252,7 @@ static void pic32mx_poll(struct pic32mx_driver_s *priv)
           /* And perform the poll */
 
           priv->pd_polling = true;
-          devif_poll(&priv->pd_dev, pic32mx_txpoll);
+          devif_timer(&priv->pd_dev, 0, pic32mx_txpoll);
 
           /* Free any buffer left attached after the poll */
 
diff --git a/arch/mips/src/pic32mz/pic32mz_ethernet.c b/arch/mips/src/pic32mz/pic32mz_ethernet.c
index 9c610d8..ad83e22 100644
--- a/arch/mips/src/pic32mz/pic32mz_ethernet.c
+++ b/arch/mips/src/pic32mz/pic32mz_ethernet.c
@@ -1356,7 +1356,7 @@ static void pic32mz_poll(struct pic32mz_driver_s *priv)
           /* And perform the poll */
 
           priv->pd_polling = true;
-          devif_poll(&priv->pd_dev, pic32mz_txpoll);
+          devif_timer(&priv->pd_dev, 0, pic32mz_txpoll);
 
           /* Free any buffer left attached after the poll */
 
diff --git a/arch/misoc/src/common/misoc_net.c b/arch/misoc/src/common/misoc_net.c
index 15ce5ab..ac48b27 100644
--- a/arch/misoc/src/common/misoc_net.c
+++ b/arch/misoc/src/common/misoc_net.c
@@ -957,7 +957,7 @@ static void misoc_net_txavail_work(FAR void *arg)
         {
           /* If so, then poll the network for new XMIT data */
 
-          devif_poll(&priv->misoc_net_dev, misoc_net_txpoll);
+          devif_timer(&priv->misoc_net_dev, 0, misoc_net_txpoll);
         }
     }
 
diff --git a/arch/renesas/src/rx65n/rx65n_eth.c b/arch/renesas/src/rx65n/rx65n_eth.c
index 9d3ab50..b41d5ef 100644
--- a/arch/renesas/src/rx65n/rx65n_eth.c
+++ b/arch/renesas/src/rx65n/rx65n_eth.c
@@ -1181,7 +1181,7 @@ static void rx65n_dopoll(FAR struct rx65n_ethmac_s *priv)
 
       if (dev->d_buf)
         {
-          devif_poll(dev, rx65n_txpoll);
+          devif_timer(dev, 0, rx65n_txpoll);
 
           /* We will, most likely end up with a buffer to be freed.  But it
            * might not be the same one that we allocated above.
diff --git a/arch/sim/src/sim/up_netdriver.c b/arch/sim/src/sim/up_netdriver.c
index ee8f0c3..62036af 100644
--- a/arch/sim/src/sim/up_netdriver.c
+++ b/arch/sim/src/sim/up_netdriver.c
@@ -303,7 +303,7 @@ static void netdriver_txavail_work(FAR void *arg)
   net_lock();
   if (IFF_IS_UP(dev->d_flags))
     {
-      devif_poll(dev, netdriver_txpoll);
+      devif_timer(dev, 0, netdriver_txpoll);
     }
 
   net_unlock();
diff --git a/arch/xtensa/src/esp32/esp32_emac.c b/arch/xtensa/src/esp32/esp32_emac.c
index 77eddd0..3cd7671 100644
--- a/arch/xtensa/src/esp32/esp32_emac.c
+++ b/arch/xtensa/src/esp32/esp32_emac.c
@@ -1693,7 +1693,7 @@ static void emac_dopoll(struct esp32_emac_s *priv)
 
       dev->d_len = EMAC_BUF_LEN;
 
-      devif_poll(dev, emac_txpoll);
+      devif_timer(dev, 0, emac_txpoll);
 
       if (dev->d_buf)
         {
diff --git a/arch/xtensa/src/esp32/esp32_wlan.c b/arch/xtensa/src/esp32/esp32_wlan.c
index 501cc29..d60b038 100644
--- a/arch/xtensa/src/esp32/esp32_wlan.c
+++ b/arch/xtensa/src/esp32/esp32_wlan.c
@@ -841,7 +841,7 @@ static void wlan_dopoll(FAR struct wlan_priv_s *priv)
 
   /* If so, then poll the network for new XMIT data */
 
-  devif_poll(dev, wlan_txpoll);
+  devif_timer(dev, 0, wlan_txpoll);
 
   dev->d_buf = NULL;
 }
diff --git a/arch/z80/src/ez80/ez80_emac.c b/arch/z80/src/ez80/ez80_emac.c
index 3d45181..6632215 100644
--- a/arch/z80/src/ez80/ez80_emac.c
+++ b/arch/z80/src/ez80/ez80_emac.c
@@ -2223,7 +2223,7 @@ static void ez80emac_txavail_work(FAR void *arg)
 
       /* If so, then poll the network for new XMIT data */
 
-      devif_poll(&priv->dev, ez80emac_txpoll);
+      devif_timer(&priv->dev, 0, ez80emac_txpoll);
     }
 
   net_unlock();