README
¶
Docker Micro Benchmark
Docker micro benchmark is a tool aimed at benchmarking docker operations
which are critical to Kubelet performance, such as docker ps
, docker inspect
etc.
Description
Docker micro benchmark benchmarks the following docker operations:
docker ps [-a]
: Kubelet does periodicaldocker ps -a
to detect container state changes, so its performance is crucial to Kubelet.docker inspect
: Kubelet doesdocker inspect
to get detailed information of specific container when it finds out a container state is changed. So inspect is also relatively frequent.docker create
&docker start
: The performance ofdocker create
anddocker start
are important for Kubelet when creating pods, especially for batch creation.docker stop
&docker remove
: The same with above.
Docker micro benchmark supports 4 kinds of benchmarks:
- Benchmark
docker ps
,docker ps -a
anddocker inspect
with different number of dead and alive containers. - Benchmark
docker ps
,docker ps -a
anddocker inspect
with different operation intervals. - Benchmark
docker ps -a
anddocker inspect
with different number of goroutines. - Benchmark
docker create & docker start
anddocker stop & docker remove
with different operation rate limits.
Instructions
Dependencies
- golang
- sysstat
- gnuplot
Build
godep go build k8s.io/contrib/docker-micro-benchmark
Usage
benchmark.sh
is the script starting the benchmark.
Usage : benchmark.sh -[o|c|i|r]
:
- -o: Run
docker create/start/stop/remove
benchmark. - -c: Run
docker list/inspect
with different number of containers. Notice that containers created in this benchmark won't be removed even after benchmark is over. That's intended because creating containers is really slow, it's better to reuse these containers in the following benchmarks. If you want to remove all the containers, just runshell/remove_all_containers.sh
. - -i: Run
docker list/inspect
with different operation intervals. - -r: Run
docker list/inspect
with different number of goroutines.
You can run benchmark.sh
with multiple options, the script will run benchmark
corresponding to each of the options one by one. Notice that it's better to put
-c
in front of -i
and -r
, so that they can reuse the containers created in
-c
benchmark.
Result
After the benchmark finishes, all results will be generated in result/
directory. Different benchmark results locate in different sub-directories.
There are two forms of benchmark result:
- *.dat: Table formatted text result.
- *.png: Graph result auto-generated from the text result. Notice that there
is no graph for
sar
result. If you want to analyse the data insar
result, you can use another tool kSar.
Result
Here are links of some previous benchmark results:
- https://github.com/kubernetes/kubernetes/issues/16110#issuecomment-180510177
- https://docs.google.com/document/d/1d5xaYW3oVnzTgjlcRSnj5aJQusRkrQotXF2zBoTnNkw/edit
TODOs
- Support event stream benchmark. The old event stream benchmark is removed in this version.
- Add error statisitcs and sanity check in current benchmarks to analyze docker reliability.
Documentation
¶
There is no documentation for this package.
Directories
¶
Path | Synopsis |
---|---|
Godeps
|
|
_workspace/src/github.com/Microsoft/go-winio/archive/tar
Package tar implements access to tar archives.
|
Package tar implements access to tar archives. |
_workspace/src/github.com/docker/distribution/digest
Package digest provides a generalized type to opaquely represent message digests and their operations within the registry.
|
Package digest provides a generalized type to opaquely represent message digests and their operations within the registry. |
_workspace/src/github.com/docker/distribution/reference
Package reference provides a general type to represent any way of referencing images within the registry.
|
Package reference provides a general type to represent any way of referencing images within the registry. |
_workspace/src/github.com/docker/engine-api/client/transport
Package transport provides function to send request to remote endpoints.
|
Package transport provides function to send request to remote endpoints. |
_workspace/src/github.com/docker/engine-api/client/transport/cancellable
Package cancellable provides helper function to cancel http requests.
|
Package cancellable provides helper function to cancel http requests. |
_workspace/src/github.com/docker/engine-api/types
Package types is used for API stability in the types and response to the consumers of the API stats endpoint.
|
Package types is used for API stability in the types and response to the consumers of the API stats endpoint. |
_workspace/src/github.com/docker/engine-api/types/filters
Package filters provides helper function to parse and handle command line filter, used for example in docker ps or docker images commands.
|
Package filters provides helper function to parse and handle command line filter, used for example in docker ps or docker images commands. |
_workspace/src/github.com/docker/engine-api/types/versions/v1p19
Package v1p19 provides specific API types for the API version 1, patch 19.
|
Package v1p19 provides specific API types for the API version 1, patch 19. |
_workspace/src/github.com/docker/engine-api/types/versions/v1p20
Package v1p20 provides specific API types for the API version 1, patch 20.
|
Package v1p20 provides specific API types for the API version 1, patch 20. |
_workspace/src/github.com/docker/go-connections/nat
Package nat is a convenience package for manipulation of strings describing network ports.
|
Package nat is a convenience package for manipulation of strings describing network ports. |
_workspace/src/github.com/docker/go-connections/sockets
Package sockets provides helper functions to create and configure Unix or TCP sockets.
|
Package sockets provides helper functions to create and configure Unix or TCP sockets. |
_workspace/src/github.com/docker/go-connections/tlsconfig
Package tlsconfig provides primitives to retrieve secure-enough TLS configurations for both clients and servers.
|
Package tlsconfig provides primitives to retrieve secure-enough TLS configurations for both clients and servers. |
_workspace/src/github.com/docker/go-units
Package units provides helper function to parse and print size and time units in human-readable format.
|
Package units provides helper function to parse and print size and time units in human-readable format. |
_workspace/src/github.com/juju/ratelimit
The ratelimit package provides an efficient token bucket implementation that can be used to limit the rate of arbitrary things.
|
The ratelimit package provides an efficient token bucket implementation that can be used to limit the rate of arbitrary things. |
_workspace/src/golang.org/x/net/context
Package context defines the Context type, which carries deadlines, cancelation signals, and other request-scoped values across API boundaries and between processes.
|
Package context defines the Context type, which carries deadlines, cancelation signals, and other request-scoped values across API boundaries and between processes. |
_workspace/src/golang.org/x/net/context/ctxhttp
Package ctxhttp provides helper functions for performing context-aware HTTP requests.
|
Package ctxhttp provides helper functions for performing context-aware HTTP requests. |
_workspace/src/golang.org/x/net/proxy
Package proxy provides support for a variety of protocols to proxy network data.
|
Package proxy provides support for a variety of protocols to proxy network data. |