Hari Bathini <hbath...@linux.vnet.ibm.com> writes:

> With the advert of container technologies like docker, that depend
> on namespaces for isolation, there is a need for tracing support for
> namespaces. This patch introduces new PERF_RECORD_NAMESPACES event
> for tracing based on namespaces related info.

> diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
> index c66a485..2a48fc6 100644
> --- a/include/uapi/linux/perf_event.h
> +++ b/include/uapi/linux/perf_event.h
> @@ -344,7 +344,8 @@ struct perf_event_attr {
>                               use_clockid    :  1, /* use @clockid for time 
> fields */
>                               context_switch :  1, /* context switch data */
>                               write_backward :  1, /* Write ring buffer from 
> end to beginning */
> -                             __reserved_1   : 36;
> +                             namespaces     :  1, /* include namespaces data 
> */
> +                             __reserved_1   : 35;
>  
>       union {
>               __u32           wakeup_events;    /* wakeup every n events */
> @@ -610,6 +611,18 @@ struct perf_event_header {
>       __u16   size;
>  };
>  
> +enum {
> +     NET_NS_INDEX            = 0,
> +     UTS_NS_INDEX            = 1,
> +     IPC_NS_INDEX            = 2,
> +     PID_NS_INDEX            = 3,
> +     USER_NS_INDEX           = 4,
> +     MNT_NS_INDEX            = 5,
> +     CGROUP_NS_INDEX         = 6,
> +
> +     NAMESPACES_MAX,         /* maximum available namespaces */
> +};
> +
>  enum perf_event_type {
>  
>       /*
> @@ -862,6 +875,18 @@ enum perf_event_type {
>        */
>       PERF_RECORD_SWITCH_CPU_WIDE             = 15,
>  
> +     /*
> +      * struct {
> +      *      struct perf_event_header        header;
> +      *
> +      *      u32                             pid, tid;
> +      *      u64                             dev_num;
> +      *      u64                             inode_num[NAMESPACES_MAX];
There needs to be one device number per inode.  While it is true that
today the device number is always the same.  That is not necessarily so.

I reserve the right to have the device number vary per namespace
so that I don't need to implement a namespace of namespaces.

These are st_dev and st_ino of the inode for the namespace.

> +      *      struct sample_id                sample_id;
> +      * };
> +      */
> +     PERF_RECORD_NAMESPACES                  = 16,
> +
>       PERF_RECORD_MAX,                        /* non-ABI */
>  };

Reply via email to