Use cached state instead of runc state.#3711
Conversation
|
@crosbymichael Do you see any problem with using the cached state instead of invoking |
|
Build succeeded.
|
Codecov Report
@@ Coverage Diff @@
## master #3711 +/- ##
======================================
Coverage 42.1% 42.1%
======================================
Files 129 129
Lines 14307 14307
======================================
Hits 6024 6024
Misses 7383 7383
Partials 900 900
Continue to review full report at Codecov.
|
|
LGTM |
d3dc6cb to
907914c
Compare
|
@crosbymichael I updated the And let's test this change in HEAD for several days before cherry-picking. The |
907914c to
117421f
Compare
Signed-off-by: Lantao Liu <lantaol@google.com>
117421f to
18be6e3
Compare
|
Build succeeded.
|
|
Yes, it needs to be in HEAD to make sure that this does not introduce any races or incorrect state changes |
| s.Unlock() | ||
| } | ||
|
|
||
| type atomicBool int32 |
There was a problem hiding this comment.
Why is this not locked by p.mu yes this a atomic so its thread safe but it still enables the race conditions between a status and pause call.
There was a problem hiding this comment.
Because pausing only makes sense outside of p.mu. Within the lock, there are only running and paused state.
There was a problem hiding this comment.
Hmm. I'll take your word for it :)
|
Can we get this in sooner so that we can start soaking? This is affecting both Kubernetes and Docker users now. :) |
|
LGTM |
containerd 1.3.2 Welcome to the v1.3.2 release of containerd! The second patch release for `containerd` 1.3 includes a fix for a race condition related to the reported pid on exit when called from Docker. ### Runtime * Fix containerd pid race condition [containerd#3857](containerd#3857) * Use cached process state to reduce exec cost [containerd#3711](containerd#3711) ### CRI * Added `insecure_skip_verify` option in the registry tls config to allow skipping registry certificate verification [containerd#3847](containerd#3847) Please try out the release binaries and report any issues at https://github.com/containerd/containerd/issues. ### Contributors * Lantao Liu * Derek McGowan * Michael Crosby * Phil Estes * Maksym Pavlenko ### Changes * [`ff48f57fc8`](containerd@ff48f57) Merge pull request [containerd#3866](containerd#3866) from dmcgowan/prepare-1.3.2 * [`99005c2647`](containerd@99005c2) Add release notes for v1.3.2 * [`e987ea3cac`](containerd@e987ea3) Merge pull request [containerd#3864](containerd#3864) from Random-Liu/update-cri-release-1.3 * [`8bbd71e560`](containerd@8bbd71e) Update cri to b1bef15fbeb6c6f0569b67322acfa74ca3597755. * [`070c27205c`](containerd@070c272) Merge pull request [containerd#3863](containerd#3863) from Random-Liu/cherrypick-#3857-release-1.3 * [`306d6d4b55`](containerd@306d6d4) Fix container pid. * [`5028701f1a`](containerd@5028701) Merge pull request [containerd#3753](containerd#3753) from thaJeztah/1.3_backport_avoid_unnecessary_runc_state * [`e3d2b608cc`](containerd@e3d2b60) Merge pull request [containerd#3855](containerd#3855) from fuweid/cp-3853 * [`04fbb97ad0`](containerd@04fbb97) Fix cleanup error on content client test * [`be24f39454`](containerd@be24f39) Merge pull request [containerd#3840](containerd#3840) from ameyag/1.3_backport_log_file_win * [`333679343b`](containerd@3336793) Add `--log-file` flag for windows service. * [`9abfc70043`](containerd@9abfc70) Use cached state instead of `runc state`. ### Changes from containerd/cri * [`b1bef15f`](containerd/cri@b1bef15) Merge pull request [containerd#1346](containerd/cri#1346) from Random-Liu/cherrypick-#1345-release-1.3 * [`27edfa06`](containerd/cri@27edfa0) Add insecure_skip_verify option. * [`e5dd8053`](containerd/cri@e5dd805) Merge pull request [containerd#1322](containerd/cri#1322) from Random-Liu/cherrypick-#1319-release-1.3 * [`c0dee957`](containerd/cri@c0dee95) Fix containerd build, use `libbtrfs-dev` when available. * [`1fb415d2`](containerd/cri@1fb415d) Merge pull request [containerd#1314](containerd/cri#1314) from Random-Liu/cherrypick-#1312-release-1.3 * [`0973459d`](containerd/cri@0973459) Update based on default xenial distro. * [`a46f6baf`](containerd/cri@a46f6ba) Configure golangci-lint ### Dependency Changes Previous release can be found at [v1.3.1](https://github.com/containerd/containerd/releases/tag/v1.3.1) * **github.com/containerd/cri** 5d49e7e51b43e36a6b9c4386257c7d08c602237f -> b1bef15fbeb6c6f0569b67322acfa74ca3597755 # gpg: directory '/c/Users/juterry/.gnupg' created # gpg: keybox '/c/Users/juterry/.gnupg/pubring.kbx' created # gpg: Signature made Tue Dec 3 11:09:10 2019 PST # gpg: using RSA key 8C7A111C21105794B0E8A27BF58C5D0A4405ACDB # gpg: Can't check signature: No public key
See kubernetes/kubernetes#82440 and moby/moby#39102
I think we should cherry-pick this into 1.2 and 1.3.
In Kubernetes, we observed that exec in containerd is fair expensive. With Docker 18.09, for each exec process, 8
runc stateprocesses will be spawned.The followings are results of
sudo strace -f -p SHIM_PID -e execvewhen we simply run acrictl exec CONTAINER_ID echo hello.containerd-shim(I believe most people are still using this):containerd-shim-runc-v1(shim v2 implementation has less unnecessaryrunc state, because those unnecessaryrunc stateare introduced bycontainerd-shimspecific code https://github.com/containerd/containerd/blob/v1.3.0/runtime/v1/linux/task.go#L318):containerd-shimwith this change (norunc stateanymore):Signed-off-by: Lantao Liu lantaol@google.com