Messages in this thread | | | Subject | Re: [PATCH 1/5] sched,time: count actually elapsed irq & softirq time | From | Rik van Riel <> | Date | Tue, 21 Jun 2016 18:20:23 -0400 |
| |
On Tue, 2016-06-21 at 23:21 +0200, Peter Zijlstra wrote: > On Thu, Jun 16, 2016 at 12:06:03PM -0400, riel@redhat.com wrote: > > > > +static unsigned long irqtime_account_hi_update(unsigned long > > max_jiffies) > > { > > u64 *cpustat = kcpustat_this_cpu->cpustat; > > + unsigned long irq_jiffies; > > unsigned long flags; > > + u64 irq; > > > > local_irq_save(flags); > > + irq = this_cpu_read(cpu_hardirq_time) - > > cpustat[CPUTIME_IRQ]; > > + irq_jiffies = min(cputime_to_jiffies(irq), max_jiffies); > cputime_to_jiffies is a division, could we not avoid that by doing > something like: > > irq_jiffies = min(irq, jiffies_to_cputime(max_jiffies)); > while (irq_jiffies > cputime_one_jiffy) { > irq_jiffies -= cputime_one_jiffy; > cpustat[CPUTIME_IRQ] += cputime_one_jiffy; > } > > assuming that the loop is 'rare' etc.. If not, only do the division > on > that same > cputime_one_jiffy condition.
I suspect the loop is not rare on systems with nohz_idle, where it may be quite a while before a timer tick happens on an idle cpu.
I can certainly make sure the division is only done when irq > 2*cputime_one_jiffy. I will do that in the next version.
-- All Rights Reversed.
[unhandled content-type:application/pgp-signature] | |