diff --git a/README.md b/README.md index 5b7787d17..4061f1a11 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # containerd -another container runtime +Another container runtime built for performance and density. +containerd has advanced features such as seccomp and user namespace support as well +as checkpoint and restore for cloning and live migration of containers. #### Status @@ -12,6 +14,26 @@ What does alpha, beta, etc mean? * prod ready - read for production +# Performance + +Starting 1000 containers concurrently runs at 126-140 containers per second. + +Overall start times: + +``` +[containerd] 2015/12/04 15:00:54 count: 1000 +[containerd] 2015/12/04 14:59:54 min: 23ms +[containerd] 2015/12/04 14:59:54 max: 355ms +[containerd] 2015/12/04 14:59:54 mean: 78ms +[containerd] 2015/12/04 14:59:54 stddev: 34ms +[containerd] 2015/12/04 14:59:54 median: 73ms +[containerd] 2015/12/04 14:59:54 75%: 91ms +[containerd] 2015/12/04 14:59:54 95%: 123ms +[containerd] 2015/12/04 14:59:54 99%: 287ms +[containerd] 2015/12/04 14:59:54 99.9%: 355ms +``` + + # REST API v1 ## Starting a container diff --git a/api/v1/server.go b/api/v1/server.go index 12864d01f..bb9a17e52 100644 --- a/api/v1/server.go +++ b/api/v1/server.go @@ -47,7 +47,6 @@ type server struct { supervisor *containerd.Supervisor } -// TODO: implement correct shutdown func (s *server) ServeHTTP(w http.ResponseWriter, r *http.Request) { s.r.ServeHTTP(w, r) } diff --git a/delete.go b/delete.go index c36a2792e..c4a225b65 100644 --- a/delete.go +++ b/delete.go @@ -13,9 +13,10 @@ func (h *DeleteEvent) Handle(e *Event) error { if container, ok := h.s.containers[e.ID]; ok { if err := h.deleteContainer(container); err != nil { logrus.WithField("error", err).Error("containerd: deleting container") + } else { + ContainersCounter.Dec(1) + h.s.containerGroup.Done() } - ContainersCounter.Dec(1) - h.s.containerGroup.Done() } return nil }