From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-we0-f171.google.com (mail-we0-f171.google.com [74.125.82.171]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority" (verified OK)) by huchra.bufferbloat.net (Postfix) with ESMTPS id B0F9D200DE1 for ; Sat, 4 Feb 2012 23:40:01 -0800 (PST) Received: by werb14 with SMTP id b14so6407517wer.16 for ; Sat, 04 Feb 2012 23:39:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=message-id:subject:from:to:cc:date:in-reply-to:references :content-type:x-mailer:content-transfer-encoding:mime-version; bh=wcmmUzHZN4+9H27JRtRSJlP0u1DqImo4BsI6N8nGb9c=; b=Kg9pkyocsK2Oxn5RQe10FjwuxxCWC3TJnwlTGPcKFvfhrtvR7B2C7cUZB3cFEq3TXZ l9CcEqt57CP/zQ6zXP6+TA8U1Ma0qncGUz460ZKLLiteAZ847tu2bRFImPeQKQ4dxQ9S hfQbSL+2GD43SZ+z8s3tz6agbOrciljynS+Uk= Received: by 10.216.138.220 with SMTP id a70mr2079297wej.24.1328427599894; Sat, 04 Feb 2012 23:39:59 -0800 (PST) Received: from [192.168.1.97] (122.237.66.86.rev.sfr.net. [86.66.237.122]) by mx.google.com with ESMTPS id l8sm34279273wiy.5.2012.02.04.23.39.58 (version=SSLv3 cipher=OTHER); Sat, 04 Feb 2012 23:39:58 -0800 (PST) Message-ID: <1328427596.14474.9.camel@edumazet-laptop> From: Eric Dumazet To: Jonathan Morton Date: Sun, 05 Feb 2012 08:39:56 +0100 In-Reply-To: <40C8C302-7B23-4272-8322-1D916BB0CEB2@gmail.com> References: <1325481751.2526.23.camel@edumazet-laptop> <4F046F7B.6030905@freedesktop.org> <40C8C302-7B23-4272-8322-1D916BB0CEB2@gmail.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.2- Content-Transfer-Encoding: 8bit Mime-Version: 1.0 Cc: bloat Subject: Re: [Bloat] What is fairness, anyway? was: Re: finally... winning on wired! X-BeenThere: bloat@lists.bufferbloat.net X-Mailman-Version: 2.1.13 Precedence: list List-Id: General list for discussing Bufferbloat List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Feb 2012 07:40:02 -0000 Le dimanche 05 février 2012 à 02:43 +0200, Jonathan Morton a écrit : > On 5 Feb, 2012, at 2:24 am, George B. wrote: > > > I have yet another question to ask: On a system where the vast > > majority of traffic is receive traffic, what can it really do to > > mitigate congestion? I send a click, I get a stream. There doesn't > > seem to be a lot I can do from my side to manage congestion in the > > remote server's transmit side of the link if I am an overall > receiver > > of traffic. > > > > If I am sending a bunch of traffic, sure, I can do a lot with queue > > management and early detection. But if I am receiving, it pretty > much > > just is what is and I have to play the stream that I am served. > > There are two good things you can do. > > 1) Pressure your ISP to implement managed queueing and ECN at the > head-end device, eg. DSLAM or cell-tower, and preferably at other > vulnerable points in their network too. Yep, but unfortunately many servers (and clients) dont even initiate/accept ECN > 2) Implement TCP *receive* window management. This prevents the TCP > algorithm on the sending side from attempting to find the size of the > queues in the network. Search the list archives for "Blackpool" to > see my take on this technique in the form of a kernel patch. More > sophisticated algorithms are doubtless possible. > You can tweak max receiver window to be really small. # cat /proc/sys/net/ipv4/tcp_rmem 4096 87380 4127616 # echo "4096 16384 40000" >/proc/sys/net/ipv4/tcp_rmem A third one : Install an AQM on ingress side. Basically you can delay some flows, so that TCP acks are also delayed. Example of a basic tc script (probably too basic, but effective) ETH=eth0 IFB=ifb0 LOCALNETS="172.16.0.0/12 192.168.0.0/16 10.0.0.0/8" # Put a limit a bit under real one, to 'own' the queue RATE="rate 7Mbit bandwidth 7Mbit maxburst 80 minburst 40" ALLOT="allot 8000" # Depending on how old is your kernel... modprobe ifb ip link set dev $IFB up tc qdisc add dev $ETH ingress 2>/dev/null tc filter add dev $ETH parent ffff: \ protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress \ redirect dev $IFB tc qdisc del dev $IFB root # Lets say our NIC is 100Mbit tc qdisc add dev $IFB root handle 1: cbq avpkt 1000 \ rate 100Mbit bandwidth 100Mbit tc class add dev $IFB parent 1: classid 1:1 cbq allot 10000 \ mpu 64 rate 100Mbit prio 1 \ bandwidth 100Mbit maxburst 150 avpkt 1500 bounded # Class for traffic coming from Internet : limited to X Mbits tc class add dev $IFB parent 1:1 classid 1:11 \ cbq $ALLOT mpu 64 \ $RATE prio 2 \ avpkt 1400 bounded tc qdisc add dev $IFB parent 1:11 handle 11: sfq # Traffic from machines in our LAN : no limit for privnet in $LOCALNETS do tc filter add dev $IFB parent 1: protocol ip prio 2 u32 \ match ip src $privnet flowid 1:1 done tc filter add dev $IFB parent 1: protocol ip prio 2 u32 \ match ip protocol 0 0x00 flowid 1:11