Re: [patch 03/15] sched: accumulate per-cfs_rq cpu usage

From: Peter Zijlstra
Date: Tue Apr 05 2011 - 09:29:30 EST


On Tue, 2011-03-22 at 20:03 -0700, Paul Turner wrote:
> +static void request_cfs_rq_quota(struct cfs_rq *cfs_rq)
> +{
> + struct task_group *tg = cfs_rq->tg;
> + struct cfs_bandwidth *cfs_b = tg_cfs_bandwidth(tg);
> + u64 amount = 0, min_amount;
> +
> + min_amount = sched_cfs_bandwidth_slice() + (-cfs_rq->quota_remaining);
> +
> + if (cfs_b->runtime > 0 || cfs_b->quota == RUNTIME_INF) {
> + raw_spin_lock(&cfs_b->lock);
> + if (cfs_b->quota != RUNTIME_INF) {
> + amount = min(cfs_b->runtime, min_amount);
> + cfs_b->runtime -= amount;
> + } else {
> + amount = min_amount;
> + }

So why would quota be RUNTIME_INF and quota_enabled be true? If its due
to a race when fiddling with the cgroup filesystem setting things up
that else branch wants a comment, if its for another reason all together
there's also a comment missing somewhere ;-)

> + raw_spin_unlock(&cfs_b->lock);
> + }
> +
> + cfs_rq->quota_remaining += amount;
> +}
> +
> +static void account_cfs_rq_quota(struct cfs_rq *cfs_rq,
> + unsigned long delta_exec)
> +{
> + if (!cfs_rq->quota_enabled)
> + return;
> +
> + cfs_rq->quota_remaining -= delta_exec;
> +
> + if (cfs_rq->quota_remaining > 0)
> + return;
> +
> + request_cfs_rq_quota(cfs_rq);
> +}
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/