From: Andrey Vagin <avagin@openvz.org> To: linux-kernel@vger.kernel.org Cc: linux-api@vger.kernel.org, Andrey Vagin <avagin@openvz.org>, Oleg Nesterov <oleg@redhat.com>, Andrew Morton <akpm@linux-foundation.org>, Cyrill Gorcunov <gorcunov@openvz.org>, Pavel Emelyanov <xemul@parallels.com>, Roger Luethi <rl@hellgate.ch>, Arnd Bergmann <arnd@arndb.de>, Arnaldo Carvalho de Melo <acme@kernel.org>, David Ahern <dsahern@gmail.com>, Andy Lutomirski <luto@amacapital.net>, Pavel Odintsov <pavel.odintsov@gmail.com> Subject: [PATCH 11/24] task_diag: add a new group to get task statistics Date: Mon, 6 Jul 2015 11:47:12 +0300 [thread overview] Message-ID: <1436172445-6979-12-git-send-email-avagin@openvz.org> (raw) In-Reply-To: <1436172445-6979-1-git-send-email-avagin@openvz.org> Signed-off-by: Andrey Vagin <avagin@openvz.org> --- include/linux/taskstats_kern.h | 2 ++ include/uapi/linux/task_diag.h | 2 ++ kernel/taskdiag.c | 30 ++++++++++++++++++++++++++++++ kernel/taskstats.c | 2 +- 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/include/linux/taskstats_kern.h b/include/linux/taskstats_kern.h index 716835f..8faec32 100644 --- a/include/linux/taskstats_kern.h +++ b/include/linux/taskstats_kern.h @@ -32,6 +32,8 @@ int taskdiag_doit(struct sk_buff *skb, struct genl_info *info); struct netlink_callback; int taskdiag_dumpit(struct sk_buff *skb, struct netlink_callback *cb); +extern int fill_stats_for_pid(pid_t pid, struct taskstats *stats); + #else static inline void taskstats_exit(struct task_struct *tsk, int group_dead) {} diff --git a/include/uapi/linux/task_diag.h b/include/uapi/linux/task_diag.h index af192db..c51380a 100644 --- a/include/uapi/linux/task_diag.h +++ b/include/uapi/linux/task_diag.h @@ -8,6 +8,7 @@ enum { /* optional attributes which can be specified in show_flags */ TASK_DIAG_BASE = 0, TASK_DIAG_CRED, + TASK_DIAG_STAT, /* other attributes */ TASK_DIAG_PID = 64, /* u32 */ @@ -18,6 +19,7 @@ enum { #define TASK_DIAG_SHOW_BASE (1ULL << TASK_DIAG_BASE) #define TASK_DIAG_SHOW_CRED (1ULL << TASK_DIAG_CRED) +#define TASK_DIAG_SHOW_STAT (1ULL << TASK_DIAG_STAT) enum { TASK_DIAG_RUNNING, diff --git a/kernel/taskdiag.c b/kernel/taskdiag.c index 6dd3361..a49ccab 100644 --- a/kernel/taskdiag.c +++ b/kernel/taskdiag.c @@ -6,6 +6,7 @@ #include <linux/ptrace.h> #include <linux/proc_fs.h> #include <linux/sched.h> +#include <linux/taskstats.h> static size_t taskdiag_packet_size(u64 show_flags) { @@ -19,6 +20,9 @@ static size_t taskdiag_packet_size(u64 show_flags) if (show_flags & TASK_DIAG_SHOW_CRED) size += nla_total_size(sizeof(struct task_diag_creds)); + if (show_flags & TASK_DIAG_SHOW_STAT) + size += nla_total_size(sizeof(struct taskstats)); + return size; } @@ -94,6 +98,24 @@ static inline void caps2diag(struct task_diag_caps *diag, const kernel_cap_t *ca diag->cap[i] = cap->cap[i]; } +static int fill_stats(struct task_struct *tsk, struct sk_buff *skb) +{ + struct taskstats *diag_stats; + struct nlattr *attr; + int ret; + + attr = nla_reserve(skb, TASK_DIAG_STAT, sizeof(struct taskstats)); + if (!attr) + return -EMSGSIZE; + + diag_stats = nla_data(attr); + + ret = fill_stats_for_pid(task_pid_vnr(tsk), diag_stats); + if (ret) + return ret; + return 0; +} + static int fill_creds(struct task_struct *p, struct sk_buff *skb) { struct user_namespace *user_ns = current_user_ns(); @@ -168,6 +190,14 @@ static int task_diag_fill(struct task_struct *tsk, struct sk_buff *skb, i++; } + if (show_flags & TASK_DIAG_SHOW_STAT) { + if (i >= n) + err = fill_stats(tsk, skb); + if (err) + goto err; + i++; + } + genlmsg_end(skb, reply); if (cb) cb->args[2] = 0; diff --git a/kernel/taskstats.c b/kernel/taskstats.c index 40f2cdf2..3b3d660 100644 --- a/kernel/taskstats.c +++ b/kernel/taskstats.c @@ -192,7 +192,7 @@ static void fill_stats(struct user_namespace *user_ns, xacct_add_tsk(stats, tsk); } -static int fill_stats_for_pid(pid_t pid, struct taskstats *stats) +int fill_stats_for_pid(pid_t pid, struct taskstats *stats) { struct task_struct *tsk; -- 2.1.0
WARNING: multiple messages have this Message-ID (diff)
From: Andrey Vagin <avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org> To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Andrey Vagin <avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>, Oleg Nesterov <oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>, Cyrill Gorcunov <gorcunov-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>, Pavel Emelyanov <xemul-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>, Roger Luethi <rl-7uj+XXdSDtwfv37vnLkPlQ@public.gmane.org>, Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>, Arnaldo Carvalho de Melo <acme-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, David Ahern <dsahern-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, Andy Lutomirski <luto-kltTT9wpgjJwATOyAt5JVQ@public.gmane.org>, Pavel Odintsov <pavel.odintsov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Subject: [PATCH 11/24] task_diag: add a new group to get task statistics Date: Mon, 6 Jul 2015 11:47:12 +0300 [thread overview] Message-ID: <1436172445-6979-12-git-send-email-avagin@openvz.org> (raw) In-Reply-To: <1436172445-6979-1-git-send-email-avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org> Signed-off-by: Andrey Vagin <avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org> --- include/linux/taskstats_kern.h | 2 ++ include/uapi/linux/task_diag.h | 2 ++ kernel/taskdiag.c | 30 ++++++++++++++++++++++++++++++ kernel/taskstats.c | 2 +- 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/include/linux/taskstats_kern.h b/include/linux/taskstats_kern.h index 716835f..8faec32 100644 --- a/include/linux/taskstats_kern.h +++ b/include/linux/taskstats_kern.h @@ -32,6 +32,8 @@ int taskdiag_doit(struct sk_buff *skb, struct genl_info *info); struct netlink_callback; int taskdiag_dumpit(struct sk_buff *skb, struct netlink_callback *cb); +extern int fill_stats_for_pid(pid_t pid, struct taskstats *stats); + #else static inline void taskstats_exit(struct task_struct *tsk, int group_dead) {} diff --git a/include/uapi/linux/task_diag.h b/include/uapi/linux/task_diag.h index af192db..c51380a 100644 --- a/include/uapi/linux/task_diag.h +++ b/include/uapi/linux/task_diag.h @@ -8,6 +8,7 @@ enum { /* optional attributes which can be specified in show_flags */ TASK_DIAG_BASE = 0, TASK_DIAG_CRED, + TASK_DIAG_STAT, /* other attributes */ TASK_DIAG_PID = 64, /* u32 */ @@ -18,6 +19,7 @@ enum { #define TASK_DIAG_SHOW_BASE (1ULL << TASK_DIAG_BASE) #define TASK_DIAG_SHOW_CRED (1ULL << TASK_DIAG_CRED) +#define TASK_DIAG_SHOW_STAT (1ULL << TASK_DIAG_STAT) enum { TASK_DIAG_RUNNING, diff --git a/kernel/taskdiag.c b/kernel/taskdiag.c index 6dd3361..a49ccab 100644 --- a/kernel/taskdiag.c +++ b/kernel/taskdiag.c @@ -6,6 +6,7 @@ #include <linux/ptrace.h> #include <linux/proc_fs.h> #include <linux/sched.h> +#include <linux/taskstats.h> static size_t taskdiag_packet_size(u64 show_flags) { @@ -19,6 +20,9 @@ static size_t taskdiag_packet_size(u64 show_flags) if (show_flags & TASK_DIAG_SHOW_CRED) size += nla_total_size(sizeof(struct task_diag_creds)); + if (show_flags & TASK_DIAG_SHOW_STAT) + size += nla_total_size(sizeof(struct taskstats)); + return size; } @@ -94,6 +98,24 @@ static inline void caps2diag(struct task_diag_caps *diag, const kernel_cap_t *ca diag->cap[i] = cap->cap[i]; } +static int fill_stats(struct task_struct *tsk, struct sk_buff *skb) +{ + struct taskstats *diag_stats; + struct nlattr *attr; + int ret; + + attr = nla_reserve(skb, TASK_DIAG_STAT, sizeof(struct taskstats)); + if (!attr) + return -EMSGSIZE; + + diag_stats = nla_data(attr); + + ret = fill_stats_for_pid(task_pid_vnr(tsk), diag_stats); + if (ret) + return ret; + return 0; +} + static int fill_creds(struct task_struct *p, struct sk_buff *skb) { struct user_namespace *user_ns = current_user_ns(); @@ -168,6 +190,14 @@ static int task_diag_fill(struct task_struct *tsk, struct sk_buff *skb, i++; } + if (show_flags & TASK_DIAG_SHOW_STAT) { + if (i >= n) + err = fill_stats(tsk, skb); + if (err) + goto err; + i++; + } + genlmsg_end(skb, reply); if (cb) cb->args[2] = 0; diff --git a/kernel/taskstats.c b/kernel/taskstats.c index 40f2cdf2..3b3d660 100644 --- a/kernel/taskstats.c +++ b/kernel/taskstats.c @@ -192,7 +192,7 @@ static void fill_stats(struct user_namespace *user_ns, xacct_add_tsk(stats, tsk); } -static int fill_stats_for_pid(pid_t pid, struct taskstats *stats) +int fill_stats_for_pid(pid_t pid, struct taskstats *stats) { struct task_struct *tsk; -- 2.1.0
next prev parent reply other threads:[~2015-07-06 8:51 UTC|newest] Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-07-06 8:47 [PATCH 0/24] kernel: add a netlink interface to get information about processes (v2) Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` [PATCH 01/24] kernel: define taststats commands in the one place Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` [PATCH 02/24] kernel: add a netlink interface to get information about tasks (v2) Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` [PATCH 03/24] kernel: make taskstats available from all net namespaces Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` [PATCH 04/24] kernel: move next_tgid from fs/proc Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` [PATCH 05/24] task_diag: add ability to get information about all tasks Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` [PATCH 06/24] task_diag: add ability to split per-task data on a few netlink messages Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` [PATCH 07/24] task_diag: add a new group to get process credentials Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` [PATCH 08/24] proc: pick out a function to iterate task children Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-14 18:02 ` Oleg Nesterov 2015-07-14 18:02 ` Oleg Nesterov 2015-07-17 15:57 ` Andrew Vagin 2015-07-17 15:57 ` Andrew Vagin 2015-07-18 21:22 ` Oleg Nesterov 2015-07-18 21:22 ` Oleg Nesterov 2015-07-06 8:47 ` [PATCH 09/24] proc: move task_next_child() from fs/proc Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` [PATCH 10/24] task_diag: add ability to dump children (v2) Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin [this message] 2015-07-06 8:47 ` [PATCH 11/24] task_diag: add a new group to get task statistics Andrey Vagin 2015-07-06 8:47 ` [PATCH 12/24] task_diag: add a new group to get tasks memory mappings (v2) Andrey Vagin 2015-07-14 18:08 ` Oleg Nesterov 2015-07-14 18:08 ` Oleg Nesterov 2015-07-15 2:02 ` David Ahern 2015-07-15 2:02 ` David Ahern 2015-07-06 8:47 ` [PATCH 13/24] task_diag: shows memory consumption for " Andrey Vagin 2015-07-06 8:47 ` [PATCH 14/24] task_diag: add a marcos to enumirate memory mappings Andrey Vagin 2015-07-06 8:47 ` [PATCH 15/24] proc: give task_struct instead of pid into first_tid Andrey Vagin 2015-07-14 18:11 ` Oleg Nesterov 2015-07-06 8:47 ` [PATCH 16/24] proc: move first_tid and next_tid out of proc Andrey Vagin 2015-07-06 8:47 ` [PATCH 17/24] task_diag: add ability to dump theads Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 8:47 ` [PATCH 18/24] task_diag: add ability to handle one task in a continious mode Andrey Vagin 2015-07-06 8:47 ` [PATCH 19/24] task_diag: Add option to dump all threads for all tasks Andrey Vagin 2015-07-06 8:47 ` [PATCH 20/24] task_diag: Only add VMAs for thread_group leader Andrey Vagin 2015-07-14 17:47 ` Oleg Nesterov 2015-07-14 17:47 ` Oleg Nesterov 2015-07-15 2:01 ` David Ahern 2015-07-15 13:31 ` Oleg Nesterov 2015-07-15 13:31 ` Oleg Nesterov 2015-07-06 8:47 ` [PATCH 21/24] task diag: Add support for TGID attribute Andrey Vagin 2015-07-06 8:47 ` [PATCH 22/24] Documentation: add documentation for task_diag Andrey Vagin 2015-07-06 8:47 ` [PATCH 23/24] selftest: check the task_diag functinonality Andrey Vagin 2015-07-06 8:47 ` [PATCH 24/24] task_diag: Enhance fork tool to spawn threads Andrey Vagin 2015-07-06 8:47 ` Andrey Vagin 2015-07-06 17:10 ` [PATCH 0/24] kernel: add a netlink interface to get information about processes (v2) Andy Lutomirski 2015-07-07 15:43 ` Andrew Vagin 2015-07-07 15:56 ` Andy Lutomirski 2015-07-07 15:56 ` Andy Lutomirski 2015-07-07 16:17 ` David Ahern 2015-07-07 16:17 ` David Ahern 2015-07-07 16:24 ` Andy Lutomirski 2015-07-07 16:41 ` David Ahern 2015-07-07 16:41 ` David Ahern 2015-07-08 16:10 ` Andrew Vagin 2015-07-08 16:10 ` Andrew Vagin 2015-07-08 17:39 ` Andy Lutomirski 2015-07-08 22:49 ` Andrey Vagin 2015-07-08 23:48 ` Andy Lutomirski 2015-07-08 23:48 ` Andy Lutomirski 2015-07-07 16:25 ` Arnaldo Carvalho de Melo 2015-07-07 16:25 ` Arnaldo Carvalho de Melo 2015-07-07 16:27 ` Andy Lutomirski 2015-07-07 16:27 ` Andy Lutomirski 2015-07-07 16:56 ` David Ahern 2015-07-07 16:56 ` David Ahern 2015-11-24 15:18 ` Andrew Vagin 2015-11-24 15:18 ` Andrew Vagin 2015-12-03 23:20 ` Andy Lutomirski 2015-12-03 23:20 ` Andy Lutomirski 2015-12-03 23:43 ` Arnd Bergmann 2015-12-14 8:05 ` Andrew Vagin 2015-12-14 8:05 ` Andrew Vagin 2015-12-14 7:52 ` Andrew Vagin 2015-12-14 7:52 ` Andrew Vagin 2015-12-14 22:38 ` Andy Lutomirski 2015-12-15 15:53 ` Andrew Vagin 2015-12-15 15:53 ` Andrew Vagin 2015-12-15 16:43 ` Andy Lutomirski 2015-12-15 16:43 ` Andy Lutomirski
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=1436172445-6979-12-git-send-email-avagin@openvz.org \ --to=avagin@openvz.org \ --cc=acme@kernel.org \ --cc=akpm@linux-foundation.org \ --cc=arnd@arndb.de \ --cc=dsahern@gmail.com \ --cc=gorcunov@openvz.org \ --cc=linux-api@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=luto@amacapital.net \ --cc=oleg@redhat.com \ --cc=pavel.odintsov@gmail.com \ --cc=rl@hellgate.ch \ --cc=xemul@parallels.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: linkBe 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.