提交 c8924363 编写于 作者: S Shailabh Nagar 提交者: Linus Torvalds

[PATCH] per-task delay accounting: avoid send without listeners

Don't send taskstats (per-pid or per-tgid) on thread exit when no one is
listening for such data.

Currently the taskstats interface allocates a structure, fills it in and
calls netlink to send out per-pid and per-tgid stats regardless of whether
a userspace listener for the data exists (netlink layer would check for
that and avoid the multicast).

As a result of this patch, the check for the no-listener case is performed
early, avoiding the redundant allocation and filling up of the taskstats
structures.
Signed-off-by: NBalbir Singh <balbir@in.ibm.com>
Signed-off-by: NShailabh Nagar <nagar@watson.ibm.com>
Cc: Jay Lan <jlan@engr.sgi.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 9e06d3f9
......@@ -9,6 +9,7 @@
#include <linux/taskstats.h>
#include <linux/sched.h>
#include <net/genetlink.h>
enum {
TASKSTATS_MSG_UNICAST, /* send data only to requester */
......@@ -19,9 +20,19 @@ enum {
extern kmem_cache_t *taskstats_cache;
extern struct mutex taskstats_exit_mutex;
static inline int taskstats_has_listeners(void)
{
if (!genl_sock)
return 0;
return netlink_has_listeners(genl_sock, TASKSTATS_LISTEN_GROUP);
}
static inline void taskstats_exit_alloc(struct taskstats **ptidstats)
{
*ptidstats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL);
*ptidstats = NULL;
if (taskstats_has_listeners())
*ptidstats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL);
}
static inline void taskstats_exit_free(struct taskstats *tidstats)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册