Release 4.10 fs/proc/stat.c
#include <linux/cpumask.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/kernel_stat.h>
#include <linux/proc_fs.h>
#include <linux/sched.h>
#include <linux/seq_file.h>
#include <linux/slab.h>
#include <linux/time.h>
#include <linux/irqnr.h>
#include <linux/cputime.h>
#include <linux/tick.h>
#ifndef arch_irq_stat_cpu
#define arch_irq_stat_cpu(cpu) 0
#endif
#ifndef arch_irq_stat
#define arch_irq_stat() 0
#endif
#ifdef arch_idle_time
static cputime64_t get_idle_time(int cpu)
{
cputime64_t idle;
idle = kcpustat_cpu(cpu).cpustat[CPUTIME_IDLE];
if (cpu_online(cpu) && !nr_iowait_cpu(cpu))
idle += arch_idle_time(cpu);
return idle;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
martin schwidefsky | martin schwidefsky | 47 | 100.00% | 2 | 100.00% |
| Total | 47 | 100.00% | 2 | 100.00% |
static cputime64_t get_iowait_time(int cpu)
{
cputime64_t iowait;
iowait = kcpustat_cpu(cpu).cpustat[CPUTIME_IOWAIT];
if (cpu_online(cpu) && nr_iowait_cpu(cpu))
iowait += arch_idle_time(cpu);
return iowait;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
martin schwidefsky | martin schwidefsky | 46 | 100.00% | 2 | 100.00% |
| Total | 46 | 100.00% | 2 | 100.00% |
#else
static u64 get_idle_time(int cpu)
{
u64 idle, idle_time = -1ULL;
if (cpu_online(cpu))
idle_time = get_cpu_idle_time_us(cpu, NULL);
if (idle_time == -1ULL)
/* !NO_HZ or cpu offline so we can rely on cpustat.idle */
idle = kcpustat_cpu(cpu).cpustat[CPUTIME_IDLE];
else
idle = usecs_to_cputime64(idle_time);
return idle;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
michal hocko | michal hocko | 56 | 87.50% | 2 | 50.00% |
glauber costa | glauber costa | 7 | 10.94% | 1 | 25.00% |
andreas schwab | andreas schwab | 1 | 1.56% | 1 | 25.00% |
| Total | 64 | 100.00% | 4 | 100.00% |
static u64 get_iowait_time(int cpu)
{
u64 iowait, iowait_time = -1ULL;
if (cpu_online(cpu))
iowait_time = get_cpu_iowait_time_us(cpu, NULL);
if (iowait_time == -1ULL)
/* !NO_HZ or cpu offline so we can rely on cpustat.iowait */
iowait = kcpustat_cpu(cpu).cpustat[CPUTIME_IOWAIT];
else
iowait = usecs_to_cputime64(iowait_time);
return iowait;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
michal hocko | michal hocko | 56 | 87.50% | 2 | 50.00% |
glauber costa | glauber costa | 7 | 10.94% | 1 | 25.00% |
andreas schwab | andreas schwab | 1 | 1.56% | 1 | 25.00% |
| Total | 64 | 100.00% | 4 | 100.00% |
#endif
static int show_stat(struct seq_file *p, void *v)
{
int i, j;
u64 user, nice, system, idle, iowait, irq, softirq, steal;
u64 guest, guest_nice;
u64 sum = 0;
u64 sum_softirq = 0;
unsigned int per_softirq_sums[NR_SOFTIRQS] = {0};
struct timespec64 boottime;
user = nice = system = idle = iowait =
irq = softirq = steal = 0;
guest = guest_nice = 0;
getboottime64(&boottime);
for_each_possible_cpu(i) {
user += kcpustat_cpu(i).cpustat[CPUTIME_USER];
nice += kcpustat_cpu(i).cpustat[CPUTIME_NICE];
system += kcpustat_cpu(i).cpustat[CPUTIME_SYSTEM];
idle += get_idle_time(i);
iowait += get_iowait_time(i);
irq += kcpustat_cpu(i).cpustat[CPUTIME_IRQ];
softirq += kcpustat_cpu(i).cpustat[CPUTIME_SOFTIRQ];
steal += kcpustat_cpu(i).cpustat[CPUTIME_STEAL];
guest += kcpustat_cpu(i).cpustat[CPUTIME_GUEST];
guest_nice += kcpustat_cpu(i).cpustat[CPUTIME_GUEST_NICE];
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);
per_softirq_sums[j] += softirq_stat;
sum_softirq += softirq_stat;
}
}
sum += arch_irq_stat();
seq_put_decimal_ull(p, "cpu ", cputime64_to_clock_t(user));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(nice));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(system));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(idle));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(iowait));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(irq));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(softirq));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(steal));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(guest));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(guest_nice));
seq_putc(p, '\n');
for_each_online_cpu(i) {
/* Copy values here to work around gcc-2.95.3, gcc-2.96 */
user = kcpustat_cpu(i).cpustat[CPUTIME_USER];
nice = kcpustat_cpu(i).cpustat[CPUTIME_NICE];
system = kcpustat_cpu(i).cpustat[CPUTIME_SYSTEM];
idle = get_idle_time(i);
iowait = get_iowait_time(i);
irq = kcpustat_cpu(i).cpustat[CPUTIME_IRQ];
softirq = kcpustat_cpu(i).cpustat[CPUTIME_SOFTIRQ];
steal = kcpustat_cpu(i).cpustat[CPUTIME_STEAL];
guest = kcpustat_cpu(i).cpustat[CPUTIME_GUEST];
guest_nice = kcpustat_cpu(i).cpustat[CPUTIME_GUEST_NICE];
seq_printf(p, "cpu%d", i);
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(user));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(nice));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(system));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(idle));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(iowait));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(irq));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(softirq));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(steal));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(guest));
seq_put_decimal_ull(p, " ", cputime64_to_clock_t(guest_nice));
seq_putc(p, '\n');
}
seq_put_decimal_ull(p, "intr ", (unsigned long long)sum);
/* sum again ? it could be updated? */
for_each_irq_nr(j)
seq_put_decimal_ull(p, " ", kstat_irqs_usr(j));
seq_printf(p,
"\nctxt %llu\n"
"btime %llu\n"
"processes %lu\n"
"procs_running %lu\n"
"procs_blocked %lu\n",
nr_context_switches(),
(unsigned long long)boottime.tv_sec,
total_forks,
nr_running(),
nr_iowait());
seq_put_decimal_ull(p, "softirq ", (unsigned long long)sum_softirq);
for (i = 0; i < NR_SOFTIRQS; i++)
seq_put_decimal_ull(p, " ", per_softirq_sums[i]);
seq_putc(p, '\n');
return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
alexey dobriyan | alexey dobriyan | 362 | 47.63% | 2 | 14.29% |
kamezawa hiroyuki | kamezawa hiroyuki | 138 | 18.16% | 2 | 14.29% |
keika kobayashi | keika kobayashi | 93 | 12.24% | 1 | 7.14% |
glauber costa | glauber costa | 78 | 10.26% | 1 | 7.14% |
ryota ozaki | ryota ozaki | 28 | 3.68% | 1 | 7.14% |
joe perches | joe perches | 26 | 3.42% | 1 | 7.14% |
russell king | russell king | 14 | 1.84% | 1 | 7.14% |
arnd bergmann | arnd bergmann | 7 | 0.92% | 1 | 7.14% |
martin schwidefsky | martin schwidefsky | 5 | 0.66% | 1 | 7.14% |
yinghai lu | yinghai lu | 4 | 0.53% | 1 | 7.14% |
michal hocko | michal hocko | 4 | 0.53% | 1 | 7.14% |
thomas gleixner | thomas gleixner | 1 | 0.13% | 1 | 7.14% |
| Total | 760 | 100.00% | 14 | 100.00% |
static int stat_open(struct inode *inode, struct file *file)
{
size_t size = 1024 + 128 * num_online_cpus();
/* minimum size to display an interrupt count : 2 bytes */
size += 2 * nr_irqs;
return single_open_size(file, show_stat, NULL, size);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
alexey dobriyan | alexey dobriyan | 31 | 68.89% | 1 | 25.00% |
eric dumazet | eric dumazet | 10 | 22.22% | 1 | 25.00% |
heiko carstens | heiko carstens | 3 | 6.67% | 1 | 25.00% |
christoph lameter | christoph lameter | 1 | 2.22% | 1 | 25.00% |
| Total | 45 | 100.00% | 4 | 100.00% |
static const struct file_operations proc_stat_operations = {
.open = stat_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static int __init proc_stat_init(void)
{
proc_create("stat", 0, NULL, &proc_stat_operations);
return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
alexey dobriyan | alexey dobriyan | 24 | 100.00% | 1 | 100.00% |
| Total | 24 | 100.00% | 1 | 100.00% |
fs_initcall(proc_stat_init);
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp |
alexey dobriyan | alexey dobriyan | 503 | 43.70% | 2 | 8.70% |
kamezawa hiroyuki | kamezawa hiroyuki | 138 | 11.99% | 2 | 8.70% |
michal hocko | michal hocko | 119 | 10.34% | 2 | 8.70% |
martin schwidefsky | martin schwidefsky | 105 | 9.12% | 2 | 8.70% |
keika kobayashi | keika kobayashi | 93 | 8.08% | 1 | 4.35% |
glauber costa | glauber costa | 92 | 7.99% | 1 | 4.35% |
ryota ozaki | ryota ozaki | 28 | 2.43% | 1 | 4.35% |
joe perches | joe perches | 26 | 2.26% | 1 | 4.35% |
russell king | russell king | 14 | 1.22% | 1 | 4.35% |
eric dumazet | eric dumazet | 10 | 0.87% | 1 | 4.35% |
arnd bergmann | arnd bergmann | 7 | 0.61% | 1 | 4.35% |
yinghai lu | yinghai lu | 4 | 0.35% | 1 | 4.35% |
kosaki motohiro | kosaki motohiro | 3 | 0.26% | 1 | 4.35% |
heiko carstens | heiko carstens | 3 | 0.26% | 1 | 4.35% |
andreas schwab | andreas schwab | 2 | 0.17% | 1 | 4.35% |
thomas gleixner | thomas gleixner | 1 | 0.09% | 1 | 4.35% |
frederic weisbecker | frederic weisbecker | 1 | 0.09% | 1 | 4.35% |
paul gortmaker | paul gortmaker | 1 | 0.09% | 1 | 4.35% |
christoph lameter | christoph lameter | 1 | 0.09% | 1 | 4.35% |
| Total | 1151 | 100.00% | 23 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.