From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rcdn-iport-4.cisco.com (rcdn-iport-4.cisco.com [173.37.86.75]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (Client CN "rcdn-iport.cisco.com", Issuer "HydrantID SSL ICA G2" (verified OK)) by huchra.bufferbloat.net (Postfix) with ESMTPS id C57A121F23A for ; Mon, 27 Apr 2015 07:56:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=9994; q=dns/txt; s=iport; t=1430146604; x=1431356204; h=from:to:subject:date:message-id:mime-version; bh=vKGZOAMo7zT/LboXJSYitopVflicCoq2RFmVtzwvU7s=; b=E923vyPekKZEyQP02lY7a4lg/3DKuB2UD0zBjPAa0OF65FGHlNnE1PoW 3C+HROkDh6xqbN59R4Djf55DNrYzY+c19qtfcGac6dqLHUP0+KBbIWIN/ R3PioJbyC0Gfss9VOW5faAIJId0ueRwu7CV/3a1yKIIc7umt0ZGAhs3k6 Q=; X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0CFBQDXTT5V/5hdJa1cgkVHU1wFxhCBewEJhgQCgTJMAQEBAQEBgQuEIAEBAQQBAiQGXgEIEQQBAQtMCh0JAQQTCIgjDaM9o0UBAQEBAQEBAQEBAQEBAQEBAQEBGYs4hDoag0+BFgWRVYQBhAiOT4lCI4IHHIFRb4FEgQABAQE X-IronPort-AV: E=Sophos;i="5.11,657,1422921600"; d="scan'208,217";a="415171651" Received: from rcdn-core-1.cisco.com ([173.37.93.152]) by rcdn-iport-4.cisco.com with ESMTP; 27 Apr 2015 14:56:39 +0000 Received: from xhc-aln-x13.cisco.com (xhc-aln-x13.cisco.com [173.36.12.87]) by rcdn-core-1.cisco.com (8.14.5/8.14.5) with ESMTP id t3REud0e009986 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL) for ; Mon, 27 Apr 2015 14:56:39 GMT Received: from xmb-aln-x05.cisco.com ([169.254.11.175]) by xhc-aln-x13.cisco.com ([173.36.12.87]) with mapi id 14.03.0195.001; Mon, 27 Apr 2015 09:56:39 -0500 From: "Bill Ver Steeg (versteb)" To: "bloat@lists.bufferbloat.net" Thread-Topic: sch_fq and sk->sk_pacing_rate Thread-Index: AdCA+Y0yQ6uKea+qRLaAqAY7d4B5KQAAFMjQ Date: Mon, 27 Apr 2015 14:56:38 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.82.210.114] Content-Type: multipart/alternative; boundary="_000_AE7F97DB5FEE054088D82E836BD15BE9319C3445xmbalnx05ciscoc_" MIME-Version: 1.0 Subject: Re: [Bloat] sch_fq and sk->sk_pacing_rate 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: Mon, 27 Apr 2015 14:56:47 -0000 --_000_AE7F97DB5FEE054088D82E836BD15BE9319C3445xmbalnx05ciscoc_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Oops- I seem to have hit send too quickly. I think setsockopt(sockfd, SOL_S= OCKET, SO_MAX_PACING_RATE, &val, sizeof(val)) is the call I am looking for.= I was looking on an older kernel when I wrote the first note. Comments still welcome on it use, though. Bill VerSteeg From: Bill Ver Steeg (versteb) Sent: Monday, April 27, 2015 10:51 AM To: bloat@lists.bufferbloat.net Subject: sch_fq and sk->sk_pacing_rate Bloaters (and particularly Eric) I will try to not confuse the list, as this question is about host behavior= s rather than middlebox behaviors. Having said that...... I am playing around with some application code that would benefit from paci= ng. The example I have in mind is MPEG-DASH style vide, but any type of ABR= flow would probably benefit from the scheme I have in mind. I have done so= me work with client based pacing via RWND, but it is very clunky. I am thinking of having the server tell the kernel the rate at which it wan= ts data delivered to the client. (The client would probably tell the server= via an HTTP pragma, but that is a separate can of worms....) So, the HTTP = server would tell the kernel that it wants to deliver the TCP data at or be= low a certain max rate. There are currently hooks in sch_fq for the TCP lay= er to set sk_pacing_rate. It seems that I would need to add another pacing = variable and have the data sent at the min of q->flow_max_rate, skb->sk->sk= _pacing_rate, and this new app_pacing_rate. In other words, the old code rate =3D q->flow_max_rate; if (skb->sk) rate =3D min(skb->sk->sk_pacing_rate, rate); would become rate =3D q->flow_max_rate; if (skb->sk) { rate =3D min(skb->sk->sk_pacing_rate, rate); if (skb->sk->app_pacing_rate) rate =3D (min(skb->sk->app_pacing_rate, rate); } Thoughts? Bill VerSteeg --_000_AE7F97DB5FEE054088D82E836BD15BE9319C3445xmbalnx05ciscoc_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Oops- I seem to have h= it send too quickly. I think setsockopt(sockfd, SOL_SOCKET, SO_MAX_PACING_RAT= E, &val, sizeof(val)) is the call I am looking for. I was lo= oking on an older kernel when I wrote the first note.

 

Comments still welcome= on it use, though.

 

Bill VerSteeg

 

 

From: Bill Ver= Steeg (versteb)
Sent: Monday, April 27, 2015 10:51 AM
To: bloat@lists.bufferbloat.net
Subject: sch_fq and sk->sk_pacing_rate

 

Bloaters (and particularly Eric)

 

I will try to not confuse the list, as this question= is about host behaviors rather than middlebox behaviors. Having said that&= #8230;…

 

I am playing around with some application code that = would benefit from pacing. The example I have in mind is MPEG-DASH style vi= de, but any type of ABR flow would probably benefit from the scheme I have = in mind. I have done some work with client based pacing via RWND, but it is very clunky.

 

I am thinking of having the server tell the kernel t= he rate at which it wants data delivered to the client. (The client would p= robably tell the server via an HTTP pragma, but that is a separate can of w= orms….) So, the HTTP server would tell the kernel that it wants to deliver the TCP data at or below a certai= n max rate. There are currently hooks in sch_fq for the TCP layer to set sk= _pacing_rate. It seems that I would need to add another pacing variable and= have the data sent at the min of q->flow_max_rate, skb->sk->sk_pacing_rate, and this new app_pacin= g_rate. In other words, the old code

 

rate =3D q->flow_max_rate;
if (skb->sk)
   rate =3D min(skb->sk->sk_pacing_rate, rate);

 

would become

 

rate =3D q->flow_max_rate;
if (skb->sk)
{
    rate =3D min(skb->sk->sk_pacing_rate, rate);
    if (skb->sk->app_pacing_rat=
e)
        rate =3D =
(min(skb->sk->app_pacing_rate, rate);
}       

 

 

Thoughts?

 

Bill VerSteeg

--_000_AE7F97DB5FEE054088D82E836BD15BE9319C3445xmbalnx05ciscoc_--