From: Nicolas Dichtel <nicolas.dichtel@6wind.com>
To: Roopa Prabhu <roopa@cumulusnetworks.com>, netdev@vger.kernel.org
Cc: jhs@mojatatu.com, davem@davemloft.net
Subject: Re: [PATCH net-next 1/2] rtnetlink: add new RTM_GETSTATS message to dump link stats
Date: Mon, 14 Mar 2016 16:00:52 +0100 [thread overview]
Message-ID: <56E6D224.5020701@6wind.com> (raw)
In-Reply-To: <1457834186-45727-2-git-send-email-roopa@cumulusnetworks.com>
Le 13/03/2016 02:56, Roopa Prabhu a écrit :
> From: Roopa Prabhu <roopa@cumulusnetworks.com>
>
> This patch adds a new RTM_GETSTATS message to query link stats via netlink
> from the kernel. RTM_NEWLINK also dumps stats today, but RTM_NEWLINK
> returns a lot more than just stats and is expensive in some cases when
> frequent polling for stats from userspace is a common operation.
>
> RTM_GETSTATS is an attempt to provide a light weight netlink message
> to explicity query only link stats from the kernel on an interface.
> The idea is to also keep it extensible so that new kinds of stats can be
> added to it in the future.
>
> This patch adds the following attribute for NETDEV stats:
> struct nla_policy ifla_stats_policy[IFLA_STATS_MAX + 1] = {
> [IFLA_STATS_LINK64] = { .len = sizeof(struct rtnl_link_stats64) },
> };
>
> This patch also allows for af family stats (an example af stats for IPV6
> is available with the second patch in the series).
>
> Like any other rtnetlink message, RTM_GETSTATS can be used to get stats of
> a single interface or all interfaces with NLM_F_DUMP.
>
> Future possible new types of stat attributes:
> - IFLA_MPLS_STATS (nested. for mpls/mdev stats)
> - IFLA_EXTENDED_STATS (nested. extended software netdev stats like bridge,
> vlan, vxlan etc)
> - IFLA_EXTENDED_HW_STATS (nested. extended hardware stats which are
> available via ethtool today)
>
> This patch also declares a filter mask for all stat attributes.
> User has to provide a mask of stats attributes to query. This will be
> specified in a new hdr 'struct if_stats_msg' for stats messages.
>
> Without any attributes in the filter_mask, no stats will be returned.
>
> This patch has been tested with modified iproute2 ifstat.
>
> Suggested-by: Jamal Hadi Salim <jhs@mojatatu.com>
> Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
[snip]
> diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
> index 249eef9..0840f3e 100644
> --- a/include/uapi/linux/if_link.h
> +++ b/include/uapi/linux/if_link.h
[snip]
> +enum {
> + IFLA_STATS_UNSPEC,
> + IFLA_STATS_LINK64,
> + IFLA_STATS_INET6,
IFLA_STATS_INET6 is part on patch #2, it's not used in this patch.
> + __IFLA_STATS_MAX,
> +};
> +
> +#define IFLA_STATS_MAX (__IFLA_STATS_MAX - 1)
> +
> +#define IFLA_STATS_FILTER_BIT(ATTR) (1 << (ATTR))
> +
> #endif /* _UAPI_LINUX_IF_LINK_H */
> diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h
> index ca764b5..2bbb300 100644
> --- a/include/uapi/linux/rtnetlink.h
> +++ b/include/uapi/linux/rtnetlink.h
> @@ -139,6 +139,13 @@ enum {
> RTM_GETNSID = 90,
> #define RTM_GETNSID RTM_GETNSID
>
> + RTM_NEWSTATS = 92,
> +#define RTM_NEWSTATS RTM_NEWSTATS
> + RTM_DELSTATS = 93,
> +#define RTM_DELSTATS RTM_DELSTATS
RTM_DELSTATS is never used.
> + RTM_GETSTATS = 94,
> +#define RTM_GETSTATS RTM_GETSTATS
> +
> __RTM_MAX,
> #define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1)
> };
> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
> index d2d9e5e..d1e3d17 100644
> --- a/net/core/rtnetlink.c
> +++ b/net/core/rtnetlink.c
[snip]
> +static noinline size_t if_nlmsg_stats_size(const struct net_device *dev,
> + u32 filter_mask)
Why are you using the 'noinline' attribute?
> +{
> + size_t size = 0;
> +
> + if (filter_mask & IFLA_STATS_FILTER_BIT(IFLA_STATS_LINK64))
> + size += nla_total_size(sizeof(struct rtnl_link_stats64));
> +
> + size += rtnl_link_get_af_stats_size(dev, filter_mask);
> +
> + return size;
> +}
next prev parent reply other threads:[~2016-03-14 15:00 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-13 1:56 [PATCH net-next 1/2] rtnetlink: add new RTM_GETSTATS message to dump link stats Roopa Prabhu
2016-03-14 14:51 ` Jiri Pirko
2016-03-14 18:45 ` roopa
2016-03-14 19:04 ` Jiri Pirko
2016-03-14 19:56 ` David Miller
2016-03-14 20:22 ` Jiri Pirko
2016-03-15 7:02 ` roopa
2016-03-15 6:24 ` roopa
2016-03-15 7:28 ` Jiri Pirko
2016-03-15 7:38 ` roopa
2016-03-15 7:52 ` Jiri Pirko
2016-03-15 8:08 ` roopa
2016-03-15 8:24 ` Jiri Pirko
2016-03-21 19:04 ` David Miller
2016-03-14 15:00 ` Nicolas Dichtel [this message]
2016-03-15 6:30 ` roopa
2016-03-15 8:20 ` Nicolas Dichtel
2016-03-16 6:44 ` roopa
2016-03-14 15:11 ` Elad Raz
2016-03-15 6:37 ` roopa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56E6D224.5020701@6wind.com \
--to=nicolas.dichtel@6wind.com \
--cc=davem@davemloft.net \
--cc=jhs@mojatatu.com \
--cc=netdev@vger.kernel.org \
--cc=roopa@cumulusnetworks.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.