Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752056AbbHED0a (ORCPT ); Tue, 4 Aug 2015 23:26:30 -0400 Received: from mail-ob0-f180.google.com ([209.85.214.180]:33605 "EHLO mail-ob0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751550AbbHED02 convert rfc822-to-8bit (ORCPT ); Tue, 4 Aug 2015 23:26:28 -0400 MIME-Version: 1.0 In-Reply-To: References: Date: Tue, 4 Aug 2015 20:26:28 -0700 Message-ID: Subject: Re: veths often slow to come up From: Cong Wang To: Shaun Crampton Cc: "linux-kernel@vger.kernel.org" , Linux Kernel Network Developers Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2314 Lines: 82 (Cc'ing netdev for network issues) On Tue, Aug 4, 2015 at 6:42 AM, Shaun Crampton wrote: > Please CC me on any responses, thanks. > > Setting both ends of a veth to be oper UP completes very quickly but I > find that pings only start flowing over the veth after about a second. > This seems to correlate with the NO-CARRIER flag being set or the > interface being in "state UNKNOWN" or "state DOWN² for about a second > (demo script below). > > If I run the script repeatedly then sometimes it completes very quickly on > subsequent runs as if there¹s a hot cache somewhere. > > Could this be a bug or is there a configuration to speed this up? Seems > odd that it¹s almost exactly 1s on the first run. > > Seen on these kernels: > * 3.13.0-57-generic #95-Ubuntu SMP Fri Jun 19 09:28:15 UTC 2015 x86_64 > x86_64 x86_64 GNU/Linux > * 4.0.9-coreos #2 SMP Thu Jul 30 01:07:55 UTC 2015 x86_64 Intel(R) Xeon(R) > CPU @ 2.50GHz GenuineIntel GNU/Linux > > Regards, > > -Shaun > > > Running my test script below (Assumes veth0/1 do not already exist): > > $ sudo ./veth-test.sh > Time to create veth: > > real 0m0.019s > user 0m0.002s > sys 0m0.010s > > Time to wait for carrier: > > real 0m1.005s > user 0m0.007s > sys 0m0.123s > > > > # veth-test.sh > > #!/bin/bash > function create_veth { > ip link add type veth > ip link set veth0 up > ip link set veth1 up > } > function wait_for_carrier { > while ! ip link show | grep -qE 'veth[01]'; > do > sleep 0.05 > done > while ip link show | grep -E 'veth[01]¹ | \ > grep -Eq 'NO-CARRIER|state DOWN|state UNKNOWN'; > do > sleep 0.05 > done > } > echo "Time to create veth:" > time create_veth > echo > echo "Time to wait for carrier:" > time wait_for_carrier > ip link del veth0 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/