[cgmanager-devel] read overhead

Stéphane Graber stgraber at ubuntu.com
Mon Dec 9 23:09:05 UTC 2013


On Mon, Dec 09, 2013 at 06:06:49PM -0500, Stéphane Graber wrote:
> On Mon, Dec 09, 2013 at 04:56:30PM -0600, Serge Hallyn wrote:
> > Hi,
> > 
> > Google has said that they need to see 1000 reads/second from cgmanager.
> > The code's not really in a state yet where it should be measured this
> > way but I figured I'd get a baseline.
> > 
> > On my laptop (3yo 8-core i7), simply reading memory.limit_in_bytes from
> > bash 1000 times per second is not possible :)  A little under 2 seconds
> > is.  Here are the three scripts I tried.  The first simply reads
> > the cgroup file 1000 times.  The second uses dbus-send to send 1000
> > requests to the cgroup manager.  I would assume that using a custom
> > client which uses the cgmanager-client.c (which I assume will become a
> > library?) would turn out faster.  The third is there for a fairer
> > comparison to anything uses a daemon - it simply determins your
> > current cgroup and prints out the memory.usage_in_bytes there.  Any
> > daemon which is answering a generic request will have to do something
> > like that, of course.
> > 
> > Now google have said they would simply read from the cgroup fs, and
> > hoped to go through cgmanager for the writes - that of course is fine.
> > There might be another way to achieve (on faster machines than my
> > laptop :) 1000 r/s: we could have the cgmanager keep a short list of
> > open files for certain requestors, so we could avoid some of the
> > processing we are doing on every read.  (Just handing an open fd to
> > the caller probably is not ok, since the caller can reopen the file
> > read-write if the file is owned by them.  So to do that we'd have to
> > assume that the caller is 100% trusted, which would be a very special
> > case, and we may as well, at that point, let them mount the cgroupfs
> > rw).
> > 
> > Anyway, here are the 3 trivial scripts followed by the result of running
> > 'time <script>'
> 
> For a more realistic measurement of the processing time, can you try the
> following?
> 
> ---
> #!/usr/bin/python3
> import dbus
> import time
> 
> bus = dbus.connection.Connection("unix:path=/tmp/cgmanager")
> 
> cgmanager = bus.get_object(None, '/org/linuxcontainers/cgmanager')
> start_time = time.time()
> for i in range(1000):
>     print(cgmanager.getValue("memory", "", "memory.usage_in_bytes"))
> end_time = time.time()
> print("Total time: %s" % (end_time - start_time))
> ---

Actually, you may want to just call getValue and not print the result if
you want the smallest possible overhead as it may impact the result a
tiny bit.

> 
> > 
> > xxxxxxxxxxx  timeme1.sh xxxxxxxxxxx
> > #!/bin/bash
> > for i in `seq 1 1000`; do
> > 	cat /sys/fs/cgroup/memory/memory.usage_in_bytes
> > done
> > 
> > run 1:
> > real	0m1.975s
> > user	0m0.795s
> > sys	0m1.243s
> > 
> > xxxxxxxxxxx  timeme2.sh xxxxxxxxxxx
> > #!/bin/bash
> > for i in `seq 1 1000`; do
> > 	dbus-send --print-reply --address=unix:path=/tmp/cgmanager --type=method_call /org/linuxcontainers/cgmanager org.linuxcontainers.cgmanager0_0.getValue string:'memory' string:'' string:'memory.usage_in_bytes'
> > done
> > 
> > run 1:
> > real	0m3.592s
> > user	0m1.394s
> > sys	0m1.731s
> > 
> > run 2:
> > real	0m3.587s
> > user	0m1.398s
> > sys	0m1.734s
> > 
> > xxxxxxxxxxx  timeme3.sh xxxxxxxxxxx
> > #!/bin/bash
> > for i in `seq 1 1000`; do
> > 	cg=`awk -F: '/memory/ { print $3 }' /proc/self/cgroup`
> > 	cat /sys/fs/cgroup/memory/$cg/memory.usage_in_bytes
> > done
> > 
> > run 1:
> > real    0m5.822s
> > user    0m2.685s
> > sys     0m3.333s
> > run 2:
> > real    0m5.826s
> > user    0m2.690s
> > sys     0m3.344s
> > _______________________________________________
> > cgmanager-devel mailing list
> > cgmanager-devel at lists.linuxcontainers.org
> > http://lists.linuxcontainers.org/listinfo/cgmanager-devel
> 
> -- 
> Stéphane Graber
> Ubuntu developer
> http://www.ubuntu.com



> _______________________________________________
> cgmanager-devel mailing list
> cgmanager-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/cgmanager-devel


-- 
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.linuxcontainers.org/pipermail/cgmanager-devel/attachments/20131209/997f55eb/attachment.pgp>


More information about the cgmanager-devel mailing list