Date: Fri, 28 Nov 2008 13:01:25 +0100 From: Mel <fbsd.questions@rachie.is-a-geek.net> To: freebsd-questions@freebsd.org Cc: Kris Kennaway <kris@freebsd.org>, Ott =?iso-8859-1?q?K=F6stner?= <OttK@zzz.ee> Subject: Re: top incorrectly reporting process time Message-ID: <200811281301.26721.fbsd.questions@rachie.is-a-geek.net> In-Reply-To: <492FCD6A.4050103@zzz.ee> References: <49202F59.7050802@zzz.ee> <492FC589.2090001@FreeBSD.org> <492FCD6A.4050103@zzz.ee>
next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 28 November 2008 11:52:26 Ott K=F6stner wrote: > Kris Kennaway wrote: > > Ott K=F6stner wrote: > >> Here is the problem. top returns only 9:42 -- the time of the first > >> thread. ps returns the sum of the thread times, which is correct. > > > > OK, I thought you were claiming the numbers were completely unrelated. > > Yeah, top and ps are just reporting different things (runtime of one > > thread vs total runtime of all threads). top may have a configuration > > option about aggregating the thread runtimes, or it may require a > > source code change. > > > > Kris > > Now I understand -- there are actually 2 separate problems -- one with > top code, which is the same on all systems and another porblem wihth ps > on two amd64 machines I am running: > > First computer FreeBSD 7.1-PRERELEASE #2 (exact copy / paste) : > > # ps -ax|grep mysql; echo; ps -axH|grep mysql > 981 con- IW 0:00.00 /bin/sh /usr/local/bin/mysqld_safe > --defaults-extra-file=3D/var/db/mysql/my.c > 1019 con- S 98:00.87 /usr/local/libexec/mysqld > --defaults-extra-file=3D/var/db/mysql/my.cnf --base > 12266 p0 S+ 0:00.00 grep mysql > > 981 con- IW 0:00.00 /bin/sh /usr/local/bin/mysqld_safe > --defaults-extra-file=3D/var/db/mysql/my.c > 1019 con- S 0:01.21 /usr/local/libexec/mysqld > --defaults-extra-file=3D/var/db/mysql/my.cnf --base > 1019 con- S 0:00.11 /usr/local/libexec/mysqld > --defaults-extra-file=3D/var/db/mysql/my.cnf --base > 1019 con- I 3:13.38 /usr/local/libexec/mysqld > --defaults-extra-file=3D/var/db/mysql/my.cnf --base > 1019 con- I 0:00.08 /usr/local/libexec/mysqld > --defaults-extra-file=3D/var/db/mysql/my.cnf --base > 1019 con- S 0:00.02 /usr/local/libexec/mysqld > --defaults-extra-file=3D/var/db/mysql/my.cnf --base > 12268 p0 R+ 0:00.00 grep mysql > > 3.xx minutes seems to be correct here, not 98. > > Second computer FreeBSD 7.1-PRERELEASE #3 (exact copy / paste): > > # ps -ax|grep mysql; echo; ps -axH|grep mysql > 1015 con- I 0:00.01 /bin/sh /usr/local/bin/mysqld_safe > --defaults-extra-file=3D/var/db/mysql/my.c > 1079 con- S 582:49.60 [mysqld] > > 1015 con- I 0:00.01 /bin/sh /usr/local/bin/mysqld_safe > --defaults-extra-file=3D/var/db/mysql/my.c > 1079 con- S 2:00.40 [mysqld] > 1079 con- I 0:00.00 [mysqld] > 1079 con- I 0:01.32 [mysqld] > 1079 con- I 0:47.04 [mysqld] > 1079 con- I 0:03.56 [mysqld] > 1079 con- S 0:26.43 [mysqld] > 1079 con- S 3:13.97 [mysqld] > 1079 con- S 4:12.72 [mysqld] > 1079 con- S 0:03.72 [mysqld] > > 582 minutes is clearly wrong. Not if it's the sum of all threads that lived and died during the lifetime = of=20 the process. It's value is taken from the kernel's idea of the runtime. Wit= h=20 KERN_PROC_INC_THREAD set, it will look at the thread storage for active=20 threads, including the 'main()' thread. I haven't looked into detail, but I suspect when a thread dies it gets adde= d=20 to process runtime, and is stored nowhere else. Aside from the different machines, you also took 2 different daemons, which= =20 fits this: named uses a static thread pool, by design, sum(nthreads) will equal the=20 process time mysqld uses a dynamic thread pool, sum(nthreads) is really=20 sum(nthreads_active). I haven't looked into detail =2D-=20 Mel Problem with today's modular software: they start with the modules and never get to the software part.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200811281301.26721.fbsd.questions>