mirror of
https://github.com/jkstack/libagent.git
synced 2025-12-24 12:11:57 +08:00
cgroups库升级到v3
This commit is contained in:
4
go.mod
4
go.mod
@@ -6,7 +6,7 @@ replace github.com/kardianos/service => github.com/lwch/service v1.2.1-1
|
||||
|
||||
require (
|
||||
github.com/btcsuite/winsvc v1.0.0
|
||||
github.com/containerd/cgroups v1.1.0
|
||||
github.com/containerd/cgroups/v3 v3.0.1
|
||||
github.com/dustin/go-humanize v1.0.1
|
||||
github.com/gorilla/websocket v1.5.0
|
||||
github.com/jkstack/anet v0.0.0-20230206080421-e4bd2e304c2e
|
||||
@@ -23,7 +23,6 @@ require (
|
||||
github.com/docker/go-units v0.5.0 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/godbus/dbus/v5 v5.1.0 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
|
||||
github.com/sirupsen/logrus v1.9.0 // indirect
|
||||
@@ -31,5 +30,6 @@ require (
|
||||
github.com/tklauser/numcpus v0.6.0 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||
golang.org/x/sys v0.5.0 // indirect
|
||||
google.golang.org/protobuf v1.27.1 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
39
go.sum
39
go.sum
@@ -2,8 +2,8 @@ github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk
|
||||
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
|
||||
github.com/cilium/ebpf v0.10.0 h1:nk5HPMeoBXtOzbkZBWym+ZWq1GIiHUsBFXxwewXAHLQ=
|
||||
github.com/cilium/ebpf v0.10.0/go.mod h1:DPiVdY/kT534dgc9ERmvP8mWA+9gvwgKfRvk4nNWnoE=
|
||||
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
|
||||
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
|
||||
github.com/containerd/cgroups/v3 v3.0.1 h1:4hfGvu8rfGIwVIDd+nLzn/B9ZXx4BcCjzt5ToenJRaE=
|
||||
github.com/containerd/cgroups/v3 v3.0.1/go.mod h1:/vtwk1VXrtoa5AaZLkypuOJgA/6DyPMZHJPGQNtlHnw=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
@@ -19,8 +19,8 @@ github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiU
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
|
||||
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
@@ -30,8 +30,6 @@ github.com/jkstack/anet v0.0.0-20230206080421-e4bd2e304c2e h1:wMQuhQkz1v2xmhTi1T
|
||||
github.com/jkstack/anet v0.0.0-20230206080421-e4bd2e304c2e/go.mod h1:L9J4lHwDxTsCPX5MNaVa/0UG36JIiDWIJxlp3jmCQxQ=
|
||||
github.com/jkstack/jkframe v1.2.2 h1:JKeb7Dg0HpyBIap4ZZ88nloojR+WvPFYy1V1jh67p10=
|
||||
github.com/jkstack/jkframe v1.2.2/go.mod h1:9f/mU26CFA4eBx/Zp8EZtuZxTS+4zokiO7yhuMl2zTA=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
|
||||
@@ -65,27 +63,10 @@ github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+Kd
|
||||
github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
|
||||
github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms=
|
||||
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
|
||||
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
@@ -93,16 +74,10 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
|
||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
package limit
|
||||
|
||||
import "github.com/containerd/cgroups"
|
||||
import "github.com/containerd/cgroups/v3"
|
||||
|
||||
// Do set cgroups limit
|
||||
func (cfg *Configure) Do(agentName string) {
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/containerd/cgroups"
|
||||
"github.com/containerd/cgroups/v3/cgroup1"
|
||||
"github.com/dustin/go-humanize"
|
||||
"github.com/jkstack/jkframe/logging"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
@@ -20,7 +20,7 @@ func (cfg *Configure) doV1(agentName string) {
|
||||
}
|
||||
logging.Info("use cgroups_v1")
|
||||
dir := "/jkstack/agent/" + agentName
|
||||
group, err := cgroups.New(cgroups.V1, cgroups.StaticPath(dir), &specs.LinuxResources{})
|
||||
group, err := cgroup1.New(cgroup1.StaticPath(dir), &specs.LinuxResources{})
|
||||
if err != nil {
|
||||
logging.Warning("can not create cgroup %s: %v", dir, err)
|
||||
return
|
||||
@@ -28,7 +28,7 @@ func (cfg *Configure) doV1(agentName string) {
|
||||
limitCPUV1(group, cfg.CPUQuota)
|
||||
limitMemoryV1(group, int64(cfg.Memory))
|
||||
limitDiskV1(group, cfg.Disks)
|
||||
err = group.Add(cgroups.Process{
|
||||
err = group.Add(cgroup1.Process{
|
||||
Pid: os.Getpid(),
|
||||
})
|
||||
if err != nil {
|
||||
@@ -50,7 +50,7 @@ func wantCGroup(cfg *Configure) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func limitCPUV1(group cgroups.Cgroup, limit int64) {
|
||||
func limitCPUV1(group cgroup1.Cgroup, limit int64) {
|
||||
quota := limit * 1000
|
||||
err := group.Update(&specs.LinuxResources{
|
||||
CPU: &specs.LinuxCPU{
|
||||
@@ -64,7 +64,7 @@ func limitCPUV1(group cgroups.Cgroup, limit int64) {
|
||||
logging.Info("set cpu_quota to %d%%", limit)
|
||||
}
|
||||
|
||||
func limitMemoryV1(group cgroups.Cgroup, limit int64) {
|
||||
func limitMemoryV1(group cgroup1.Cgroup, limit int64) {
|
||||
err := group.Update(&specs.LinuxResources{
|
||||
Memory: &specs.LinuxMemory{
|
||||
Limit: &limit,
|
||||
@@ -78,7 +78,7 @@ func limitMemoryV1(group cgroups.Cgroup, limit int64) {
|
||||
logging.Info("set memory_limit to %s", humanize.IBytes(uint64(limit)))
|
||||
}
|
||||
|
||||
func limitDiskV1(group cgroups.Cgroup, limits diskLimits) {
|
||||
func limitDiskV1(group cgroup1.Cgroup, limits diskLimits) {
|
||||
var block specs.LinuxBlockIO
|
||||
for _, disk := range limits {
|
||||
write := func(value uint64, target []specs.LinuxThrottleDevice) []specs.LinuxThrottleDevice {
|
||||
|
||||
@@ -6,7 +6,7 @@ package limit
|
||||
import (
|
||||
"os"
|
||||
|
||||
v2 "github.com/containerd/cgroups/v2"
|
||||
"github.com/containerd/cgroups/v3/cgroup2"
|
||||
"github.com/dustin/go-humanize"
|
||||
"github.com/jkstack/jkframe/logging"
|
||||
)
|
||||
@@ -16,7 +16,7 @@ func (cfg *Configure) doV2(agentName string) {
|
||||
return
|
||||
}
|
||||
logging.Info("use cgroups_v2")
|
||||
group, err := v2.NewSystemd("/", agentName+".slice", -1, &v2.Resources{})
|
||||
group, err := cgroup2.NewSystemd("/", agentName+".slice", -1, &cgroup2.Resources{})
|
||||
if err != nil {
|
||||
logging.Warning("can not create cgroup: %v", err)
|
||||
return
|
||||
@@ -31,12 +31,12 @@ func (cfg *Configure) doV2(agentName string) {
|
||||
}
|
||||
}
|
||||
|
||||
func limitCPUV2(group *v2.Manager, limit int64) {
|
||||
func limitCPUV2(group *cgroup2.Manager, limit int64) {
|
||||
quota := limit * 1000
|
||||
period := uint64(1000000)
|
||||
err := group.Update(&v2.Resources{
|
||||
CPU: &v2.CPU{
|
||||
Max: v2.NewCPUMax("a, &period),
|
||||
err := group.Update(&cgroup2.Resources{
|
||||
CPU: &cgroup2.CPU{
|
||||
Max: cgroup2.NewCPUMax("a, &period),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
@@ -46,9 +46,9 @@ func limitCPUV2(group *v2.Manager, limit int64) {
|
||||
logging.Info("set cpu_quota to %d%%", limit)
|
||||
}
|
||||
|
||||
func limitMemoryV2(group *v2.Manager, limit int64) {
|
||||
err := group.Update(&v2.Resources{
|
||||
Memory: &v2.Memory{
|
||||
func limitMemoryV2(group *cgroup2.Manager, limit int64) {
|
||||
err := group.Update(&cgroup2.Resources{
|
||||
Memory: &cgroup2.Memory{
|
||||
Max: &limit,
|
||||
},
|
||||
})
|
||||
@@ -60,12 +60,12 @@ func limitMemoryV2(group *v2.Manager, limit int64) {
|
||||
logging.Info("set memory_limit to %s", humanize.IBytes(uint64(limit)))
|
||||
}
|
||||
|
||||
func limitDiskV2(group *v2.Manager, limits diskLimits) {
|
||||
var io v2.IO
|
||||
func limitDiskV2(group *cgroup2.Manager, limits diskLimits) {
|
||||
var io cgroup2.IO
|
||||
for _, disk := range limits {
|
||||
write := func(t v2.IOType, value uint64) {
|
||||
write := func(t cgroup2.IOType, value uint64) {
|
||||
major, minor := parseDev(disk.Dev)
|
||||
io.Max = append(io.Max, v2.Entry{
|
||||
io.Max = append(io.Max, cgroup2.Entry{
|
||||
Type: t,
|
||||
Major: major,
|
||||
Minor: minor,
|
||||
@@ -73,27 +73,27 @@ func limitDiskV2(group *v2.Manager, limits diskLimits) {
|
||||
})
|
||||
}
|
||||
if disk.ReadBytes > 0 {
|
||||
write(v2.ReadBPS, disk.ReadBytes.Bytes())
|
||||
write(cgroup2.ReadBPS, disk.ReadBytes.Bytes())
|
||||
logging.Info(" - set read_bytes limit by dev [%s]: %s",
|
||||
disk.Dev, disk.ReadBytes.String())
|
||||
}
|
||||
if disk.WriteBytes > 0 {
|
||||
write(v2.WriteBPS, disk.WriteBytes.Bytes())
|
||||
write(cgroup2.WriteBPS, disk.WriteBytes.Bytes())
|
||||
logging.Info(" - set write_bytes limit by dev [%s]: %s",
|
||||
disk.Dev, disk.WriteBytes.Bytes())
|
||||
}
|
||||
if disk.ReadIOPS > 0 {
|
||||
write(v2.ReadIOPS, disk.ReadIOPS)
|
||||
write(cgroup2.ReadIOPS, disk.ReadIOPS)
|
||||
logging.Info(" - set read_iops limit by dev [%s]: %s",
|
||||
disk.Dev, humanize.IBytes(disk.ReadIOPS))
|
||||
}
|
||||
if disk.WriteIOPS > 0 {
|
||||
write(v2.WriteIOPS, disk.WriteIOPS)
|
||||
write(cgroup2.WriteIOPS, disk.WriteIOPS)
|
||||
logging.Info(" - set write_iops limit by dev [%s]: %s",
|
||||
disk.Dev, humanize.IBytes(disk.WriteIOPS))
|
||||
}
|
||||
}
|
||||
err := group.Update(&v2.Resources{
|
||||
err := group.Update(&cgroup2.Resources{
|
||||
IO: &io,
|
||||
})
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user