All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Ken Chen <kenchen@google.com>
Cc: Ingo Molnar <mingo@elte.hu>, Paul Menage <menage@google.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [patch] cpuacct: add per cgroup run-delay accounting
Date: Wed, 17 Dec 2008 09:06:14 +0100	[thread overview]
Message-ID: <1229501174.9487.13.camel@twins> (raw)
In-Reply-To: <b040c32a0812162351u4876096aq7aa538873b4935d3@mail.gmail.com>

On Tue, 2008-12-16 at 23:51 -0800, Ken Chen wrote:
> This patch adds per cpuacct cgroup scheduler run-delay accounting.  we
> intent to use this stats to track group of tasks' wait time on CPU run
> queue for monitoring purpose.
> 
> Due to lack of atomic64_t support on 32-bit arch, this functionality is
> limited to 64-bit arch.
> 
> Signed-off-by: Ken Chen <kenchen@google.com>

You could add a seqcount instead?

> diff --git a/kernel/sched.c b/kernel/sched.c
> index e4bb1dd..4d1920d 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -1390,6 +1390,15 @@ static void cpuacct_charge(
>  static inline void cpuacct_charge(struct task_struct *tsk, u64 cputime) {}
>  #endif
> 
> +#if defined(CONFIG_CGROUP_CPUACCT) && defined(CONFIG_SCHEDSTATS) &&	\
> +    defined(CONFIG_64BIT)
> +static void
> +cpuacct_accumulate_run_delay(struct task_struct *task, u64 delta);
> +#else
> +static inline void
> +cpuacct_accumulate_run_delay(struct task_struct *t, u64 delta) {}
> +#endif
> +
>  static inline void inc_cpu_load(struct rq *rq, unsigned long load)
>  {
>  	update_load_add(&rq->load, load);
> @@ -9256,6 +9265,11 @@ struct cpuacct {
>  	struct cgroup_subsys_state css;
>  	/* cpuusage holds pointer to a u64-type object on every cpu */
>  	u64 *cpuusage;
> +
> +#if defined(CONFIG_SCHEDSTATS) && defined(CONFIG_64BIT)
> +	/* accumulative schedule rq wait time for tasks in this cgroup */
> +	atomic64_t run_delay;
> +#endif
>  };
> 
>  struct cgroup_subsys cpuacct_subsys;
> @@ -9347,12 +9361,33 @@ out:
>  	return err;
>  }
> 
> +#if defined(CONFIG_SCHEDSTATS) && defined(CONFIG_64BIT)
> +static u64 cpuacct_run_delay_read(struct cgroup *cgrp, struct cftype *cft)
> +{
> +	struct cpuacct *ca = cgroup_ca(cgrp);
> +	return atomic64_read(&ca->run_delay);
> +}
> +
> +static void cpuacct_accumulate_run_delay(struct task_struct *task, u64 delta)
> +{
> +	struct cpuacct *ca = task_ca(task);
> +	if (ca)
> +		atomic64_add(delta, &ca->run_delay);
> +}
> +#endif
> +
>  static struct cftype files[] = {
>  	{
>  		.name = "usage",
>  		.read_u64 = cpuusage_read,
>  		.write_u64 = cpuusage_write,
>  	},
> +#if defined(CONFIG_SCHEDSTATS) && defined(CONFIG_64BIT)
> +	{
> +		.name = "run_delay",
> +		.read_u64 = cpuacct_run_delay_read,
> +	},
> +#endif
>  };
> 
>  static int cpuacct_populate(struct cgroup_subsys *ss, struct cgroup *cgrp)
> diff --git a/kernel/sched_stats.h b/kernel/sched_stats.h
> index 7dbf72a..4272594 100644
> --- a/kernel/sched_stats.h
> +++ b/kernel/sched_stats.h
> @@ -180,6 +180,7 @@ static inline void sched_info_dequeued(
>  	sched_info_reset_dequeued(t);
>  	t->sched_info.run_delay += delta;
> 
> +	cpuacct_accumulate_run_delay(t, delta);
>  	rq_sched_info_dequeued(task_rq(t), delta);
>  }
> 
> @@ -199,6 +200,7 @@ static void sched_info_arrive(
>  	t->sched_info.last_arrival = now;
>  	t->sched_info.pcount++;
> 
> +	cpuacct_accumulate_run_delay(t, delta);
>  	rq_sched_info_arrive(task_rq(t), delta);
>  }


      reply	other threads:[~2008-12-17  8:06 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-17  7:51 [patch] cpuacct: add per cgroup run-delay accounting Ken Chen
2008-12-17  8:06 ` Peter Zijlstra [this message]

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=1229501174.9487.13.camel@twins \
    --to=a.p.zijlstra@chello.nl \
    --cc=kenchen@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=menage@google.com \
    --cc=mingo@elte.hu \
    /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.