diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-11-26 15:23:14 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-11-26 15:23:14 -0800 | 
| commit | 77a05940eee7e9891cd6add7a690a3e762ee21b0 (patch) | |
| tree | 74f4f9b315659093059261a2da8adf7c1aa2a92f /fs/proc/stat.c | |
| parent | 3f59dbcace56fae7e4ed303bab90f1bedadcfdf4 (diff) | |
| parent | de881a341c4143650fa50ce95cf450a5c94faa9f (diff) | |
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull scheduler updates from Ingo Molnar:
 "The biggest changes in this cycle were:
   - Make kcpustat vtime aware (Frederic Weisbecker)
   - Rework the CFS load_balance() logic (Vincent Guittot)
   - Misc cleanups, smaller enhancements, fixes.
  The load-balancing rework is the most intrusive change: it replaces
  the old heuristics that have become less meaningful after the
  introduction of the PELT metrics, with a grounds-up load-balancing
  algorithm.
  As such it's not really an iterative series, but replaces the old
  load-balancing logic with the new one. We hope there are no
  performance regressions left - but statistically it's highly probable
  that there *is* going to be some workload that is hurting from these
  chnages. If so then we'd prefer to have a look at that workload and
  fix its scheduling, instead of reverting the changes"
* 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (46 commits)
  rackmeter: Use vtime aware kcpustat accessor
  leds: Use all-in-one vtime aware kcpustat accessor
  cpufreq: Use vtime aware kcpustat accessors for user time
  procfs: Use all-in-one vtime aware kcpustat accessor
  sched/vtime: Bring up complete kcpustat accessor
  sched/cputime: Support other fields on kcpustat_field()
  sched/cpufreq: Move the cfs_rq_util_change() call to cpufreq_update_util()
  sched/fair: Add comments for group_type and balancing at SD_NUMA level
  sched/fair: Fix rework of find_idlest_group()
  sched/uclamp: Fix overzealous type replacement
  sched/Kconfig: Fix spelling mistake in user-visible help text
  sched/core: Further clarify sched_class::set_next_task()
  sched/fair: Use mul_u32_u32()
  sched/core: Simplify sched_class::pick_next_task()
  sched/core: Optimize pick_next_task()
  sched/core: Make pick_next_task_idle() more consistent
  sched/fair: Better document newidle_balance()
  leds: Use vtime aware kcpustat accessor to fetch CPUTIME_SYSTEM
  cpufreq: Use vtime aware kcpustat accessor to fetch CPUTIME_SYSTEM
  procfs: Use vtime aware kcpustat accessor to fetch CPUTIME_SYSTEM
  ...
Diffstat (limited to 'fs/proc/stat.c')
| -rw-r--r-- | fs/proc/stat.c | 54 | 
1 files changed, 30 insertions, 24 deletions
diff --git a/fs/proc/stat.c b/fs/proc/stat.c index 80c305f206bb..37bdbec5b402 100644 --- a/fs/proc/stat.c +++ b/fs/proc/stat.c @@ -120,20 +120,23 @@ static int show_stat(struct seq_file *p, void *v)  	getboottime64(&boottime);  	for_each_possible_cpu(i) { -		struct kernel_cpustat *kcs = &kcpustat_cpu(i); +		struct kernel_cpustat kcpustat; +		u64 *cpustat = kcpustat.cpustat; -		user += kcs->cpustat[CPUTIME_USER]; -		nice += kcs->cpustat[CPUTIME_NICE]; -		system += kcs->cpustat[CPUTIME_SYSTEM]; -		idle += get_idle_time(kcs, i); -		iowait += get_iowait_time(kcs, i); -		irq += kcs->cpustat[CPUTIME_IRQ]; -		softirq += kcs->cpustat[CPUTIME_SOFTIRQ]; -		steal += kcs->cpustat[CPUTIME_STEAL]; -		guest += kcs->cpustat[CPUTIME_GUEST]; -		guest_nice += kcs->cpustat[CPUTIME_GUEST_NICE]; -		sum += kstat_cpu_irqs_sum(i); -		sum += arch_irq_stat_cpu(i); +		kcpustat_cpu_fetch(&kcpustat, i); + +		user		+= cpustat[CPUTIME_USER]; +		nice		+= cpustat[CPUTIME_NICE]; +		system		+= cpustat[CPUTIME_SYSTEM]; +		idle		+= get_idle_time(&kcpustat, i); +		iowait		+= get_iowait_time(&kcpustat, i); +		irq		+= cpustat[CPUTIME_IRQ]; +		softirq		+= cpustat[CPUTIME_SOFTIRQ]; +		steal		+= cpustat[CPUTIME_STEAL]; +		guest		+= cpustat[CPUTIME_GUEST]; +		guest_nice	+= cpustat[CPUTIME_USER]; +		sum		+= kstat_cpu_irqs_sum(i); +		sum		+= arch_irq_stat_cpu(i);  		for (j = 0; j < NR_SOFTIRQS; j++) {  			unsigned int softirq_stat = kstat_softirqs_cpu(j, i); @@ -157,19 +160,22 @@ static int show_stat(struct seq_file *p, void *v)  	seq_putc(p, '\n');  	for_each_online_cpu(i) { -		struct kernel_cpustat *kcs = &kcpustat_cpu(i); +		struct kernel_cpustat kcpustat; +		u64 *cpustat = kcpustat.cpustat; + +		kcpustat_cpu_fetch(&kcpustat, i);  		/* Copy values here to work around gcc-2.95.3, gcc-2.96 */ -		user = kcs->cpustat[CPUTIME_USER]; -		nice = kcs->cpustat[CPUTIME_NICE]; -		system = kcs->cpustat[CPUTIME_SYSTEM]; -		idle = get_idle_time(kcs, i); -		iowait = get_iowait_time(kcs, i); -		irq = kcs->cpustat[CPUTIME_IRQ]; -		softirq = kcs->cpustat[CPUTIME_SOFTIRQ]; -		steal = kcs->cpustat[CPUTIME_STEAL]; -		guest = kcs->cpustat[CPUTIME_GUEST]; -		guest_nice = kcs->cpustat[CPUTIME_GUEST_NICE]; +		user		= cpustat[CPUTIME_USER]; +		nice		= cpustat[CPUTIME_NICE]; +		system		= cpustat[CPUTIME_SYSTEM]; +		idle		= get_idle_time(&kcpustat, i); +		iowait		= get_iowait_time(&kcpustat, i); +		irq		= cpustat[CPUTIME_IRQ]; +		softirq		= cpustat[CPUTIME_SOFTIRQ]; +		steal		= cpustat[CPUTIME_STEAL]; +		guest		= cpustat[CPUTIME_GUEST]; +		guest_nice	= cpustat[CPUTIME_USER];  		seq_printf(p, "cpu%d", i);  		seq_put_decimal_ull(p, " ", nsec_to_clock_t(user));  		seq_put_decimal_ull(p, " ", nsec_to_clock_t(nice));  | 
