Hari Bathini <[email protected]> writes:

> Hi Eric,
>
>
> On Monday 12 December 2016 11:57 PM, Eric W. Biederman wrote:
>> Hari Bathini <[email protected]> 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.
>
> Do you mean..
>
>     st_dev = encode_dev(inode->i_sb->s_dev); ?
>     st_ino = inode->i_ino; ?

Yes.  I believe that is how those values make it to user space
during a stat system call.

Eric

Reply via email to