Commit 2d750cbf authored by 范日明's avatar 范日明
Browse files

enable hw-offload

parent f7cdfd2c
Showing with 23 additions and 12 deletions
+23 -12
......@@ -1638,6 +1638,7 @@ spec:
- --iface=${IFACE}
- --network-type=$NETWORK_TYPE
- --default-interface-name=$VLAN_INTERFACE_NAME
- --hw-offload=$HW_OFFLOAD
securityContext:
runAsUser: 0
privileged: true
......
......@@ -1691,6 +1691,7 @@ spec:
- --iface=${IFACE}
- --network-type=$NETWORK_TYPE
- --default-interface-name=$VLAN_INTERFACE_NAME
- --hw-offload=$HW_OFFLOAD
securityContext:
runAsUser: 0
privileged: true
......
......@@ -5,13 +5,14 @@ import (
"errors"
"flag"
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"net"
"os"
"os/exec"
"regexp"
"strings"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
clientset "github.com/kubeovn/kube-ovn/pkg/client/clientset/versioned"
"github.com/kubeovn/kube-ovn/pkg/util"
"github.com/sirupsen/logrus"
......@@ -43,6 +44,7 @@ type Configuration struct {
NetworkType string
DefaultProviderName string
DefaultInterfaceName string
HwOffload bool
}
// ParseFlags will parse cmd args then init kubeClient and configuration
......@@ -60,6 +62,7 @@ func ParseFlags() (*Configuration, error) {
argNodeLocalDnsIP = pflag.String("node-local-dns-ip", "", "If use nodelocaldns the local dns server ip should be set here, default empty.")
argEncapChecksum = pflag.Bool("encap-checksum", true, "Enable checksum, default: true")
argPprofPort = pflag.Int("pprof-port", 10665, "The port to get profiling data, default: 10665")
argHwOffload = pflag.Bool("hw-offload", false, "Enable hw offload, default: false")
argsNetworkType = pflag.String("network-type", "geneve", "The ovn network type, default: geneve")
argsDefaultProviderName = pflag.String("default-provider-name", "provider", "The vlan or vxlan type default provider interface name, default: provider")
......@@ -108,6 +111,7 @@ func ParseFlags() (*Configuration, error) {
NetworkType: *argsNetworkType,
DefaultProviderName: *argsDefaultProviderName,
DefaultInterfaceName: *argsDefaultInterfaceName,
HwOffload: *argHwOffload,
}
if err := config.initKubeClient(); err != nil {
......
......@@ -610,8 +610,9 @@ func (c *Controller) Run(stopCh <-chan struct{}) {
klog.Info("Started workers")
go wait.Until(c.loopOvn0Check, 5*time.Second, stopCh)
go wait.Until(c.disableTunnelOffload, 5*time.Second, stopCh)
if !c.config.HwOffload {
go wait.Until(c.disableTunnelOffload, 5*time.Second, stopCh)
}
go wait.Until(c.runSubnetWorker, time.Second, stopCh)
go wait.Until(c.runPodWorker, time.Second, stopCh)
go wait.Until(c.runGateway, 3*time.Second, stopCh)
......
......@@ -46,7 +46,7 @@ func InitNodeGateway(config *Configuration) error {
}
ipAddr = util.GetIpAddrWithMask(ip, cidr)
return configureNodeNic(portName, ipAddr, gw, mac, config.MTU)
return configureNodeNic(portName, ipAddr, gw, mac, config.MTU, config.HwOffload)
}
func InitMirror(config *Configuration) error {
......
......@@ -271,7 +271,7 @@ func waitNetworkReady(gateway string) error {
return nil
}
func configureNodeNic(portName, ip, gw string, macAddr net.HardwareAddr, mtu int) error {
func configureNodeNic(portName, ip, gw string, macAddr net.HardwareAddr, mtu int, enableOffload bool) error {
ipStr := util.GetIpWithoutMask(ip)
raw, err := ovs.Exec(ovs.MayExist, "add-port", "br-int", util.NodeNic, "--",
"set", "interface", util.NodeNic, "type=internal", "--",
......@@ -294,16 +294,19 @@ func configureNodeNic(portName, ip, gw string, macAddr net.HardwareAddr, mtu int
if err = netlink.LinkSetTxQLen(hostLink, 1000); err != nil {
return fmt.Errorf("can not set host nic %s qlen %v", util.NodeNic, err)
}
// Double nat may lead kernel udp checksum error, disable offload to prevent this issue
// https://github.com/kubernetes/kubernetes/pull/92035
output, err := exec.Command("ethtool", "-K", "ovn0", "tx", "off").CombinedOutput()
if err != nil {
klog.Errorf("failed to disable checksum offload on ovn0, %v %q", err, output)
return err
if !enableOffload {
// Double nat may lead kernel udp checksum error, disable offload to prevent this issue
// https://github.com/kubernetes/kubernetes/pull/92035
output, err := exec.Command("ethtool", "-K", "ovn0", "tx", "off").CombinedOutput()
if err != nil {
klog.Errorf("failed to disable checksum offload on ovn0, %v %q", err, output)
return err
}
}
// ping ovn0 gw to activate the flow
output, err = ovn0Check(gw)
output, err := ovn0Check(gw)
if err != nil {
klog.Errorf("failed to init ovn0 check, %v, %q", err, output)
return err
......
......@@ -157,6 +157,7 @@ spec:
- --iface=
- --network-type=geneve
- --default-interface-name=
- --hw-offload=false
securityContext:
runAsUser: 0
privileged: true
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment