[RFC][PATCH 10/10] taststats: User space with ptop tool

From: Michael Holzheu
Date: Thu Sep 23 2010 - 10:05:08 EST


***********************
Warning: Your file, s390-tools-taskstats.tar.bz2, contains more than 32 files after decompression and cannot be scanned.
***********************


Taskstats user space

The attached tarball "s390-tools-taskstasts.tar.bz2" contains user space
code that exploits the taskstasts-top kernel patches. This is early
code and probably still a lot of work has to be done here. The
code should build and work on all architectures, not only on s390.

libtaskstats user space library
-------------------------------
include/libtaskstats.h API definition
libtaskstats_nl API implementation based on libnl 1.1
libtaskstats_proc Partial API implementation using
new /proc/taskstats

libtaskstats snapshot user space library
----------------------------------------
include/libtaskstats_snap.h API definition
libtaskstats_snap/snap_netlink.c API implementation based on
libtaskstats

Snapshot library test program
-----------------------------
ts_snap_test/ts_snap_test.c Simple program that uses snapshot library

Precise top user space program (ptop)
-------------------------------------
ptop/dg_libtaskstats.c Data gatherer using taskstats interface
To enable steal time calculation for non s390
modify l_calc_sttime_old() and replact "#if 0"
with "#if 1".
ptop/sd_core.c Code for ctime accounting

HOWTO build:
============
1.Install libnl-1.1-5 and libnl-1.1-5-devel
If this is not possible, you can still build the proc/taskstats based
code:
* Remove libtaskstats_nl from the top level Makefile
* Remove ptop_old_nl, ptop_new_nl and ptop_snap_nl from the
"ptop" Makefile
2.Build s390-tools:
# tar xfv s390-tools.tar.bz2
# cd s390-tools
# make

HOWTO use ptop:
===============
In the ptop sub directory there are built five versions of ptop:

* ptop_old_nl: ptop using the old TASKSTATS_CMD_ATTR_PID netlink
command together with reading procfs to find
running tasks
* ptop_new_nl: ptop using the new TASKSTATS_CMD_ATTR_PIDS
netlink command.
This tool only shows tasks that consumed CPU time
in the last interval.
* ptop_new_proc: ptop using the new TASKSTATS_CMD_ATTR_PIDS ioctl on
/proc/taskstats.
This tool only shows tasks that consumed CPU time
in the last interval.
* ptop_snap_nl: ptop using the snapshot library with underlying
netlink taskstats library
* ptop_snap_proc: ptop using the snapshot library with underlying
taskstats library that uses /proc/taskstats

First results (on s390):
========================

TEST1: System with many sleeping tasks
--------------------------------------

for ((i=0; i < 1000; i++))
do
sleep 1000000 &
done

VVVV
pid user sys ste total Name
(#) (%) (%) (%) (%) (str)
541 0.37 2.39 0.10 2.87 top
3645 2.13 1.12 0.14 3.39 ptop_old_nl
3591 2.20 0.59 0.12 2.92 ptop_snap_nl
3694 2.16 0.26 0.10 2.51 ptop_snap_proc
3792 0.03 0.06 0.00 0.09 ptop_new_nl
3743 0.03 0.05 0.00 0.07 ptop_new_proc
^^^^

The ptop user space code is not optimized for a large amount of tasks,
therefore we should concentrate on the system (sys) time. Update time is
2 seconds for all top programs.

* Old top command:
Because top has to read about 1000 procfs directories, system time
is very high (2.39%).

* ptop_new_xxx:
Because only active tasks are transferred, the CPU consumption is very
low (0.05-0.06% system time).

* ptop_snap_nl/ptop_old_nl:
The new netlink TASKSTATS_CMD_ATTR_PIDS command only consumes about
50% of the CPU time (0.59%) compared to the usage of multiple
TASKSTATS_CMD_ATTR_PID commands (ptop_old_nl / 1.12%) and scanning
procfs to find out running tasks.

* ptop_snap_proc/ptop_snap_nl:
Using the proc/taskstats interface (0.26%) consumes much less system
time than the netlink interface (0.59%).

TEST2: Show snapshot consistency with system that is 100% busy
--------------------------------------------------------------

System with 3 CPUs:

for ((i=0; i < $(cat /proc/cpuinfo | grep "^processor" | wc -l); i
++))
do
./loop &
done

cd linux-2.6.35
make -j 5

# ptop_snap_proc
VVVVV
pid user sys ste cuser csys cste total Elap+ Name
(#) (%) (%) (%) (%) (%) (%) (%) (hm) (str)
8374 75.48 0.41 1.34 0.00 0.00 0.00 77.24 0:01 loop
8377 73.97 0.27 1.06 0.00 0.00 0.00 75.31 0:01 loop
8371 70.61 0.38 1.38 0.00 0.00 0.00 72.38 0:01 loop
10093 0.17 0.30 0.00 25.90 38.19 0.52 65.07 0:00 make
10548 0.15 0.12 0.00 1.75 4.21 0.06 6.29 0:00 make
...
V:V:S 220.84 2.84 3.86 28.14 43.71 0.60 300.00 0:16
^^^^^^

With the snapshot mechanism the sum of all tasks CPU times (user +
system + steal + cuser + csystem + csteal) will be exactly 300.00% CPU
time with this testcase. Using ptop_snap_proc this works fine on
s390. Unfortunately on x86 the numbers are not as good as on s390.


Attachment: s390-tools-taskstats.tar.bz2
Description: application/bzip-compressed-tar