Hello everyone,

Over the last few months, I have discussed with Andew Morton and Andi
Kleen how we could
merge perfmon2 with the mainline Linux kernel. From those discussions,
he became clear
the current code base could not be merged as is. It was too big and
complex for LKML people
to get a handle on.

As you may have seen in 2.6.25, I have started major restructuring of
the code to make it
more modular and readable. That X86 support has been changed heavily
to pushed all
model-specific code into its corresponding PMU description module.

The restructuring effort will continue in 2.6.26 along with some
simplifications wherever
possible.

However, it became clear to me that it would be quite hard to split
the code into manageable
pieces to feed to LKML.  So I have decided to take another approach,
suggested by akpm
and ak.

I have started more or less from scratch, importing only selected bits
and pieces from our
current development tree.

The first piece I want to focus on is per-thread monitoring, and in
particular per-thread
counting. Per-thread monitoring is a key value-add of perfmon.  I
think this needs to be
in first.

To that extent, I have created a separate tree which only contains
enough code to
support per-thread counting. This is limited to X86 processors only,
both AMD and
Intel. On the Intel side, so far only Intel Core-based processors are
supported. The
code has been stripped down to the bare minimum. Yet existing perfmon
application
and tools doing self-monitoring or monitoring of another thread can
run unmodified
assuming you use the current libpfm.

The following functionalities are missing/changed for  this lightweight version:

* no system-wide monitoring

* no kernel support for sampling

* no sampling buffer formats

* no PMU description modules. Mapping tables are compiled in.

* no event set multiplexing

* The following syscalls have been removed:
   - pfm_restart()
   - pfm_getinfo_evtsets()
   - pfm_create_evtsets()
   - pfm_delete_evtsets()

* pfm_start() command has lost its (optional) argument (pfarg_start_t).

* the context file descriptor is not readable, nor pollable. No pfarg_msg_t

* No signal is sent on 64-bit counter overflow. Yet 64-bit
virtualization of the counters is maintained

* Mutual exclusion with Oprofile is maintained.

* PMU sharing with NMI watchdog is maintained

* /sys/kernel/perfmon is maintained, though with fewer entries

* debugfs statistics are maintained as compile time option

* Itanium, MIPS, Power, SPARC supprt has been removed

As a results the patch against 2.6.26-rc3 is 200KB and about 1900 lines of C.
I think I can squeeze it some more.

As I said, certain tools and test programs still work because the
shared data structures have not changed
int size, though some fields have disappeared.

Once I have something that works decently, I will probably create
another GIT tree on kernel.org. Note
that 200KB is too big for LKML, so the patch would have to be broken
down some more.

Hopefully with this codebase we will increase our chances of getting
some pieces merged.

Note that the current GIT tree is not abandonned, far from it. Instead
it will remain the bleeding
edge tree where all new developments must take place.  Functionalities
will then migrate from
this tree to the merge tree and eventually to mainline.

I would like to get something in good shape for Ottawa Linux Symposium
(OLS) which is mid-July.
Andi Kleen will deliver a paper/presentation on 'submitted patches for
the kernel'. I'd like to show
him we understand how to do this and are actively working on it

Thanks.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to