From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mout.gmx.net", Issuer "TeleSec ServerPass DE-1" (verified OK)) by huchra.bufferbloat.net (Postfix) with ESMTPS id 2B5C021FAB4 for ; Sun, 28 Jun 2015 01:24:05 -0700 (PDT) Received: from hms-beagle-7.home.lan ([217.237.70.193]) by mail.gmx.com (mrgmx101) with ESMTPSA (Nemesis) id 0M9fLX-1ZDkZp2gpz-00CxrA; Sun, 28 Jun 2015 10:24:02 +0200 Content-Type: multipart/mixed; boundary="Apple-Mail=_E638B1DB-B3A9-4D0C-B43F-4A06AE7FA949" Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) From: Sebastian Moeller In-Reply-To: Date: Sun, 28 Jun 2015 10:23:58 +0200 Message-Id: <8B853F1C-DE5D-4F3D-88CC-CB8DA2D3E8B1@gmx.de> References: <43D5C3CE-F1F4-4BA5-AEB9-55348661C7BA@gmx.de> To: Mikael Abrahamsson X-Mailer: Apple Mail (2.1878.6) X-Provags-ID: V03:K0:dw1lJoZvwuT8kN0Mlk3J+WjM5Z9g+L3bgXTE570rJ0URcIRmvtI 0xUCWJyJEXwDfJ6Olh3LsBtdQPaWc7T7OdLj5RJbO9OcJo0s9GmoyqeMotDFZWb4N0zi19m OEmobtaKATlAS5UnsLK9WmIsxuvfbgsayJDouyDk7f9ZApzSusMzhsXd6ywVCK/1AKdaxLL eWKTR0Ya/IkvC4FWilxYA== X-UI-Out-Filterresults: notjunk:1;V01:K0:d3rQTjeKQC4=:rgfjm+MuQxRgi3abx4UbtJ 5qqS5TcIRrvnqil/45hETvgZDKLqDMXjmf2tNILTNUfzGRCspORsSCi9VlmJjYZsJwokGYtRc obxhh6ssZZORqDsMLrYL13oZc1x5zUgC6ivEzLEoMUYRNihD9viGsHnSQWURs/gGRAHa9Rj9h q9nzaaKSzS8bZ9V5H4/+ax65A/qyhQxJEEfqgZFSuIufx9tmUdV/SpIkBcBq+6rFf1HDltw76 GoVFLsus0o0y6fbdXjeabmhauQlvh50ZlQqu1UpHTy5Qg4HHoCY1qeHIafni//3XRPKVJWZn6 Wpci+GNd7Vgotf+PDWA7pv6mvdQsOJHAH4/WEpwPKqnZP1S9oDd30zou7/b1nWGi7e5U7r1cS h0gvKWU3WmBobWmZ/zCBP39y7hhkgQYzutbn+Xg4CxKV7TQzb7sJ5QFePLZ8cUs23XvpnBj/s x5PzHGaqBmXRGISwL51bXXUg2+b0AAh+MjX0RDZGM/LMZMmtwNgi6LAbJBrxPrFF1UiAFxryf r6tkRqlGzyIYvTgCIE/mRyvkm6t3Qr+Fphuhhf3TdGbf2UxD4rfmi2ILZiwMm/pURSlo9U+Ms QWQdZPbz1z/H1k51lUQ8HRUmveM47rhgoJuHbe+u4EIEB1ka6k6eorRLXj8x7YPIbU7dN4GO0 psFGNGDydzaum4yKlfbfnhSvFB0nfIiQ17InP79wZTD7MJA== Cc: "cerowrt-devel@lists.bufferbloat.net" Subject: Re: [Cerowrt-devel] performance numbers from WRT1200AC (Re: Latest build test - new sqm-scripts seem to work; "cake overhead 40" didn't) X-BeenThere: cerowrt-devel@lists.bufferbloat.net X-Mailman-Version: 2.1.13 Precedence: list List-Id: Development issues regarding the cerowrt test router project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jun 2015 08:24:34 -0000 --Apple-Mail=_E638B1DB-B3A9-4D0C-B43F-4A06AE7FA949 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Hi Mikael, On Jun 28, 2015, at 09:06 , Mikael Abrahamsson wrote: > On Fri, 26 Jun 2015, Dave Taht wrote: >=20 >> src-git https://github.com/dtaht/ceropackages-3.10.git >>=20 >> ./scripts feeds update >> ./scripts feeds install kmod-sched-cake tc-adv kmod-sched-fq_pie >> edit the .config file to make them modules or installed by default >> make menuconfig then save >> make >=20 > I have now done this. I have sch_cake, and I have a tc I can add an = qdisc "cake" with to for instance eth1 and see stats from it with "tc -s = qdisc" >=20 > I however do not have anything "cake" in luci-app-sqm. I see = luci-app-sqm in my "cero" feed, but it seems to install luci-app-sqm = from regular OpenWrt instead. Ah, I see the latest changes have not yet made it into the = openwrt repository (due to lack of testing). As I do not have = permissions/authority to push changes into the openwrt repository, there = is nothing I can do to expedite the process. You could replace = /usr/lib/lua/luci/model/cbi/sqm.lua on your router with the following = (attached file) --Apple-Mail=_E638B1DB-B3A9-4D0C-B43F-4A06AE7FA949 Content-Disposition: attachment; filename=sqm.lua Content-Type: application/octet-stream; name="sqm.lua" Content-Transfer-Encoding: 7bit --[[ LuCI - Lua Configuration Interface Copyright 2014 Steven Barth Copyright 2014 Dave Taht Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 $Id$ ]]-- local wa = require "luci.tools.webadmin" local fs = require "nixio.fs" local net = require "luci.model.network".init() local sys = require "luci.sys" --local ifaces = net:get_interfaces() local ifaces = sys.net:devices() local path = "/usr/lib/sqm" m = Map("sqm", translate("Smart Queue Management"), translate("With SQM you " .. "can enable traffic shaping, better mixing (Fair Queueing)," .. " active queue length management (AQM) " .. " and prioritisation on one " .. "network interface.")) s = m:section(TypedSection, "queue", translate("Queues")) s:tab("tab_basic", translate("Basic Settings")) s:tab("tab_qdisc", translate("Queue Discipline")) s:tab("tab_linklayer", translate("Link Layer Adaptation")) s.addremove = true -- set to true to allow adding SQM instances in the GUI s.anonymous = true -- BASIC e = s:taboption("tab_basic", Flag, "enabled", translate("Enable this SQM instance.")) e.rmempty = false -- sm: following jow's advise, be helpful to the user and enable -- sqm's init script if even a single sm instance/interface -- is enabled; this is unexpected in that the init script gets -- enabled as soon as at least one sqm instance is enabled -- and that state is saved, so it does not require "Save & Apply" -- to effect the init scripts. -- the implementation was inpired/lifted from -- https://github.com/openwrt/luci/blob/master/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua function e.write(self, section, value) if value == "1" then luci.sys.init.enable("sqm") m.message = translate("The SQM GUI has just enabled the sqm initscript on your behalf. Remember to disable the sqm initscript manually under System Startup menu in case this change was not wished for.") -- luci.sys.call("/etc/init.d/sqm start >/dev/null") -- else -- luci.sys.call("/etc/init.d/sqm stop >/dev/null") -- luci.sys.init.disable("sqm") end return Flag.write(self, section, value) end -- TODO: inform the user what we just did... n = s:taboption("tab_basic", ListValue, "interface", translate("Interface name")) -- sm lifted from luci-app-wol, the original implementation failed to show pppoe-ge00 type interface names for _, iface in ipairs(ifaces) do -- if iface:is_up() then -- n:value(iface:name()) -- end if iface ~= "lo" then n:value(iface) end end n.rmempty = false dl = s:taboption("tab_basic", Value, "download", translate("Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress shaping:")) dl.datatype = "and(uinteger,min(0))" dl.rmempty = false ul = s:taboption("tab_basic", Value, "upload", translate("Upload speed (kbit/s) (egress) set to 0 to selectively disable egress shaping:")) ul.datatype = "and(uinteger,min(0))" ul.rmempty = false -- QDISC c = s:taboption("tab_qdisc", ListValue, "qdisc", translate("Queueing discipline")) c:value("fq_codel", "fq_codel ("..translate("default")..")") c:value("efq_codel") c:value("nfq_codel") c:value("sfq") c:value("codel") c:value("ns2_codel") c:value("pie") c:value("sfq") c:value("cake") c.default = "fq_codel" c.rmempty = false local qos_desc = "" sc = s:taboption("tab_qdisc", ListValue, "script", translate("Queue setup script")) for file in fs.dir(path) do if string.find(file, ".qos$") then sc:value(file) end if string.find(file, ".qos.help$") then fh = io.open(path .. "/" .. file, "r") qos_desc = qos_desc .. "

" .. file:gsub(".help$", "") .. ":
" .. fh:read("*a") .. "

" end end sc.default = "simple.qos" sc.rmempty = false sc.description = qos_desc ad = s:taboption("tab_qdisc", Flag, "qdisc_advanced", translate("Show and Use Advanced Configuration. Advanced options will only be used as long as this box is checked.")) ad.default = false ad.rmempty = true squash_dscp = s:taboption("tab_qdisc", ListValue, "squash_dscp", translate("Squash DSCP on inbound packets (ingress):")) squash_dscp:value("1", "SQUASH") squash_dscp:value("0", "DO NOT SQUASH") squash_dscp.default = "1" squash_dscp.rmempty = true squash_dscp:depends("qdisc_advanced", "1") squash_ingress = s:taboption("tab_qdisc", ListValue, "squash_ingress", translate("Ignore DSCP on ingress:")) squash_ingress:value("1", "Ignore") squash_ingress:value("0", "Allow") squash_ingress.default = "1" squash_ingress.rmempty = true squash_ingress:depends("qdisc_advanced", "1") iecn = s:taboption("tab_qdisc", ListValue, "ingress_ecn", translate("Explicit congestion notification (ECN) status on inbound packets (ingress):")) iecn:value("ECN", "ECN ("..translate("default")..")") iecn:value("NOECN") iecn.default = "ECN" iecn.rmempty = true iecn:depends("qdisc_advanced", "1") eecn = s:taboption("tab_qdisc", ListValue, "egress_ecn", translate("Explicit congestion notification (ECN) status on outbound packets (egress).")) eecn:value("NOECN", "NOECN ("..translate("default")..")") eecn:value("ECN") eecn.default = "NOECN" eecn.rmempty = true eecn:depends("qdisc_advanced", "1") ad2 = s:taboption("tab_qdisc", Flag, "qdisc_really_really_advanced", translate("Show and Use Dangerous Configuration. Dangerous options will only be used as long as this box is checked.")) ad2.default = false ad2.rmempty = true ad2:depends("qdisc_advanced", "1") ilim = s:taboption("tab_qdisc", Value, "ilimit", translate("Hard limit on ingress queues; leave empty for default.")) -- ilim.default = 1000 ilim.isnumber = true ilim.datatype = "and(uinteger,min(0))" ilim.rmempty = true ilim:depends("qdisc_really_really_advanced", "1") elim = s:taboption("tab_qdisc", Value, "elimit", translate("Hard limit on egress queues; leave empty for default.")) -- elim.default = 1000 elim.datatype = "and(uinteger,min(0))" elim.rmempty = true elim:depends("qdisc_really_really_advanced", "1") itarg = s:taboption("tab_qdisc", Value, "itarget", translate("Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for automatic selection, put in the word default for the qdisc's default.")) itarg.datatype = "string" itarg.rmempty = true itarg:depends("qdisc_really_really_advanced", "1") etarg = s:taboption("tab_qdisc", Value, "etarget", translate("Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for automatic selection, put in the word default for the qdisc's default.")) etarg.datatype = "string" etarg.rmempty = true etarg:depends("qdisc_really_really_advanced", "1") iqdisc_opts = s:taboption("tab_qdisc", Value, "iqdisc_opts", translate("Advanced option string to pass to the ingress queueing disciplines; no error checking, use very carefully.")) iqdisc_opts.rmempty = true iqdisc_opts:depends("qdisc_really_really_advanced", "1") eqdisc_opts = s:taboption("tab_qdisc", Value, "eqdisc_opts", translate("Advanced option string to pass to the egress queueing disciplines; no error checking, use very carefully.")) eqdisc_opts.rmempty = true eqdisc_opts:depends("qdisc_really_really_advanced", "1") -- LINKLAYER ll = s:taboption("tab_linklayer", ListValue, "linklayer", translate("Which link layer to account for:")) ll:value("none", "none ("..translate("default")..")") ll:value("ethernet", "Ethernet with overhead: select for e.g. VDSL2.") ll:value("atm", "ATM: select for e.g. ADSL1, ADSL2, ADSL2+.") -- ll:value("adsl") -- reduce the options ll.default = "none" po = s:taboption("tab_linklayer", Value, "overhead", translate("Per Packet Overhead (byte):")) po.datatype = "and(integer,min(-1500))" po.default = 0 po.isnumber = true po.rmempty = true po:depends("linklayer", "ethernet") -- po:depends("linklayer", "adsl") po:depends("linklayer", "atm") adll = s:taboption("tab_linklayer", Flag, "linklayer_advanced", translate("Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced options will only be used as long as this box is checked.")) adll.rmempty = true adll:depends("linklayer", "ethernet") -- adll:depends("linklayer", "adsl") adll:depends("linklayer", "atm") smtu = s:taboption("tab_linklayer", Value, "tcMTU", translate("Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= interface MTU + overhead:")) smtu.datatype = "and(uinteger,min(0))" smtu.default = 2047 smtu.isnumber = true smtu.rmempty = true smtu:depends("linklayer_advanced", "1") stsize = s:taboption("tab_linklayer", Value, "tcTSIZE", translate("Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU + 1) / 16:")) stsize.datatype = "and(uinteger,min(0))" stsize.default = 128 stsize.isnumber = true stsize.rmempty = true stsize:depends("linklayer_advanced", "1") smpu = s:taboption("tab_linklayer", Value, "tcMPU", translate("Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:")) smpu.datatype = "and(uinteger,min(0))" smpu.default = 0 smpu.isnumber = true smpu.rmempty = true smpu:depends("linklayer_advanced", "1") lla = s:taboption("tab_linklayer", ListValue, "linklayer_adaptation_mechanism", translate("Which linklayer adaptation mechanism to use; for testing only")) lla:value("cake") lla:value("htb_private") lla:value("tc_stab", "tc_stab ("..translate("default")..")") lla.default = "tc_stab" lla.rmempty = true lla:depends("linklayer_advanced", "1") -- PRORITIES? return m --Apple-Mail=_E638B1DB-B3A9-4D0C-B43F-4A06AE7FA949 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=windows-1252 that should do the trick and get you to the most recent version that = needs testers badly. The minimal change required is to add = c:value(=93cake=94) to the following section of sqm.lua: c =3D s:taboption("tab_qdisc", ListValue, "qdisc", translate("Queueing = discipline")) c:value("fq_codel", "fq_codel ("..translate("default")..")") c:value("efq_codel") c:value("nfq_codel") c:value("sfq") c:value("codel") c:value("ns2_codel") c:value("pie") c:value("sfq=94) c:value(=93cake") c.default =3D "fq_codel" c.rmempty =3D false @Dave, which of these do we want to keep carrying and which can we = safely retire? Especially in the openwrt context most of the = experimental ones are not available anyways. (If anybody has a way to = make tc or the kernel enumerate the qdiscs that are either compiled in = or available as modules that would be much appreciated.) Best Regards Sebastian >=20 > So either if someone has any tips on how to fix this, or can just give = me how to configure qdiscs manually, I will be able to do cake testing = on the WRT1200AC. >=20 > --=20 > Mikael Abrahamsson email: swmike@swm.pp.se > _______________________________________________ > Cerowrt-devel mailing list > Cerowrt-devel@lists.bufferbloat.net > https://lists.bufferbloat.net/listinfo/cerowrt-devel --Apple-Mail=_E638B1DB-B3A9-4D0C-B43F-4A06AE7FA949--