Hi dude,

Another suggestions, when you release this, can you let us know which
files, if any, need to be changed in the asm/perfmon.h or
arch/xxx/perfmon directory? Also, is there a way you can provide a
'diff' against a previously patched kernel? That would be TREMENDOUSLY
helpful.

Phil

P.S. Sorry about my griping before...I'm overloaded. If it helps, I'm
poking around on a Cell machine looking to attempt a perfmon patch at
the moment.

On Wed, 2006-11-01 at 12:53 -0800, Stephane Eranian wrote:
> Hello everyone,
> 
> I have made the final round of changes to the interface to address
> some issues reported during the review on LKML.
> 
> Unfortunately, those changes are NOT backward compatible with existing 2.2 
> interface.
> As a consequence, I have now changed the version of the perfmon development 
> source to
> 2.3 (from 2.2). Backward compatibility with existing mainline (and distro) 
> perfmon 
> for Itanium is MAINTAINED AND UNCHANGED.
> 
> The changes are as follows:
> 
>  1/ pfm_create_evtsets()/pfm_delete_evtsets()
> 
>     The pfarg_setdesc_t structure has changed:
>       typedef struct {
>         uint16_t        set_id;           /* which set */
>         uint16_t        set_id_next;      /* next set to go to (must use 
> PFM_SETFL_EXPL_NEXT) */
>         uint32_t        set_flags;        /* input: flags for set, output: 
> err flag */
>         uint64_t        set_timeout;      /* requested/effective switch 
> timeout in nsecs */
>       ^^^^^^^^
>         uint64_t        set_mmap_offset;  /* cookie to pass as mmap offset to 
> access 64-bit virtual PMD */
>         uint64_t        reserved[5];      /* for future use */
>       } pfarg_setdesc_t;
> 
>     The set_timeout is now 64-bit wide and is expressed in nanosecond. This 
> is more
>     or less how time (or timeout) is expressed with other system calls (e.g., 
> nanosleep, gettimeofday).
> 
>  2/ pfm_getinfo_evtsets()
> 
>     The pfarg_setinfo_t structure has changed to match the changes in 
> pfarg_setdesc_t:
>       typedef struct {
>         uint16_t        set_id;             /* which set */
>         uint16_t        set_id_next;        /* output: next set to go to 
> (must use PFM_SETFL_EXPL_NEXT) */
>         uint32_t        set_flags;          /* output:flags or error */
>         uint64_t        set_ovfl_pmds[PFM_PMD_BV]; /* output: last ovfl PMDs 
> which triggered a switch from set */
>         uint64_t        set_runs;           /* output: number of times the 
> set was active */
>         uint64_t        set_timeout;        /* output:effective/leftover 
> switch timeout in nsecs */
>       ^^^^^^^^
>         uint64_t        set_act_duration;   /* DO NOT USE: number of cycles 
> set was active (syswide only) */
>         uint64_t        set_mmap_offset;    /* cookie to pass as mmap offset 
> to access 64-bit virtual PMD */
>         uint64_t        set_avail_pmcs[PFM_PMC_BV];
>       uint64_t        set_avail_pmds[PFM_PMD_BV];
>         uint64_t        reserved[4];        /* for future use */
>       }
> 
>   3/ UUID removal
>  
>    Sampling formats are no longer identified by 128-bit UUID. People thought 
> it was overkill and
>    difficult to manipulate. They suggested using simple strings which are 
> much easier to manipulate.
>    I made the change now.
> 
>    Here are the mappings:
>       perfmon v2.0 default format      -> "default-old"
>       perfmon v2.2 v2.3 default format -> "default"
> 
>    When operating in v2.0 compatibility mode (i.e., using perfmonctl()), 
> there is no need to remove the
>    UUID parameter. The kernel will convert it to "default-old". Only the old 
> default format will be accepted
>    when coming via perfmonctl().
> 
>    The information reported in /sys/kernel/perfmon/formats has changed 
> accordingly. The clear text UUID is gone.
>    Each format gets a directory (as before), and inside each directory you 
> find 2 entries:
>       - smpl_version: print a version number of rot eh format, expressed as 
> X.Y
>       - smpl_argsize: the size of the argument to the format for 
> pfm_create_context()
> 
>   4/ pfm_create_context()
> 
>    Given the changes with UUID, I have decided it was time to refresh the 
> call completely to align it
>    with other common Linux(or UNIX) practices. In particular, the following 
> changes were made:
> 
>       - the file descriptor is now returned by the call rather than in the 
> parameters. This follows the model
>         of open(), socket().
> 
>       - the sampling format name is added as a parameter
> 
>       - the actual sampling buffer size is not returned anymore. For formats, 
> that need a size, it is typically passed in
>         the sampling format argument.  You simply use the same size value for 
> mmap, munmap.
>         Both mmap() and munmap() align to the next page boundary 
> automatically.
> 
>       - the pfarg_ctx_t structure has been vastly simplified to only contain 
> ctx_flags. it is not modified by the call as it
>         used to be in v2.2.
> 
>    Here is the new definition:
> 
>       int pfm_create_context(pfarg_ctx_t *ctx, char *fmt_name, char *fmt_arg, 
> size_t fmt_argsize);
> 
>       Where pfarg_ctx_t is defined as:
> 
>       typedef struct {
>         uint32_t        ctx_flags;         /* noblock/block/syswide */
>         uint32_t        ctx_reserved1;     /* for future use */
>         uint64_t        ctx_reserved3[7];  /* for future use */
>       } pfarg_ctx_t;
> 
>       fmt_name : the name of the format you want to use. Pass NULL if no 
> format is used
>       fmt_arg  : pointer to argument for format. Not all formats take 
> arguments, but the default does (no changes to it)
>       fmt_arg_size: the size of the structure passed in fmt_arg
> 
>       Return:
>        >=0  : the file desriptor for the context
>           -1: error, errno contains the error code
> 
>     Internally as a consequence of the changes, the code has been simplified 
> some more, especially for
>     pfm_create_context(). So I think this is a change for the better.
> 
>     The changes will be part of the next kernel patch. Similarly, the next 
> releases of pfmon/libpfm will
>     adjust to the kernel changes.
> 
> Any comments?
> 
> -- 
> -Stephane
> 

_______________________________________________
perfmon mailing list
[email protected]
http://www.hpl.hp.com/hosted/linux/mail-archives/perfmon/

Reply via email to