Skip to content

Commit

Permalink
cpuacct: Introduce cgroup_account_cputime[_field]()
Browse files Browse the repository at this point in the history
Introduce cgroup_account_cputime[_field]() which wrap cpuacct_charge()
and cgroup_account_field().  This doesn't introduce any functional
changes and will be used to add cgroup basic resource accounting.

Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
  • Loading branch information
Tejun Heo committed Sep 25, 2017
1 parent cfb766d commit d2cc5ed
Show file tree
Hide file tree
Showing 8 changed files with 44 additions and 23 deletions.
38 changes: 38 additions & 0 deletions include/linux/cgroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include <linux/nsproxy.h>
#include <linux/user_namespace.h>
#include <linux/refcount.h>
#include <linux/kernel_stat.h>

#include <linux/cgroup-defs.h>

Expand Down Expand Up @@ -688,6 +689,43 @@ static inline void cgroup_path_from_kernfs_id(const union kernfs_node_id *id,
char *buf, size_t buflen) {}
#endif /* !CONFIG_CGROUPS */

/*
* Basic resource stats.
*/
#ifdef CONFIG_CGROUPS

#ifdef CONFIG_CGROUP_CPUACCT
void cpuacct_charge(struct task_struct *tsk, u64 cputime);
void cpuacct_account_field(struct task_struct *tsk, int index, u64 val);
#else
static inline void cpuacct_charge(struct task_struct *tsk, u64 cputime) {}
static inline void cpuacct_account_field(struct task_struct *tsk, int index,
u64 val) {}
#endif

static inline void cgroup_account_cputime(struct task_struct *task,
u64 delta_exec)
{
cpuacct_charge(task, delta_exec);
}

static inline void cgroup_account_cputime_field(struct task_struct *task,
enum cpu_usage_stat index,
u64 delta_exec)
{
cpuacct_account_field(task, index, delta_exec);
}

#else /* CONFIG_CGROUPS */

static inline void cgroup_account_cputime(struct task_struct *task,
u64 delta_exec) {}
static inline void cgroup_account_cputime_field(struct task_struct *task,
enum cpu_usage_stat index,
u64 delta_exec) {}

#endif /* CONFIG_CGROUPS */

/*
* sock->sk_cgrp_data handling. For more info, see sock_cgroup_data
* definition in cgroup-defs.h.
Expand Down
17 changes: 0 additions & 17 deletions kernel/sched/cpuacct.h

This file was deleted.

2 changes: 1 addition & 1 deletion kernel/sched/cputime.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ static inline void task_group_account_field(struct task_struct *p, int index,
*/
__this_cpu_add(kernel_cpustat.cpustat[index], tmp);

cpuacct_account_field(p, index, tmp);
cgroup_account_cputime_field(p, index, tmp);
}

/*
Expand Down
2 changes: 1 addition & 1 deletion kernel/sched/deadline.c
Original file line number Diff line number Diff line change
Expand Up @@ -1143,7 +1143,7 @@ static void update_curr_dl(struct rq *rq)
account_group_exec_runtime(curr, delta_exec);

curr->se.exec_start = rq_clock_task(rq);
cpuacct_charge(curr, delta_exec);
cgroup_account_cputime(curr, delta_exec);

sched_rt_avg_update(rq, delta_exec);

Expand Down
2 changes: 1 addition & 1 deletion kernel/sched/fair.c
Original file line number Diff line number Diff line change
Expand Up @@ -851,7 +851,7 @@ static void update_curr(struct cfs_rq *cfs_rq)
struct task_struct *curtask = task_of(curr);

trace_sched_stat_runtime(curtask, delta_exec, curr->vruntime);
cpuacct_charge(curtask, delta_exec);
cgroup_account_cputime(curtask, delta_exec);
account_group_exec_runtime(curtask, delta_exec);
}

Expand Down
2 changes: 1 addition & 1 deletion kernel/sched/rt.c
Original file line number Diff line number Diff line change
Expand Up @@ -979,7 +979,7 @@ static void update_curr_rt(struct rq *rq)
account_group_exec_runtime(curr, delta_exec);

curr->se.exec_start = rq_clock_task(rq);
cpuacct_charge(curr, delta_exec);
cgroup_account_cputime(curr, delta_exec);

sched_rt_avg_update(rq, delta_exec);

Expand Down
2 changes: 1 addition & 1 deletion kernel/sched/sched.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@
#include <linux/irq_work.h>
#include <linux/tick.h>
#include <linux/slab.h>
#include <linux/cgroup.h>

#ifdef CONFIG_PARAVIRT
#include <asm/paravirt.h>
#endif

#include "cpupri.h"
#include "cpudeadline.h"
#include "cpuacct.h"

#ifdef CONFIG_SCHED_DEBUG
# define SCHED_WARN_ON(x) WARN_ONCE(x, #x)
Expand Down
2 changes: 1 addition & 1 deletion kernel/sched/stop_task.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ static void put_prev_task_stop(struct rq *rq, struct task_struct *prev)
account_group_exec_runtime(curr, delta_exec);

curr->se.exec_start = rq_clock_task(rq);
cpuacct_charge(curr, delta_exec);
cgroup_account_cputime(curr, delta_exec);
}

static void task_tick_stop(struct rq *rq, struct task_struct *curr, int queued)
Expand Down

0 comments on commit d2cc5ed

Please sign in to comment.