Disable copybreak master
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 7 May 2020 19:30:03 +0000 (20:30 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 7 May 2020 19:30:03 +0000 (20:30 +0100)
Some network interface drivers employ a scheme known as "copybreak"
in which they make a copy of a received skb if the size of the
buffer is below a particular threshold, then return the original
receive skb back to the pool.  Since these drivers initially
allocate a buffer size that is larger than the largest possible
packet, this scheme returns that large buffer to the pool quickly,
and uses a smaller one.

The primary benefit of copybreak is better memory utilization.  On
systems where the data is ultimately going to be copied out to user
space, the copybreak scheme is "low cost" because it has the side
benefit of priming the cache for that later copy.  But on a router
that only touches the header fields of a received packet, the cost
can be relatively higher.  And on modern systems the memory savings
is rarely an important consideration.

Some of the drivers that employ copybreak make the feature
configurable via a module parameter.  This file disables copybreak
in some of those drivers.  Generally this results in an improvement
in forwarding performance for traffic using these drivers.

Fixes: #11930
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
Makefile.am
config/vpn/security-policies/performance
config/vpn/security-policies/system
src/functions/functions.vpn-security-policies
src/modprobe.d/no-copybreak.conf [new file with mode: 0644]

index a5ea123..4aa7314 100644 (file)
@@ -31,6 +31,7 @@ AUTOMAKE_OPTIONS = color-tests
 configdir        = $(sysconfdir)/network
 bashcompletiondir= $(datadir)/bash-completion/completions
 libexecdir       = $(prefix)/lib
 configdir        = $(sysconfdir)/network
 bashcompletiondir= $(datadir)/bash-completion/completions
 libexecdir       = $(prefix)/lib
+modprobedir      = $(prefix)/lib/modprobe.d
 pkgconfigdir     = $(libdir)/pkgconfig
 pppdir           = $(sysconfdir)/ppp
 systemconfigdir  = $(datadir)/network
 pkgconfigdir     = $(libdir)/pkgconfig
 pppdir           = $(sysconfdir)/ppp
 systemconfigdir  = $(datadir)/network
@@ -396,6 +397,11 @@ dist_sysctl_DATA = \
 
 # ------------------------------------------------------------------------------
 
 
 # ------------------------------------------------------------------------------
 
+dist_modprobe_DATA = \
+       src/modprobe.d/no-copybreak.conf
+
+# ------------------------------------------------------------------------------
+
 dist_bashcompletion_SCRIPTS = \
        src/bash-completion/network
 
 dist_bashcompletion_SCRIPTS = \
        src/bash-completion/network
 
index b226d8d..209f43d 100644 (file)
@@ -1,6 +1,6 @@
 CIPHERS="CHACHA20-POLY1305 AES128-GCM128"
 COMPRESSION="off"
 CIPHERS="CHACHA20-POLY1305 AES128-GCM128"
 COMPRESSION="off"
-GROUP_TYPES="ECP521 ECP384 ECP256 ECP224 ECP192 CURVE25519"
+GROUP_TYPES="CURVE25519 CURVE448 ECP521 ECP384 ECP256 ECP224 ECP192"
 INTEGRITIES="SHA256"
 PSEUDO_RANDOM_FUNCTIONS="SHA256"
 KEY_EXCHANGE="ikev2"
 INTEGRITIES="SHA256"
 PSEUDO_RANDOM_FUNCTIONS="SHA256"
 KEY_EXCHANGE="ikev2"
index db30e69..6ceb0c4 100644 (file)
@@ -1,7 +1,7 @@
 KEY_EXCHANGE="ikev2"
 CIPHERS="CHACHA20-POLY1305 AES256-GCM128 AES256-CBC AES192-GCM128 AES192-CBC AES128-GCM128 AES128-CBC"
 INTEGRITIES="SHA512 SHA384 SHA256"
 KEY_EXCHANGE="ikev2"
 CIPHERS="CHACHA20-POLY1305 AES256-GCM128 AES256-CBC AES192-GCM128 AES192-CBC AES128-GCM128 AES128-CBC"
 INTEGRITIES="SHA512 SHA384 SHA256"
-GROUP_TYPES="CURVE25519 ECP521 ECP384 ECP256 ECP224 ECP192 MODP8192 MODP6144 MODP4096 MODP2048"
+GROUP_TYPES="CURVE25519 CURVE448 ECP521 ECP384 ECP256 ECP224 ECP192 MODP8192 MODP6144 MODP4096 MODP2048"
 PSEUDO_RANDOM_FUNCTIONS="SHA512 SHA384 SHA256"
 LIFETIME="28800"
 PFS="on"
 PSEUDO_RANDOM_FUNCTIONS="SHA512 SHA384 SHA256"
 LIFETIME="28800"
 PFS="on"
index d1d720b..138e821 100644 (file)
@@ -263,6 +263,9 @@ declare -A VPN_SUPPORTED_GROUP_TYPES=(
 
        # Curve25519
        [CURVE25519]="256 bit Elliptic Curve 25519"
 
        # Curve25519
        [CURVE25519]="256 bit Elliptic Curve 25519"
+
+       # Curve448
+       [CURVE448]="224 bit Elliptic Curve 448"
 )
 
 declare -A GROUP_TYPE_TO_STRONGSWAN=(
 )
 
 declare -A GROUP_TYPE_TO_STRONGSWAN=(
@@ -289,8 +292,9 @@ declare -A GROUP_TYPE_TO_STRONGSWAN=(
        [ECP384BP]="ecp384bp"
        [ECP512BP]="ecp512bp"
 
        [ECP384BP]="ecp384bp"
        [ECP512BP]="ecp512bp"
 
-       # Curve25519
+       # More Curves
        [CURVE25519]="curve25519"
        [CURVE25519]="curve25519"
+       [CURVE448]="curve448"
 )
 
 cli_vpn_security_policies() {
 )
 
 cli_vpn_security_policies() {
diff --git a/src/modprobe.d/no-copybreak.conf b/src/modprobe.d/no-copybreak.conf
new file mode 100644 (file)
index 0000000..97ea886
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# Some network interface drivers employ a scheme known as "copybreak"
+# in which they make a copy of a received skb if the size of the
+# buffer is below a particular threshold, then return the original
+# receive skb back to the pool.  Since these drivers initially
+# allocate a buffer size that is larger than the largest possible
+# packet, this scheme returns that large buffer to the pool quickly,
+# and uses a smaller one. 
+# 
+# The primary benefit of copybreak is better memory utilization.  On
+# systems where the data is ultimately going to be copied out to user
+# space, the copybreak scheme is "low cost" because it has the side
+# benefit of priming the cache for that later copy.  But on a router
+# that only touches the header fields of a received packet, the cost
+# can be relatively higher.  And on modern systems the memory savings
+# is rarely an important consideration.
+# 
+# Some of the drivers that employ copybreak make the feature
+# configurable via a module parameter.  This file disables copybreak
+# in some of those drivers.  Generally this results in an improvement
+# in forwarding performance for traffic using these drivers.
+#
+
+options 3c515 rx_copybreak=0
+options 3c59x rx_copybreak=0
+options bcm63xx copybreak=0
+options cxgb copybreak=0
+options e1000 copybreak=0
+options e1000e copybreak=0
+options epic100 rx_copybreak=0
+options fealnx rx_copybreak=0
+options hamachi rx_copybreak=0
+options ixgb copybreak=0
+options natsemi rx_copybreak=0
+options pch_gbe copybreak=0
+options pcnet32 rx_copybreak=0
+options sis190 rx_copybreak=0
+options sky2 copybreak=0
+options starfire rx_copybreak=0
+options sundance rx_copybreak=0
+options typhoon rx_copybreak=0
+options via-rhine rx_copybreak=0
+options via-velocity rx_copybreak=0
+options yellowfin rx_copybreak=0