Re: [PATCH v3 1/3] perf: add PERF_RECORD_NAMESPACES to include namespaces related info

From: Eric W. Biederman
Date: Mon Dec 12 2016 - 13:31:01 EST


Hari Bathini <hbathini@xxxxxxxxxxxxxxxxxx> 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 */
> };