Messages in this thread Patch in this message | | | From | Wen Yang <> | Subject | [PATCH] net: core: explicitly call linkwatch_fire_event to speed up the startup of network services | Date | Sat, 1 Aug 2020 16:58:45 +0800 |
| |
The linkwatch_event work queue runs up to one second later. When the MicroVM starts, it takes 300+ms for the ethX flag to change from '+UP +LOWER_UP' to '+RUNNING', as follows: Jul 20 22:00:47.432552 systemd-networkd[210]: eth0: bringing link up ... Jul 20 22:00:47.446108 systemd-networkd[210]: eth0: flags change: +UP +LOWER_UP ... Jul 20 22:00:47.781463 systemd-networkd[210]: eth0: flags change: +RUNNING
Let's manually trigger it here to make the network service start faster.
After applying this patch, the time consumption of systemd-networkd.service was reduced from 366ms to 50ms.
Signed-off-by: Wen Yang <wenyang@linux.alibaba.com> Cc: "David S. Miller" <davem@davemloft.net> Cc: Jakub Kicinski <kuba@kernel.org> Cc: Andrew Lunn <andrew@lunn.ch> Cc: Eric Dumazet <edumazet@google.com> Cc: Jiri Pirko <jiri@mellanox.com> Cc: Leon Romanovsky <leon@kernel.org> Cc: Julian Wiedmann <jwi@linux.ibm.com> Cc: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org --- net/core/link_watch.c | 3 +++ net/core/rtnetlink.c | 1 + 2 files changed, 4 insertions(+)
diff --git a/net/core/link_watch.c b/net/core/link_watch.c index 75431ca..6b9d44b 100644 --- a/net/core/link_watch.c +++ b/net/core/link_watch.c @@ -98,6 +98,9 @@ static bool linkwatch_urgent_event(struct net_device *dev) if (netif_is_lag_port(dev) || netif_is_lag_master(dev)) return true; + if ((dev->flags & IFF_UP) && dev->operstate == IF_OPER_DOWN) + return true; + return netif_carrier_ok(dev) && qdisc_tx_changing(dev); } diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 58c484a..fd0b3b6 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -2604,6 +2604,7 @@ static int do_setlink(const struct sk_buff *skb, extack); if (err < 0) goto errout; + linkwatch_fire_event(dev); } if (tb[IFLA_MASTER]) { -- 1.8.3.1
| |