Qualcomm Fast Path For LEDE

I have successfully ported Qualcomm OpenSourced Fast Path for LEDEN
Fast Path will work on ALL hardware
You don't need to configure any additional settings for Fast Path as long as modules are loaded successfully it will work
From my testing Fast Path improves Wireless and Wired Throughput
On my WDR4300v1 running at 730MHZ I can achieve Wire Speeds

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

[ 3] local 192.168.1.103 port 48152 connected with 10.1.1.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 113 MBytes 948 Mbits/sec
[ 3] 1.0- 2.0 sec 110 MBytes 920 Mbits/sec
[ 3] 2.0- 3.0 sec 111 MBytes 929 Mbits/sec
[ 3] 3.0- 4.0 sec 109 MBytes 912 Mbits/sec
[ 3] 4.0- 5.0 sec 111 MBytes 929 Mbits/sec
[ 3] 5.0- 6.0 sec 109 MBytes 914 Mbits/sec
[ 3] 6.0- 7.0 sec 109 MBytes 918 Mbits/sec
[ 3] 7.0- 8.0 sec 109 MBytes 911 Mbits/sec
[ 3] 8.0- 9.0 sec 111 MBytes 929 Mbits/sec
[ 3] 9.0-10.0 sec 109 MBytes 916 Mbits/sec
[ 3] 0.0-10.0 sec 1100 MBytes 922 Mbits/sec
Done.
MTU=1500

Repository is here

Builds are here

Please note that my build patch does not contain any binaries with the exception of closure javascript compiler to optimize javascript as well as yuicompressor to minify Cascading Style Sheets.

I do not own any rights to any of the above binaries.

All my patches are open and can be inspected with any text editor and anyone capable of reading them.

I test my patches with iperf to benchmark performance.

I own the following router and test for them any other routers builds are not tested.
WR1043ND RAM upgrade to 64M CPU OCed to 430MHZ
WDR4300v1 CPU OCed to 730 MHZ
WDR4900v1 stock until I figured out how to OC it

There are patches,kernel config from LEDE which I determine that it kills performance on certain architecture which is why they are removed

It is also built with security by using Strong SSP options and PIE.

If you feel for some reason my patches has issues feel free to adopt them to your own.

The images are patched to obtain vanilla LEDE packages from LEDE software repository by default.

The only reason why you cannot install kmods is that LEDE hashes their kernel config therefore since I changed the config the hash changes so it becomes incompatible
But since these are configs that kills performance I cannot agree to keeping it.

The images are build with security and performance in mind which is what I want and most people want.

I am also constantly trying to think of ways to optimize the performance as well as to reduce size and my patches are not designed to be persistent, it is meant for cloning, building and deleting and start over so I will use it as it is to test new patches if you happen to clone it and it breaks I am not responsible for bricking your router.

I am not making money from this, I am just sharing it in its entirety like it is in a fully opensource manner with Zero Binary blobs or obfuscation, it is not my full time job.
Anyone who is capable of reading source code and scripts should be able to read and port my patches, if you are not able to do so then too bad.

For those who want the patches on Kernel 4.9 feel free to port it.
I don't really care for kernel version incrementation as with each release the bloat gets bigger and does nothing significant for my router platform.
x86/Enterprise always have the first class seat in the Linux Kernel
As long as the kernel is stable & LTS supported with proper security patches, it is good enough for me.

25 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/