From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi0-x236.google.com (mail-oi0-x236.google.com [IPv6:2607:f8b0:4003:c06::236]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by huchra.bufferbloat.net (Postfix) with ESMTPS id 9A78821F61C; Fri, 7 Aug 2015 06:47:17 -0700 (PDT) Received: by oio137 with SMTP id 137so53141672oio.0; Fri, 07 Aug 2015 06:47:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=WMWgeAt3/Uhk7fr5GmjzfiQCp+Ydvvok/70ZtNk36bQ=; b=G6wBpYzXRGAYFITrTTzsGhHGGYc3VUXCmDNOA6bxSPYSgKepF/bfQDU7fjEPjuZryB QrkrZm6NKkuV0VgjojNdz5X75XtK/3EtvIbRKA5hhePpxyXkGngeRL+kbl6b4wrItgCr AosQDKUUhGfqwr6YIoDH5PpeO3c5XOaD9UBTGz8qIGdzWGWCptd3YQ1f12n+NDrqFHx1 OL0R8n8vFobVJrBmHWR8aWe0MobwGiIddDAERk1aOiM+DRKRQDmtoZ23VKXWj0l4vw0W A5U4HAW2MbKkf4/zVjfY6439TzqRhH+l7SOVGJ2/0aFH+NPdb0clNrrAguw+o0nwSMFy C6ZA== MIME-Version: 1.0 X-Received: by 10.202.129.70 with SMTP id c67mr6468091oid.42.1438955235838; Fri, 07 Aug 2015 06:47:15 -0700 (PDT) Received: by 10.202.108.12 with HTTP; Fri, 7 Aug 2015 06:47:15 -0700 (PDT) Date: Fri, 7 Aug 2015 15:47:15 +0200 Message-ID: From: Dave Taht To: Jonathan Morton Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Cc: Rich Brown , make-wifi-fast@lists.bufferbloat.net, David Reed , "cerowrt-devel@lists.bufferbloat.net" , Battle of the Mesh Mailing List , Mikael Abrahamsson Subject: [Make-wifi-fast] per station queueing hook in mac80211 X-BeenThere: make-wifi-fast@lists.bufferbloat.net X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 Aug 2015 13:47:46 -0000 The core hook for doing per station queuing entered the linux kernel mainline back in march, by felix feitkau. (see below) Due to the vast number of things that exist at the softmac layer (minstrel stats, retries, interference, and other data) needed to appropriately aggregate and schedule stuff, and vast differences in resources available from other wifi chipsets - this new hook is basically a per driver subsystem (which we think will at least work with ath9k, ath5k, and mt76), which we hope can one day evolve into a library of methods that can be called at the driver, rather than qdisc layer, to do better scheduling, aggregation, fq, and codel-ling in wifi. Operating at such a low level is hairy and full of locks, but all we need to do, at first, is a proof of concept that gets a start at the needed lib and mods... to rip out 100s or 1000s of ms from the current fixed sized single fifo buffering in the driver to something WAY smarter and less latent, that will take vastly better advantage of the 802.11n mac. and I have been meaning to buckle down (and get others to buckle down here!) and get our fingers dirty here for months. The potential benefits are enormous - all the base latency in the existing drivers goes away, at all bandwidths. commit ba8c3d6f16a1f9305c23ac1d2fd3992508c5ac03 Author: Felix Fietkau Date: Fri Mar 27 21:30:37 2015 +0100 mac80211: add an intermediate software queue implementation This allows drivers to request per-vif and per-sta-tid queues from whic= h they can pull frames. This makes it easier to keep the hardware queues short, and to improve fairness between clients and vifs. The task of scheduling packet transmission is left up to the driver - queueing is controlled by mac80211. Drivers can only dequeue packets by calling ieee80211_tx_dequeue. This makes it possible to add active queu= e management later without changing drivers using this code. This can also be used as a starting point to implement A-MSDU aggregation in a way that does not add artificially induced latency. On Fri, Aug 7, 2015 at 3:28 PM, Jonathan Morton wro= te: > >> On 7 Aug, 2015, at 15:22, Rich Brown wrote: >> >> - At that time, the wifi driver requests packets from fq_codel until a) = the the fq_codel queues are empty, or b) the wifi frame is full. In either = case, the wifi driver sends what it has. > > There=E2=80=99s one big flaw with this: if packets are available for mult= iple destinations, fq_codel will generally give you a variety pack of packe= ts for each of them. But a wifi TXOP is for a single destination, so only = some of the packets would be eligible for the same aggregate frame. > > So what=E2=80=99s needed is a way for the wifi driver to tell the queue t= hat it wants packets for the *same* destination as it=E2=80=99s transmittin= g to. > >> - Once the transmit opportunity has come around, it's a matter of micros= econds (I assume) to pull in a wifi frame's worth of packets from fq_codel > > This is hard to guarantee in software in a general-purpose OS. > > - Jonathan Morton > > _______________________________________________ > Make-wifi-fast mailing list > Make-wifi-fast@lists.bufferbloat.net > https://lists.bufferbloat.net/listinfo/make-wifi-fast --=20 Dave T=C3=A4ht worldwide bufferbloat report: http://www.dslreports.com/speedtest/results/bufferbloat And: What will it take to vastly improve wifi for everyone? https://plus.google.com/u/0/explore/makewififast