This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [perfmon] Re: perfmon2 TODO list


Kevin Corry wrote:
On Thu April 13 2006 11:41 am, Frank Ch. Eigler wrote:

I am a developer on the systemtap project, which Will Cohen has
referred you to earlier in the discussion.  I thought I would jump in
just to add/refresh focus on one important perfmon requirement for
systemtap: a kernel-side API.


As I mentioned in my previous email, it seems like we ought to be able to do just a little reorg, and provide an in-kernel interface that looks pretty much identical to the system-call interface, and actually wrapper the system-calls around it. Perhaps I'll give this a shot today or tomorrow with a couple of the system-calls and send in a patch and see what everyone thinks.


The list of systemcalls in perfmon.h is:


extern int pfm_create_context(pfarg_ctx_t *ctx, void *smpl_arg, size_t smpl_size);
extern int pfm_write_pmcs(int fd, pfarg_pmc_t *pmcs, int count);
extern int pfm_write_pmds(int fd, pfarg_pmd_t *pmds, int count);
extern int pfm_read_pmds(int fd, pfarg_pmd_t *pmds, int count);
extern int pfm_load_context(int fd, pfarg_load_t *load);
extern int pfm_start(int fd, pfarg_start_t *start);
extern int pfm_stop(int fd);
extern int pfm_restart(int fd);
extern int pfm_create_evtsets(int fd, pfarg_setdesc_t *setd, int count);
extern int pfm_getinfo_evtsets(int fd, pfarg_setinfo_t *info, int count);
extern int pfm_delete_evtsets(int fd, pfarg_setdesc_t *setd, int count);
extern int pfm_unload_context(int fd);



SystemTap probably wouldn't use the evtset calls.


Thoughts on the kernel ABI:

Use "struct pfm_context *ctx" rather than "int fd".

For pfm_create_context pass in addition argument to store a pointer for the allocated context because.

Have a function to explicitly free the perfmon context, can't tell when the file descriptor is no longer used by a process.

One of the concerns with systemtap is memory allocations. Instrumentation probes could be placed most anywhere. Expect that the create_context would allocate memory and would be limited to when the instrumentation is load and would be used in any probes. However, the equivalent pfm_read_pmds would be used nearly any where.

Would there be an equivalent "custom buffer" mechanism to the kernel? This seems to be the mechanism to implement the call-back mechanism that Frank mentioned. In perfmon2 that expects the data to be read out through a file into user space.


-Will



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]