-
Notifications
You must be signed in to change notification settings - Fork 881
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Remove pre-defined networks from package init #1072
Conversation
LGTM |
Thanks! I think we should take this in the next libnetwork vendoring for Docker 1.11.0-RC4. |
@cpuguy83 thanks for the fix. I think this |
@icecrime yes. we are waiting on 1 important fix to be merged before the next vendor in. |
This moves the initialization of the pre-defined networks to where it's used instead of in package init. This reason for this change is having this be populated in `init()` causes it to always consume cpu, and memory (4.3MB of memory), to populate even if the package is unused (like for instnace, in a re-exec). Here is a memory profile of docker/docker just after starting the daemon of the top 10 largest memory consumers: Before: ``` flat flat% sum% cum cum% 0 0% 0% 11.89MB 95.96% runtime.goexit 0 0% 0% 6.79MB 54.82% runtime.main 0 0% 0% 5.79MB 46.74% main.init 0 0% 0% 4.79MB 38.67% github.com/docker/docker/api/server/router/network.init 0 0% 0% 4.79MB 38.67% github.com/docker/libnetwork.init 0 0% 0% 4.29MB 34.63% github.com/docker/libnetwork/ipam.init 0 0% 0% 4.29MB 34.63% github.com/docker/libnetwork/ipams/builtin.init 0 0% 0% 4.29MB 34.63% github.com/docker/libnetwork/ipamutils.init 0 0% 0% 4.29MB 34.63% github.com/docker/libnetwork/ipamutils.init.1 4.29MB 34.63% 34.63% 4.29MB 34.63% github.com/docker/libnetwork/ipamutils.initGranularPredefinedNetworks ``` After: ``` flat flat% sum% cum cum% 0 0% 0% 4439.37kB 89.66% runtime.goexit 0 0% 0% 4439.37kB 89.66% runtime.main 0 0% 0% 3882.11kB 78.40% github.com/docker/docker/cli.(*Cli).Run 0 0% 0% 3882.11kB 78.40% main.main 3882.11kB 78.40% 78.40% 3882.11kB 78.40% reflect.callMethod 0 0% 78.40% 3882.11kB 78.40% reflect.methodValueCall 0 0% 78.40% 557.26kB 11.25% github.com/docker/docker/api/server.init 557.26kB 11.25% 89.66% 557.26kB 11.25% html.init 0 0% 89.66% 557.26kB 11.25% html/template.init 0 0% 89.66% 557.26kB 11.25% main.init ``` Now, of course the docker daemon will still need to consume this memory, but at least now re-execs and such won't have to re-init these variables. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
44e716e
to
fc4ef5f
Compare
@mavenugo makes sense, I've updated the PR. |
LGTM |
This moves the initialization of the pre-defined networks to where it's
used, in
Allocator
.This reason for this change is having this be populated in
init()
causes it to always consume cpu to populate, and memory (4.3MB of
memory) even if the package is unused (like for instnace, in a re-exec).
Here is a memory profile of docker/docker just after starting the daemon of the
top 10 largest memory consumers:
Before:
After:
Now, of course the docker daemon will still need to consume this memory, but
at least now re-execs and such won't have to re-init these variables.
Signed-off-by: Brian Goff cpuguy83@gmail.com