From 32f4a0ef0e989726c5ed0138eba9c113a462d047 Mon Sep 17 00:00:00 2001 From: LiZhenCheng9527 Date: Tue, 16 Apr 2024 12:07:18 +0800 Subject: [PATCH 1/3] automatically mount cgroup2 at kmesh startup Signed-off-by: LiZhenCheng9527 --- pkg/bpf/bpf.go | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/pkg/bpf/bpf.go b/pkg/bpf/bpf.go index d7a76910..44174acd 100644 --- a/pkg/bpf/bpf.go +++ b/pkg/bpf/bpf.go @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Kmesh Authors. + * Copyright 2024 The Kmesh Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,16 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. - * Author: LemmyHuang - * Create: 2021-10-09 */ package bpf import ( "fmt" + "os" "os/exec" "strings" + "syscall" "github.com/cilium/ebpf" "github.com/cilium/ebpf/rlimit" @@ -89,6 +89,10 @@ func Start() error { return err } + if err = mountCgroup2(&config); err != nil { + return err + } + if config.EnableKmesh { if err = StartKmesh(); err != nil { return err @@ -142,3 +146,17 @@ func Stop() { } } } + +func mountCgroup2(cfg *Config) error { + if err := os.MkdirAll(cfg.Cgroup2Path, 0755); err != nil { + log.Errorf("failed to create dir %s: %v", cfg.Cgroup2Path, err) + return err + } + + if err := syscall.Mount("none", cfg.Cgroup2Path, "cgroup2", 0, ""); err != nil { + log.Errorf("failed to mount %s: %v", cfg.Cgroup2Path, err) + return err + } + + return nil +} From 93e7d78e5e3997523729fbe4403650d6bcd1d3ed Mon Sep 17 00:00:00 2001 From: LiZhenCheng9527 Date: Tue, 16 Apr 2024 16:01:47 +0800 Subject: [PATCH 2/3] Added check to make sure kmesh already exists before mount cgroup2 Signed-off-by: LiZhenCheng9527 --- pkg/bpf/bpf.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/pkg/bpf/bpf.go b/pkg/bpf/bpf.go index 44174acd..e1b3aef3 100644 --- a/pkg/bpf/bpf.go +++ b/pkg/bpf/bpf.go @@ -89,6 +89,10 @@ func Start() error { return err } + if err = checkKmeshMod(); err != nil { + return err + } + if err = mountCgroup2(&config); err != nil { return err } @@ -160,3 +164,22 @@ func mountCgroup2(cfg *Config) error { return nil } + +func checkKmeshMod() error { + output, err := exec.Command("lsmod", "|", "grep", "kmesh").Output() + if err != nil { + return err + } + + if len(output) != 0 { + if err := exec.Command("rmmod", "kmesh").Run(); err != nil { + return err + } + } + + if err := exec.Command("depmod", "-a").Run(); err != nil { + return err + } + + return exec.Command("modprobe", "kmesh").Run() +} From 18b0723c6d8bf17a9391cf247ee03020527f5ad2 Mon Sep 17 00:00:00 2001 From: LiZhenCheng9527 Date: Tue, 16 Apr 2024 21:16:48 +0800 Subject: [PATCH 3/3] add cleanupMountPath. It will work when mount cgroup failed Signed-off-by: LiZhenCheng9527 --- pkg/bpf/bpf.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/bpf/bpf.go b/pkg/bpf/bpf.go index e1b3aef3..ac822406 100644 --- a/pkg/bpf/bpf.go +++ b/pkg/bpf/bpf.go @@ -158,6 +158,7 @@ func mountCgroup2(cfg *Config) error { } if err := syscall.Mount("none", cfg.Cgroup2Path, "cgroup2", 0, ""); err != nil { + cleanupMountPath() log.Errorf("failed to mount %s: %v", cfg.Cgroup2Path, err) return err } @@ -183,3 +184,13 @@ func checkKmeshMod() error { return exec.Command("modprobe", "kmesh").Run() } + +func cleanupMountPath() { + if err := syscall.Unmount("/mnt/kmesh_cgroup2", 0); err != nil { + log.Errorf("unmount /mnt/kmesh_cgroup2 error: ", err) + } + + if err := os.RemoveAll("/mnt/kmesh_cgroup2"); err != nil { + log.Errorf("remove /mnt/kmesh_cgroup2 error: ", err) + } +}