At the moment, ipq806x routers with the NSS cores activated can already do ingress and egress shaping with no load imposed on the main CPU (i.e. Kraits) cores. It should be able to shape traffic up to line speed (i.e. 1Gbps) without issue.
The only downside is that it has to be done with startup scripts at the moment. We need someone who understand how to change Luci SQM codes to incorporate the changes to make it more user friendly.
The other catch is that the NSS shapers are not really modern. It has fq_codel and htb that could work in tandem to shape and split requests fairly, so it should serve most use cases.
Interesting. @moeller0 is frequently on all the SQM threads - don’t know if linking up the NSS cores with SQM in luci is up his alley.
I’ve enjoyed using ansuel’s master NSS build on my main router. Enjoying getting line rate (940/35). Seeing wifi performance similar to hynman builds so I’ve only kept it to this wired router.
I’m going to test your master build this weekend and see how offloading is working for wifi to see if that is a good setup for my APs.
I have no r7800 at my disposal so I will not be able to test anything at all and hence would typically avoid making changes, but what exactly is missing in the GUI, maybe somebody could explain the details here?
You need the QSDK 11 NSS firmware if you want to test my master branch codes. @Ansuel QSDK 10 branch has the feature for the NSS shaper and also the WiFi offload as well, so there's no difference between both repos as far as feature is concerned.
@moeller0 the 'tc' commands are different when invoking the NSS shapers. Need to target the NSS specific shapers when configuring SQM via Luci instead of the regular in-built shapers, and also take care of the parameters quirks for the NSS shapres. Also, no cake support in the NSS shapers.
I forgot to add that there are quirks in which ethernet device to target for ingress shaping. The solution is also only for ethernet device only at the moment, but it should be enough for most real world use cases.
Just need a build environment to compile openWRT images.
You can pull from the git that you want to try.
Example:
create a directory (folder) for your build, run this command after you change in to that new directory using one of the git directories (quarky or Ansuel with the NSS changes):
compile an OpenWRT image with the standard commands. During make menuconfig add the three base packages in my post above (plus qdisc and any other optional packages you desire, luci, etc)
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
make
now you have a sysupgrade .bin file in the new bin folder.
The ansuel and quarky git repos already have everything you need to activate the NSS cores. During the make menuconfig you need to select at a minimum these three packages to get NSS acceleration:
You mean that's all that needs to be done? This is dead simple, and as moeller0 pointed out another script plus little mods if needed in the luci sqm or qos page should do. In fact once you put the script under /usr/lib/sqm it should show up in the drop down as queuing disciplines. The logic for it is not hardcoded. just look at the lua file.
Is this planned for eventual submission to the official OpenWRT git repository, or going (e.g. for licensing or whatever other reasons) to stay as a perpetual fork?
You need to change the source interface first before bringing up the 'nssifb' interface. Changing it after the interface is up will have no effect. You need to bring down the interface and bring it back up to have the changes take effect.