Got it, thanks!

On Fri, Jun 20, 2014 at 3:20 PM, Sandeep Tripathy
<sandeep.tripa...@linaro.org> wrote:
> Hi Meraj,
>       As mentioned earlier, we are counting only the interrupts which caused
> the core to wake up from one of the c-states.
>    This count can vary from the total number of interrupts to that core.
> When the core is already running we do not care
>     about number of interrupts its getting.
> Thanks
>  Sandeep
>
>
>
> On 20 June 2014 14:39, Mohammad Merajul Islam Molla <meraj.eni...@gmail.com>
> wrote:
>>
>> Hello Sandeep,
>>
>> Thanks for reply.
>>
>> I meant to say I counted "irq_handler_entry: irq=40 name=eth0" and
>> "irq_handler_entry: irq=18 name=ata_piix" instances in trace file (not
>> just grep irq=40/irq=18 as I mentioned before, sorry for the
>> confusion) and that count does not match with the output by idlestat.
>>
>> Should not they match?
>>
>> --
>> Thanks,
>> -Meraj
>>
>> On Fri, Jun 20, 2014 at 2:42 PM, Sandeep Tripathy
>> <sandeep.tripa...@linaro.org> wrote:
>> > Hi Meraj,
>> >     We only want to count the wakeup sources (eg: irq/ipi  etc *).
>> > Hence
>> > the total count for an irq /ipi can differ.
>> >
>> > * Note there can be spurious wakeups in some systems. ie: core exiting
>> > idle
>> > without an irq.
>> >
>> > Thanks
>> > Sandeep
>> >
>> >
>> > On 20 June 2014 13:58, Mohammad Merajul Islam Molla
>> > <meraj.eni...@gmail.com>
>> > wrote:
>> >>
>> >> Hello Amit/Daniel,
>> >>
>> >> I think there is a bug in idlestat due to which it reports wrong irq
>> >> counts in output.
>> >>
>> >> Log is 9.998478 secs long with 1518 events
>> >> clusterA@state  hits          total(us)         avg(us) min(us) max(us)
>> >>          C6-SNB 455          9921571.00        21805.65 0.00
>> >> 176303.00
>> >>   cpu0@state    hits          total(us)         avg(us) min(us) max(us)
>> >>        C1-SNB   10              2032.00          203.20 27.00   1219.00
>> >>        C3-SNB   2               5909.00         2954.50 161.00  5748.00
>> >>        C6-SNB   320          9978546.00        31182.96 48.00
>> >> 237467.00
>> >>   cpu0 wakeups  name            count
>> >>        irq040   eth0            150
>> >>   cpu1@state    hits          total(us)         avg(us) min(us) max(us)
>> >>        C6-SNB   140          9981689.00        71297.78 80.00
>> >> 311045.00
>> >>   cpu1 wakeups  name            count
>> >>        irq018   ata_piix        19
>> >>   cpu2@state    hits          total(us)         avg(us) min(us) max(us)
>> >>        C6-SNB   87           9995015.00       114885.23 11935.00
>> >>  323889.00
>> >>   cpu2 wakeups  name            count
>> >>   cpu3@state    hits          total(us)         avg(us) min(us) max(us)
>> >>        C1-SNB   3                383.00          127.67 122.00  139.00
>> >>        C6-SNB   97           9954601.00       102624.75 51.00
>> >> 323890.00
>> >>   cpu3 wakeups  name            count
>> >>
>> >>
>> >> from my trace output file -
>> >>
>> >> grep 'irq=40' /tmp/trace | wc -l returns 308. Half should be the irq
>> >> count = 154.
>> >> grep 'irq=18' /tmp/trace | wc -l returns 80. Half should be irq count =
>> >> 40.
>> >>
>> >>
>> >> I have made a patch to fix the issue below.
>> >>
>> >> Below check causes early unwanted return from store_irq() function. In
>> >> fact,
>> >> the whole 'wakeirq' member seems unnecessary, hence the related code.
>> >>
>> >>        if (cstates->wakeirq != NULL)
>> >>                return 0;
>> >>
>> >> Would you please check?
>> >>
>> >> diff --git a/idlestat.c b/idlestat.c
>> >> index 5e8f8d5..d4ea859 100644
>> >> --- a/idlestat.c
>> >> +++ b/idlestat.c
>> >> @@ -654,7 +654,6 @@ static int store_data(double time, int state, int
>> >> cpu,
>> >>         cstates->cstate[state].data = data;
>> >>         cstates->cstate_max = MAX(cstates->cstate_max, state);
>> >>         cstates->last_cstate = state;
>> >> -       cstates->wakeirq = NULL;
>> >>
>> >>         /* update P-state stats if supported */
>> >>         if (pstate)
>> >> @@ -684,9 +683,6 @@ static int store_irq(int cpu, int irqid, char
>> >> *irqname,
>> >>         struct wakeup_irq *irqinfo;
>> >>         struct wakeup_info *wakeinfo = &cstates->wakeinfo;
>> >>
>> >> -       if (cstates->wakeirq != NULL)
>> >> -               return 0;
>> >> -
>> >>         irqinfo = find_irqinfo(wakeinfo, irqid);
>> >>         if (NULL == irqinfo) {
>> >>                 irqinfo = realloc(wakeinfo->irqinfo,
>> >> @@ -705,8 +701,6 @@ static int store_irq(int cpu, int irqid, char
>> >> *irqname,
>> >>
>> >>         irqinfo->count++;
>> >>
>> >> -       cstates->wakeirq = irqinfo;
>> >> -
>> >>         return 0;
>> >>  }
>> >>
>> >> diff --git a/idlestat.h b/idlestat.h
>> >> index 1977ab4..bb27e3a 100644
>> >> --- a/idlestat.h
>> >> +++ b/idlestat.h
>> >> @@ -76,7 +76,6 @@ struct cpuidle_cstates {
>> >>         struct wakeup_info wakeinfo;
>> >>         int last_cstate;
>> >>         int cstate_max;
>> >> -       struct wakeup_irq *wakeirq;
>> >>  };
>> >>
>> >>  struct cpufreq_pstate {
>> >>
>> >>
>> >> --
>> >> Thanks,
>> >> -Meraj
>> >>
>> >> _______________________________________________
>> >> linaro-dev mailing list
>> >> linaro-dev@lists.linaro.org
>> >> http://lists.linaro.org/mailman/listinfo/linaro-dev
>> >
>> >
>
>

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to