Skip to content

Commit

Permalink
enable hw-offload
Browse files Browse the repository at this point in the history
  • Loading branch information
fanriming committed Jun 29, 2021
1 parent f7cdfd2 commit 2d750cb
Show file tree
Hide file tree
Showing 7 changed files with 23 additions and 12 deletions.
1 change: 1 addition & 0 deletions dist/images/install-pre-1.16.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions dist/images/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 5 additions & 1 deletion pkg/daemon/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand All @@ -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")
Expand Down Expand Up @@ -108,6 +111,7 @@ func ParseFlags() (*Configuration, error) {
NetworkType: *argsNetworkType,
DefaultProviderName: *argsDefaultProviderName,
DefaultInterfaceName: *argsDefaultInterfaceName,
HwOffload: *argHwOffload,
}

if err := config.initKubeClient(); err != nil {
Expand Down
5 changes: 3 additions & 2 deletions pkg/daemon/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion pkg/daemon/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
19 changes: 11 additions & 8 deletions pkg/daemon/ovs.go
Original file line number Diff line number Diff line change
Expand Up @@ -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", "--",
Expand All @@ -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
Expand Down
1 change: 1 addition & 0 deletions yamls/kube-ovn.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ spec:
- --iface=
- --network-type=geneve
- --default-interface-name=
- --hw-offload=false
securityContext:
runAsUser: 0
privileged: true
Expand Down

0 comments on commit 2d750cb

Please sign in to comment.