An opensource OpenWrt variant for mainland China users.
Go to file
Kevin Darbyshire-Bryant 445b8a7f52 kernel: sch_cake: use skb hash improve wireguard compatibility
While the other fq-based qdiscs take advantage of skb->hash and doesn't
recompute it if it is already set, sch_cake does not.

This was a deliberate choice because sch_cake hashes various parts of the
packet header to support its advanced flow isolation modes. However,
foregoing the use of skb->hash entirely loses a few important benefits:

- When skb->hash is set by hardware, a few CPU cycles can be saved by not
  hashing again in software.

- Tunnel encapsulations will generally preserve the value of skb->hash from
  before the encapsulation, which allows flow-based qdiscs to distinguish
  between flows even though the outer packet header no longer has flow
  information.

It turns out that we can preserve these desirable properties in many cases,
while still supporting the advanced flow isolation properties of sch_cake.
This patch does so by reusing the skb->hash value as the flow_hash part of
the hashing procedure in cake_hash() only in the following conditions:

- If the skb->hash is marked as covering the flow headers (skb->l4_hash is
  set)

AND

- NAT header rewriting is either disabled, or did not change any values
  used for hashing. The latter is important to match local-origin packets
  such as those of a tunnel endpoint.

The immediate motivation for fixing this was the recent patch to WireGuard
to preserve the skb->hash on encapsulation. As such, this is also what I
tested against; with this patch, added latency under load for competing
flows drops from ~8 ms to sub-1ms on an RRUL test over a WireGuard tunnel
going through a virtual link shaped to 1Gbps using sch_cake. This matches
the results we saw with a similar setup using sch_fq_codel when testing the
WireGuard patch.

Fixes: 046f6fd5daef ("sched: Add Common Applications Kept Enhanced (cake) qdisc")
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
2020-06-06 12:18:14 +08:00
config target: make TESTING_KERNEL selectable 2020-04-14 23:56:07 +08:00
include Merge Mainline 2020-06-04 18:38:04 +08:00
package mvebu: rename Linksys devices based on their common names 2020-06-06 12:16:41 +08:00
scripts scripts: support Sercomm load tags 2020-06-03 11:42:15 +08:00
target kernel: sch_cake: use skb hash improve wireguard compatibility 2020-06-06 12:18:14 +08:00
toolchain musl: restore lock skipping for mostly-singlethreaded programs, and related patches 2020-05-30 18:19:59 +08:00
tools Merge Mainline 2020-06-04 18:38:04 +08:00
.gitattributes fix permisson 2019-08-16 15:09:42 +08:00
.gitignore gitignore: ignore patches in root directory 2020-02-25 15:39:25 +08:00
BSDmakefile packages: apply usign padding workarounds to package indexes if needed 2019-08-16 14:48:02 +08:00
Config.in packages: apply usign padding workarounds to package indexes if needed 2019-08-16 14:48:02 +08:00
CONTRIBUTED.md Update CONTRIBUTED.md 2020-04-21 12:15:21 +08:00
feeds.conf.default update feeds.conf.default 2020-04-16 12:40:07 +08:00
LICENSE packages: apply usign padding workarounds to package indexes if needed 2019-08-16 14:48:02 +08:00
Makefile build: fix host menu config targets using ncurses 2020-05-23 20:15:09 +08:00
README.md Merge Mainline 2020-06-04 18:38:04 +08:00
rules.mk target/imagebuilder: use multi-thread support for xz compression 2020-03-27 18:40:33 +08:00

PROJECT OPENWRT

The Source Code of OpenWrt-Lean Modified by CTCGFW

Welcome to our Telegram Group: @ctcgfw_openwrt_discuss.


How to make it

Minimum requirements

Linux with case sensitive
2G DDR2 RAM
2 CPU Cores (AMD64, 1.4Ghz)
25G disk space left
Has access to both ChinaNet & Internet

Install the necessary packages (for Ubuntu user)

sudo apt-get update -y
sudo apt-get full-upgrade -y
sudo apt-get install -y build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib g++-multilib p7zip p7zip-full msmtp libssl-dev texinfo libreadline-dev libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint ccache curl wget vim nano python python3 python-pip python3-pip python-ply python3-ply haveged lrzsz device-tree-compiler scons antlr3 gperf intltool

For mainland China & Ubuntu(16.04+) user, you may run the following command to setup quickly:

sudo bash -c "bash <(curl -s https://build-scripts.project-openwrt.eu.org/init_build_environment.sh)"

Clone the source

git clone -b 18.06-kernel5.4 --single-branch https://github.com/project-openwrt/openwrt && cd openwrt
./scripts/feeds update -a && ./scripts/feeds install -a

For developer, you may use openwrt-18.06-dev branch instead of openwrt-18.06.

Configure your firmware

make menuconfig

Make it

make -j1 V=s

Tips

You'd better not use root to make it, or you may be not able to use.
Default login address: 192.168.1.1, username is root and password is password.

Contributed

See CONTRIBUTED.md.

License

GNU General Public License v3.0.