and because of your I'm off building collectd because those graphs look so good. :)
https://forum.openwrt.org/t/sqm-reporting/59960/24 I have long just used snmpd, and collectd looks interesting. I fear it's too heavyweight, particularly shelling out to a script.... On Wed, Apr 22, 2020 at 9:15 AM Dave Taht <[email protected]> wrote: > > On Wed, Apr 22, 2020 at 8:58 AM Kevin Darbyshire-Bryant > <[email protected]> wrote: > > > > During these strange times of lockdown I’ve been trying to keep myself > > occupied/entertained/sane(???) by ‘fiddling with stuff’ and improving my > > coding. This started with an idea of learning Python which was great until > > the on-line bit of it ran out and someone posted an idea on the Openwrt > > forum about graphing Cake stats. > > > > That had nothing to do with Python and involved (new to me) technologies > > such as ‘collectd’, ‘JSON’, a bit of javascript and my usual level of > > cobbling something together in ‘ash’…. So that course was well spent :-) > > > > Anyway, data was collected and graphs produced in a very small household. > > What’s immediately apparent from those graphs and cake in ‘diffserv4’ mode > > is that very, very few applications are using DSCP at all. Most things are > > to port 443. > > > > I was also a little surprised to see that my DNS over foo proxies such as > > stubby & https-dns-proxy don’t use DSCP coding. It surprised me even more > > to see RFC recommendations that DNS be treated as ‘Best Effort’. Now in > > the days of udp only and no dnssec (with fallback to tcp) this may be good > > enough, but I wonder if this is realistic these days? > > > > So putting aside the discussion of what codepoint should be used, I then > > wondered how hard it would be to actually set a dscp in these applications. > > And this is where I had another surprise. For example https-dns-proxy > > uses libcurl. libcurl has no standard ‘in-library’ method for setting a > > socket’s dscp. I cobbled a workaround in the application > > https://github.com/aarond10/https_dns_proxy/pull/83 - it works. > > > > Next I attacked stubby, which uses getdns. getdns doesn’t even have a > > callback or parameters passing so you can set a dscp on the socket from a > > client application, pure ‘hack the library’ stuff. > > > > To be blunt and on a small sample of 2 libraries/applications, it seems > > that DSCP is completely ignored. Applications signalling ’this is/isnt > > latency sensitive/bulk’ isn’t going to happen if it isn’t easy to do. > > > > Apple should be marking facetime calls as being ‘video conference’ or > > whatever. BBC iplayer Radio apps should be marking ‘audio streaming’. But > > every f*ing thing is CS0 port 443. And I’m wondering how much of this is > > because library support is simply missing. Maybe gaming apps are better? > > (I don’t game) > > > > Right, I’m off for a lie down. Sorry for the rant. > > Welcome to my explorations... in 2011. Diffserv is rather underused, isn't it? > > I took a survey of every (500+) gaming console at a convention. nearly > zero diffserv usage and it was all over the map, and I think, mostly, > from osx. > > windows requires admin privs to set the tos bits at all > webrtc has an api to set the bits, but it doesn't work on windows. > > ssh will set the imm bit for interactive, I forget what it sets for bulk > bgp sets cs6. so does babel. Arguably both usages are wrong. > some windows stuff sets cs1 for things like ping > I got the mosh folk to use AF42 as a (worldwide) test, for nearly a > year. they had one user with a problem and they turned it off. It was > funny, keith thought I was making an expert recommendation rather than > a test and just copy pasted my code into the tree and shipped it. > > linux implements a strict priority queue in pfifo_fast. You can dos it > if you hit it by setting the bits. > irtt and netperf let you set the bits. iperf also. > > I produced a patch for rsync in particular (since I use it heavily) > > sqm at least used to mark dns and ntp as some elivated prio, but I > forget which and for all I know the cake qos system doesn't implement > those filters. > > A few multi-queue ethernet devices actually do interpret the bits. > Undocumented as to which one.. > > and lets not get started on ecn. > > > > > > > Hack for getdns/stubby > > > > diff --git a/src/stub.c b/src/stub.c > > index 2547d10f..7e47aba5 100644 > > --- a/src/stub.c > > +++ b/src/stub.c > > @@ -52,6 +52,7 @@ > > #include "platform.h" > > #include "general.h" > > #include "pubkey-pinning.h" > > +#include <netinet/ip.h> > > > > /* WSA TODO: > > * STUB_TCP_RETRY added to deal with edge triggered event loops (versus > > @@ -381,6 +382,9 @@ tcp_connect(getdns_upstream *upstream, > > getdns_transport_list_t transport) > > # else > > static const int enable = 1; > > # endif > > +#endif > > +#if defined(IP_TOS) > > + int dscp = IPTOS_CLASS_CS4; > > #endif > > int fd = -1; > > > > @@ -390,6 +394,12 @@ tcp_connect(getdns_upstream *upstream, > > getdns_transport_list_t transport) > > __FUNC__, (void*)upstream); > > if ((fd = socket(upstream->addr.ss_family, SOCK_STREAM, > > IPPROTO_TCP)) == -1) > > return -1; > > +#if defined(IP_TOS) > > + if (upstream->addr.ss_family == AF_INET6) > > + (void)setsockopt(fd, IPPROTO_IPV6, IP_TOS, &dscp, > > sizeof(dscp)); > > + else if (upstream->addr.ss_family == AF_INET) > > + (void)setsockopt(fd, IPPROTO_IP, IP_TOS, &dscp, > > sizeof(dscp)); > > +#endif > > > > > > Cheers, > > > > Kevin D-B > > > > gpg: 012C ACB2 28C6 C53E 9775 9123 B3A2 389B 9DE2 334A > > > > _______________________________________________ > > Cake mailing list > > [email protected] > > https://lists.bufferbloat.net/listinfo/cake > > > > -- > Make Music, Not War > > Dave Täht > CTO, TekLibre, LLC > http://www.teklibre.com > Tel: 1-831-435-0729 -- Make Music, Not War Dave Täht CTO, TekLibre, LLC http://www.teklibre.com Tel: 1-831-435-0729 _______________________________________________ Cake mailing list [email protected] https://lists.bufferbloat.net/listinfo/cake
