Qualcomm Fast Path For LEDE

Repository based on openwrt snapshot is here
gwlim/openwrt-optimized-builds: optimized openwrt builds on github

Images are built by github runners with all kmod included by default on a schedule
If you want an image for your specific router you can request and I can add a workflow build profile

26 Likes

On a TL-WR1043NDv1 mips24kc Router running at 430MHZ
This is the performance

Client connecting to 10.1.1.2, TCP port 5001
TCP window size: 0.22 MByte (default)

[ 5] local 192.168.1.103 port 49910 connected with 10.1.1.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 5] 0.0- 1.0 sec 81.5 MBytes 684 Mbits/sec
[ 5] 1.0- 2.0 sec 78.4 MBytes 657 Mbits/sec
[ 5] 2.0- 3.0 sec 74.5 MBytes 625 Mbits/sec
[ 5] 3.0- 4.0 sec 78.1 MBytes 655 Mbits/sec
[ 5] 4.0- 5.0 sec 71.9 MBytes 603 Mbits/sec
[ 5] 5.0- 6.0 sec 77.4 MBytes 649 Mbits/sec
[ 5] 6.0- 7.0 sec 74.4 MBytes 624 Mbits/sec
[ 5] 7.0- 8.0 sec 76.8 MBytes 644 Mbits/sec
[ 5] 8.0- 9.0 sec 72.6 MBytes 609 Mbits/sec
[ 5] 9.0-10.0 sec 78.6 MBytes 660 Mbits/sec
[ 5] 0.0-10.0 sec 764 MBytes 640 Mbits/sec
[ 5] MSS size 1448 bytes (MTU 1500 bytes, ethernet)

On Wireless due to lower cpu consumption by fast path
Wireless Throughput on this mips24kc machine also improved
Iperf thread stopped [CAUSE=Stream closed]
iperf -c 10.1.1.2 -P 1 -i 1 -p 5001 -f m -t 10 -T 1

Client connecting to 10.1.1.2, TCP port 5001
TCP window size: 0.08 MByte (default)

[ 3] local 192.168.1.130 port 55582 connected with 10.1.1.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 13.6 MBytes 114 Mbits/sec
[ 3] 1.0- 2.0 sec 16.9 MBytes 142 Mbits/sec
[ 3] 2.0- 3.0 sec 18.0 MBytes 151 Mbits/sec
[ 3] 3.0- 4.0 sec 18.9 MBytes 158 Mbits/sec
[ 3] 4.0- 5.0 sec 17.4 MBytes 146 Mbits/sec
[ 3] 5.0- 6.0 sec 19.2 MBytes 161 Mbits/sec
[ 3] 6.0- 7.0 sec 19.1 MBytes 160 Mbits/sec
[ 3] 7.0- 8.0 sec 19.0 MBytes 159 Mbits/sec
[ 3] 8.0- 9.0 sec 19.2 MBytes 161 Mbits/sec
[ 3] 9.0-10.0 sec 13.9 MBytes 116 Mbits/sec
[ 3] 0.0-10.0 sec 175 MBytes 147 Mbits/sec
Done.

3 Likes

Is the patch dependent on mips24k(c)? https://lede-project.org/docs/instructionset/mips_24kc

1 Like

No Fast Path is optimizing Linux Routing Network Stack.
Totally Architecture independent
I have it working on WDR4900v1 (mpc8548), WDR4300 (mip74kc) and WR1043ND (mips24kc)

1 Like

This is huge

How do I implement in my WRT3200ACM

1 Like

Check my commits, copy the patches make menuconfig, select the modules and build
I don't have a patch build optimizing for that architecture

Btw if you guys need me to build for your Router I can do that but only for MIPS and PowerPC MPC Architecture since my scripts is basically a fast auto patcher and builder so I can do it fast.
For the other architecture I have to recreate a lot of stuff and I am too lazy to do that.

2 Likes

Two of the most popular routers are Archer C7V2 and DLink DIR860B1. Can this method work on those two platforms? Can this be merged into LEDE 17.0.1.3?

1 Like

Archer C7V2 is pretty straightforward but DLink is an MIPS multithreaded CPU.
It is possible to further optimize it with a lot of testing but I will just do a standard build becos using untested optimization might create a firmware that might not boot.

1 Like

Does this mean a standard non-optimized build will work on the DIR-860L? Or will this require more work? Awesome work by the way, this is seriously awesome stuff.

@Bartvz This might be a nice inclusion for your DIR-860L builds if we can get it to work :wink:

1 Like

So what's the catch? Does this only apply to unclassified traffic like HWNAT implementations (no QOS)?

Is there anywhere I can read about the implementation? Google showed me a lot of results for fast charging but no fast pathing.

1 Like

Can you build for my netgear wndr4300v1? I always tried to download code from github but shitty Chinese network, I can barely download anything. Thank you.

i was trying to build it for wndr4300v1 as well to test, since it is mips_24kc but im getting stuck here.

make[3]: Entering directory '/boop/Build/lede/package/qca/shortcut-fe'
fatal: 'master' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
make -C "/boop/Build/lede/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_nand/linux-4.4.71" CROSS_COMPILE="mips-openwrt-linux-musl-" ARCH="mips" SUBDIRS="/boop/Build/lede/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_nand/shortcut-fe-g8b1844e/shortcut-fe" EXTRA_CFLAGS="-DSFE_SUPPORT_IPV6" SFE_SUPPORT_IPV6=1 modules
make[4]: Entering directory '/boop/Build/lede/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_nand/linux-4.4.71'
fatal: 'master' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
/boop/Build/lede/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_nand/shortcut-fe-g8b1844e/shortcut-fe/Makefile:89: *** DESCRIPTION:= is obsolete, use Package/PKG_NAME/description.  Stop.

line 89 for that file is $(eval $(call KernelPackage,shortcut-fe)) so it confuses me.
i think it's pulling it from somewhere or failing to pull it properly.

it shows up under menuconfig it just fails to compile and i dont understand why so.. :confounded:
i also want it built for wndr3700v4 if someone could provide the steps that would be great :slight_smile:
i only need the steps to fix the makefile so it will compile correctly unless it can't compile on these without patch fixes (i doubt this?)

EDIT: i had kmod-fast-classifier, kmod-shortcut-fe, and kmod-shortcut-fe-cm selected in menuconfig also btw

You did not take all my patches and use the script.
My script download the local development to force and override the original make file to use a local source location.
You can use mips74kc repository directly. It is optimized for 74kc.
The reason why there is a 24kc tag is because LEDE upstream uses 24kc tagging for all the package!
If you run my firmware you can download and install packages directly from LEDE

1 Like

I can't see wndr4300v1 in the LEDE build menu.
Is it actually officially supported?

set subtarget to generic nand, then target wndr4300v1

Ok got it.
FYI because I optimize it heavily for that specific architecture so make sure the CPU is mip74kc because I build with march=mips74kc SO if your cpu is mips32r2 but not mips74kc it will bootloop.
Part of my optimization also disable ALL older ISAs like mips32r1 code.

wndr3700v4 and wndr4300v1 are mips24kc, so i was using https://github.com/gwlim/mips24k-ar71xx-lede-patch/