Re: [PATCH 5/5] Account ksoftirqd time as cpustat softirq -v2

From: Venkatesh Pallipadi
Date: Wed Dec 22 2010 - 09:00:29 EST


On Wed, Dec 22, 2010 at 1:20 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
> On Tue, 2010-12-21 at 17:09 -0800, Venkatesh Pallipadi wrote:
>> softirq time in ksoftirqd context is not accounted in ns granularity
>> per cpu softirq stats, as we want that to be a part of ksoftirqd
>> exec_runtime.
>>
>> Accounting them as softirq on /proc/stat separately.
>>
>> Tested-by: Shaun Ruffell <sruffell@xxxxxxxxxx>
>> Signed-off-by: Venkatesh Pallipadi <venki@xxxxxxxxxx>
>> ---
>>  kernel/sched.c |    8 ++++++++
>>  1 files changed, 8 insertions(+), 0 deletions(-)
>>
>> diff --git a/kernel/sched.c b/kernel/sched.c
>> index 193b1d0..4ff6d1a 100644
>> --- a/kernel/sched.c
>> +++ b/kernel/sched.c
>> @@ -3819,6 +3819,14 @@ static void irqtime_account_process_tick(struct task_struct *p, int user_tick,
>>               cpustat->irq = cputime64_add(cpustat->irq, tmp);
>>       } else if (irqtime_account_si_update()) {
>>               cpustat->softirq = cputime64_add(cpustat->softirq, tmp);
>> +     } else if (this_cpu_ksoftirqd() == p) {
>> +             /*
>> +              * ksoftirqd time do not get accounted in cpu_softirq_time.
>> +              * So, we have to handle it separately here.
>> +              * Also, p->stime needs to be updated for ksoftirqd.
>> +              */
>> +             __account_system_time(p, cputime_one_jiffy, one_jiffy_scaled,
>> +                                     &cpustat->softirq);
>>       } else if (user_tick) {
>>               account_user_time(p, cputime_one_jiffy, one_jiffy_scaled);
>>       } else if (p == rq->idle) {
>
> So you add the ksoftirqd runtime as softirq time in the /proc/stat
> output?
>
> That seems dubious...
>

Yes. Thats similar to what we do today. As long as we are in softirq,
whether bottomhalf or ksoftirqd, we account the tick as softirq time
in /proc/stat.
I thought it also makes sense from user perspective. They want to know
how much time are we currently spending serving softirqs and hardirqs.
It is better to get that information at one place, instead of say look
at /proc/stat and add percpu ksoftirqd time to it. I mean,
user/administrator does not have to care whether ksoftirqd is involved
or not to know how much time was spend serving softirqs.

Thanks,
Venki
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/