From: Sebastian Moeller <moeller0@gmx.de>
To: Mikael Abrahamsson <swmike@swm.pp.se>
Cc: "cerowrt-devel@lists.bufferbloat.net"
<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)
Date: Sun, 28 Jun 2015 10:23:58 +0200 [thread overview]
Message-ID: <8B853F1C-DE5D-4F3D-88CC-CB8DA2D3E8B1@gmx.de> (raw)
In-Reply-To: <alpine.DEB.2.02.1506280843490.9487@uplift.swm.pp.se>
[-- Attachment #1: Type: text/plain, Size: 1076 bytes --]
Hi Mikael,
On Jun 28, 2015, at 09:06 , Mikael Abrahamsson <swmike@swm.pp.se> wrote:
> On Fri, 26 Jun 2015, Dave Taht wrote:
>
>> src-git https://github.com/dtaht/ceropackages-3.10.git
>>
>> ./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
>
> 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"
>
> 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)
[-- Attachment #2: sqm.lua --]
[-- Type: application/octet-stream, Size: 9571 bytes --]
--[[
LuCI - Lua Configuration Interface
Copyright 2014 Steven Barth <steven@midlink.org>
Copyright 2014 Dave Taht <dave.taht@bufferbloat.net>
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 <abbr title=\"Smart Queue Management\">SQM</abbr> 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 .. "<p><b>" .. file:gsub(".help$", "") .. ":</b><br />" .. fh:read("*a") .. "</p>"
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
[-- Attachment #3: Type: text/plain, Size: 1288 bytes --]
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(“cake”) to the following section of sqm.lua:
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
@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
>
> 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.
>
> --
> Mikael Abrahamsson email: swmike@swm.pp.se
> _______________________________________________
> Cerowrt-devel mailing list
> Cerowrt-devel@lists.bufferbloat.net
> https://lists.bufferbloat.net/listinfo/cerowrt-devel
next prev parent reply other threads:[~2015-06-28 8:24 UTC|newest]
Thread overview: 119+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-19 14:44 [Cerowrt-devel] Latest build test - new sqm-scripts seem to work; "cake overhead 40" didn't Alan Jenkins
2015-06-19 16:41 ` Sebastian Moeller
2015-06-19 17:35 ` Alan Jenkins
2015-06-19 20:12 ` Dave Taht
2015-06-19 20:40 ` Alan Jenkins
2015-06-19 20:51 ` Dave Taht
2015-06-19 20:57 ` Dave Taht
2015-06-19 20:57 ` Alan Jenkins
2015-06-19 21:06 ` Dave Taht
2015-06-19 21:24 ` Dave Taht
2015-06-19 21:52 ` Luis E. Garcia
2015-06-19 23:32 ` Dave Taht
2015-06-20 5:52 ` Sebastian Moeller
2015-06-23 2:41 ` Jim Reisert AD1C
2015-06-23 7:20 ` Sebastian Moeller
2015-06-23 12:55 ` [Cerowrt-devel] performance numbers from WRT1200AC (Re: Latest build test - new sqm-scripts seem to work; "cake overhead 40" didn't) Mikael Abrahamsson
2015-06-23 14:09 ` Dave Taht
2015-06-23 17:25 ` Sebastian Moeller
2015-06-23 18:15 ` Jonathan Morton
2015-06-24 5:21 ` Mikael Abrahamsson
2015-06-24 5:19 ` Mikael Abrahamsson
2015-06-24 11:31 ` Mikael Abrahamsson
2015-06-24 16:32 ` Dave Taht
2015-06-25 1:53 ` Aaron Wood
2015-06-25 3:07 ` Mikael Abrahamsson
2015-06-25 3:32 ` Aaron Wood
2015-06-25 9:12 ` Mikael Abrahamsson
2015-06-25 10:26 ` Mikael Abrahamsson
2015-06-25 20:13 ` Dave Taht
2015-06-25 20:16 ` Dave Taht
2015-06-25 20:24 ` Toke Høiland-Jørgensen
2015-06-25 22:14 ` Dave Taht
2015-06-26 6:58 ` Mikael Abrahamsson
2015-06-26 7:12 ` Mikael Abrahamsson
2015-06-26 9:46 ` Sebastian Moeller
2015-06-26 12:26 ` Mikael Abrahamsson
2015-06-26 14:17 ` Sebastian Moeller
2015-06-26 14:49 ` Mikael Abrahamsson
2015-06-26 16:18 ` Jonathan Morton
2015-06-26 16:31 ` Mikael Abrahamsson
2015-06-26 16:35 ` Jonathan Morton
2015-06-26 17:04 ` Dave Taht
2015-06-26 18:24 ` Dave Taht
2015-06-26 18:38 ` Mikael Abrahamsson
2015-06-26 18:58 ` Dave Taht
2015-06-26 18:59 ` Dave Taht
2015-06-26 19:11 ` Mikael Abrahamsson
2015-06-26 19:13 ` Dave Taht
2015-06-27 5:03 ` Mikael Abrahamsson
2015-06-27 5:18 ` Dave Taht
2015-06-27 5:50 ` Mikael Abrahamsson
2015-06-27 17:59 ` Dave Taht
2015-06-27 18:23 ` Mikael Abrahamsson
2015-06-27 18:52 ` Dave Taht
2015-06-27 23:13 ` Sebastian Moeller
2015-06-28 7:06 ` Mikael Abrahamsson
2015-06-28 8:23 ` Sebastian Moeller [this message]
2015-06-28 10:29 ` Mikael Abrahamsson
2015-06-28 17:04 ` Sebastian Moeller
2015-06-28 17:32 ` Mikael Abrahamsson
2015-06-28 17:58 ` Jonathan Morton
2015-06-28 18:04 ` Dave Taht
2015-06-28 18:55 ` Sebastian Moeller
2015-06-28 19:17 ` Mikael Abrahamsson
2015-06-28 19:24 ` Sebastian Moeller
2015-06-28 20:48 ` Mikael Abrahamsson
2015-06-28 21:23 ` Sebastian Moeller
2015-06-29 4:58 ` Mikael Abrahamsson
2015-06-29 5:11 ` Mikael Abrahamsson
2015-06-29 7:46 ` Sebastian Moeller
2015-06-29 7:54 ` Mikael Abrahamsson
2015-06-29 7:56 ` Sebastian Moeller
2015-06-29 8:10 ` Sebastian Moeller
2015-06-29 8:17 ` Mikael Abrahamsson
2015-06-29 8:24 ` Sebastian Moeller
2015-06-29 7:44 ` Sebastian Moeller
2015-06-29 8:09 ` Mikael Abrahamsson
2015-06-29 8:34 ` Sebastian Moeller
2015-06-29 8:42 ` Sebastian Moeller
2015-06-29 9:12 ` Mikael Abrahamsson
2015-06-29 10:09 ` Toke Høiland-Jørgensen
2015-06-29 13:00 ` Mikael Abrahamsson
2015-06-29 13:34 ` Sebastian Moeller
2015-06-29 13:46 ` dpreed
2015-06-29 16:45 ` Jonathan Morton
2015-06-30 13:58 ` [Cerowrt-devel] Build instructions for regular OpenWRT with Ceropackages Mikael Abrahamsson
2015-06-30 16:20 ` dpreed
2015-06-30 19:58 ` Mikael Abrahamsson
2015-07-01 8:23 ` David Lang
2015-07-01 10:32 ` Mikael Abrahamsson
2015-07-01 11:55 ` Sebastian Moeller
2015-07-01 15:37 ` dpreed
2015-06-29 13:42 ` [Cerowrt-devel] performance numbers from WRT1200AC (Re: Latest build test - new sqm-scripts seem to work; "cake overhead 40" didn't) Sebastian Moeller
2015-06-29 16:44 ` Dave Taht
2015-06-29 18:24 ` Sebastian Moeller
2015-06-29 22:15 ` Mikael Abrahamsson
2015-06-29 22:49 ` Mikael Abrahamsson
2015-06-30 8:00 ` Mikael Abrahamsson
2015-06-30 9:40 ` Mikael Abrahamsson
2015-07-02 15:33 ` Mikael Abrahamsson
2015-07-02 15:39 ` Toke Høiland-Jørgensen
2015-07-02 15:43 ` Mikael Abrahamsson
2015-07-02 15:47 ` Toke Høiland-Jørgensen
2015-07-02 16:06 ` dpreed
2015-07-02 19:12 ` Mikael Abrahamsson
2015-07-07 1:07 ` David Lang
2015-07-02 16:09 ` Rich Brown
2015-07-02 16:12 ` Toke Høiland-Jørgensen
2015-07-03 11:38 ` Mikael Abrahamsson
2015-06-29 6:12 ` Mikael Abrahamsson
2015-06-28 18:48 ` Sebastian Moeller
2015-06-26 16:34 ` Dave Taht
2015-06-26 16:27 ` Sebastian Moeller
2015-06-26 16:36 ` Mikael Abrahamsson
2015-06-26 16:43 ` Dave Taht
2015-06-26 17:01 ` Mikael Abrahamsson
2015-06-23 14:35 ` [Cerowrt-devel] Latest build test - new sqm-scripts seem to work; "cake overhead 40" didn't Jim Reisert AD1C
2015-06-23 14:40 ` Dave Taht
2015-06-19 20:37 ` Sebastian Moeller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://lists.bufferbloat.net/postorius/lists/cerowrt-devel.lists.bufferbloat.net/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8B853F1C-DE5D-4F3D-88CC-CB8DA2D3E8B1@gmx.de \
--to=moeller0@gmx.de \
--cc=cerowrt-devel@lists.bufferbloat.net \
--cc=swmike@swm.pp.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox