From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4AA1EC433DF for ; Sat, 1 Aug 2020 08:59:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1CB72207D0 for ; Sat, 1 Aug 2020 08:59:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728676AbgHAI7U (ORCPT ); Sat, 1 Aug 2020 04:59:20 -0400 Received: from out30-43.freemail.mail.aliyun.com ([115.124.30.43]:47861 "EHLO out30-43.freemail.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725876AbgHAI7T (ORCPT ); Sat, 1 Aug 2020 04:59:19 -0400 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R181e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e01355;MF=wenyang@linux.alibaba.com;NM=1;PH=DS;RN=12;SR=0;TI=SMTPD_---0U4O6FF._1596272349; Received: from localhost(mailfrom:wenyang@linux.alibaba.com fp:SMTPD_---0U4O6FF._1596272349) by smtp.aliyun-inc.com(127.0.0.1); Sat, 01 Aug 2020 16:59:15 +0800 From: Wen Yang To: davem@davemloft.net, Jakub Kicinski Cc: Xunlei Pang , Caspar Zhang , Wen Yang , Andrew Lunn , Eric Dumazet , Jiri Pirko , Leon Romanovsky , Julian Wiedmann , netdev@vger.kernel.org, linux-kernel@vger.kernel.org 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 Message-Id: <20200801085845.20153-1-wenyang@linux.alibaba.com> X-Mailer: git-send-email 2.23.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Cc: "David S. Miller" Cc: Jakub Kicinski Cc: Andrew Lunn Cc: Eric Dumazet Cc: Jiri Pirko Cc: Leon Romanovsky Cc: Julian Wiedmann 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