mirror of
https://github.com/hanzoai/visor.git
synced 2026-09-24 17:04:14 +00:00
Prior to this change, sandbox subprocesses (`runsc boot` and `runsc gofer`)
were spawned into their target cgroup by having the `runsc create` process
switch into the target cgroup and fork/exec. This stalls for an RCU grace
period. `clone3(CLONE_INTO_CGROUP)` does this in a single operation, and
does not stall.
Benchmarks:
```
$ runsc do /bin/true
│ before │ after │
│ sec/op │ sec/op vs base │
RunscDo 100.16m ± 2% 69.03m ± 1% -31.09% (n=256)
Basic OCI operations:
│ before │ after │
│ sec/op │ sec/op vs base │
OCICreate 55.59m ± 3% 26.46m ± 1% -52.40% (n=256)
OCIReady 70.44m ± 3% 40.48m ± 1% -42.53% (n=256)
OCIStart 14.17m ± 2% 13.87m ± 2% -2.17% (p=0.033 n=256)
OCITotal 77.88m ± 2% 47.99m ± 1% -38.38% (n=256)
```
`docker run` unaffected as it uses the systemd cgroup controller.
49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
load("//tools:defs.bzl", "go_library", "go_test")
|
|
|
|
package(
|
|
default_applicable_licenses = ["//:license"],
|
|
licenses = ["notice"],
|
|
)
|
|
|
|
go_library(
|
|
name = "cgroup",
|
|
srcs = [
|
|
"cgroup.go",
|
|
"cgroup_v2.go",
|
|
"cgroup_v2_unsafe.go",
|
|
"systemd.go",
|
|
],
|
|
visibility = ["//:sandbox"],
|
|
deps = [
|
|
"//pkg/abi/linux",
|
|
"//pkg/cleanup",
|
|
"//pkg/log",
|
|
"@com_github_cenkalti_backoff//:go_default_library",
|
|
"@com_github_coreos_go_systemd_v22//dbus:go_default_library",
|
|
"@com_github_godbus_dbus_v5//:go_default_library",
|
|
"@com_github_opencontainers_runtime_spec//specs-go:go_default_library",
|
|
"@org_golang_x_sync//errgroup:go_default_library",
|
|
"@org_golang_x_sys//unix:go_default_library",
|
|
],
|
|
)
|
|
|
|
go_test(
|
|
name = "cgroup_test",
|
|
size = "small",
|
|
srcs = [
|
|
"cgroup_test.go",
|
|
"cgroup_v2_test.go",
|
|
"systemd_test.go",
|
|
],
|
|
library = ":cgroup",
|
|
tags = ["local"],
|
|
deps = [
|
|
"//pkg/test/testutil",
|
|
"@com_github_coreos_go_systemd_v22//dbus:go_default_library",
|
|
"@com_github_godbus_dbus_v5//:go_default_library",
|
|
"@com_github_google_go_cmp//cmp:go_default_library",
|
|
"@com_github_google_go_cmp//cmp/cmpopts:go_default_library",
|
|
"@com_github_opencontainers_runtime_spec//specs-go:go_default_library",
|
|
],
|
|
)
|