- 论坛徽章:
- 5
|
问题1,是不是代表当前的调用这个内核函数的进程优先级?
问题2,可以通过补丁形式让进 ...
colinchhe 发表于 2010-10-22 14:19 ![]()
- does
- the fine granularity accounting of user, system, hardirq, softirq times.
- Adding that option on archs like x86 will be challenging however, given the
- state of TSC reliability on various platforms and also the overhead it will
- add in syscall entry exit.
- Instead, add a lighter variant that only does finer accounting of
- hardirq and softirq times, providing precise irq times (instead of timer tick
- based samples). This accounting is added with a new config option
- CONFIG_IRQ_TIME_ACCOUNTING so that there won't be any overhead for users not
- interested in paying the perf penalty.
- This accounting is based on sched_clock, with the code being generic.
- So, other archs may find it useful as well.
- This patch just adds the core logic and does not enable this logic yet
- +static DEFINE_PER_CPU(u64, cpu_hardirq_time);
- +static DEFINE_PER_CPU(u64, cpu_softirq_time);
- +
- +static DEFINE_PER_CPU(u64, irq_start_time);
- +static int sched_clock_irqtime;
- +
- +void enable_sched_clock_irqtime(void)
- +{
- + sched_clock_irqtime = 1;
- +}
- +
- +void disable_sched_clock_irqtime(void)
- +{
- + sched_clock_irqtime = 0;
- +}
- +
- +void account_system_vtime(struct task_struct *curr)
- +{
- + unsigned long flags;
- + int cpu;
- + u64 now, delta;
- +
- + if (!sched_clock_irqtime)
- + return;
- +
- + local_irq_save(flags);
- +
- + now = sched_clock();
- + cpu = smp_processor_id();
- + delta = now - per_cpu(irq_start_time, cpu);
- + per_cpu(irq_start_time, cpu) = now;
- + /*
- + * We do not account for softirq time from ksoftirqd here.
- + * We want to continue accounting softirq time to ksoftirqd thread
- + * in that case, so as not to confuse scheduler with a special task
- + * that do not consume any time, but still wants to run.
- + */
- + if (hardirq_count())
- + per_cpu(cpu_hardirq_time, cpu) += delta;
- + else if (in_serving_softirq() && !(curr->flags & PF_KSOFTIRQD))
- + per_cpu(cpu_softirq_time, cpu) += delta;
- +
- + local_irq_restore(flags);
- +}
- +
- +#endif
- +
复制代码 就是说,如果sched_clock_irqtime=0,就return了,就不now = sched_clock();了 |
|