[Sound-open-firmware] [PATCH] [RFC]platform: calculate the percentage of cpu cycle

zhigangw zhigang.wu at linux.intel.com
Fri Jun 22 10:40:44 CEST 2018



On 2018年06月21日 18:04, Lauda, Tomasz wrote:
>
> Hi Zhigang,
>
>
> I think, that correct value for 400MHz clock is:
>
> *#define CPU_CYCLE_PER_MS    400000000*
>
> *
> *
>
> Tomek
>
>
I used the 1ms as the base interval, so it should be 400000.
Thanks
~zhigang
> On 21.06.2018 11:59, zhigangw wrote:
>> I use this way to calculate the CPU usage in our firmware.
>>
>> I am not sure this way is correct or not.
>>
>> from this way, I found the percentage is very high when I only do the 
>> playback alone with tdm8 mode.
>>
>> almost 95% CPU usage.
>>
>> that is the reason I send this RFC.
>>
>> please give me the feedback whether this way to calculate the CPU 
>> usage is correct or not.
>>
>> thanks
>>
>> ~zhigang
>>
>>
>> On 2018年06月21日 17:57, Wu Zhigang wrote:
>>> calculate the percentage of cpu cyle based on
>>> the CCOUNT register. which can tell the percentage
>>> of cpu cycle usage.
>>>
>>> Signed-off-by: Wu Zhigang <zhigang.wu at linux.intel.com>
>>> ---
>>>   src/audio/dai.c | 17 +++++++++++++++++
>>>   1 file changed, 17 insertions(+)
>>>
>>> diff --git a/src/audio/dai.c b/src/audio/dai.c
>>> index 99749d1..7811e38 100644
>>> --- a/src/audio/dai.c
>>> +++ b/src/audio/dai.c
>>> @@ -72,6 +72,21 @@ struct dai_data {
>>>       uint64_t wallclock;    /* wall clock at stream start */
>>>   };
>>>   +/* for apollolake, it is 400MHz per 1s */
>>> +#define CPU_CYCLE_PER_MS    400000
>>> +
>>> +static void calc_mcps(struct pipeline *p)
>>> +{
>>> +    uint32_t cpu_cycle = 0;
>>> +    uint32_t deta = 0;
>>> +
>>> +    __asm__ __volatile__ ("rsr %0, CCOUNT" : "=a" (cpu_cycle) : : 
>>> "memory");
>>> +    deta = cpu_cycle - p->cpu_cycle;
>>> +    p->cpu_cycle = cpu_cycle;
>>> +    deta = (deta * 100) / CPU_CYCLE_PER_MS;
>>> +    trace_error_value(deta); /* the percentage of the cpu cycle in 
>>> 1ms */
>>> +}
>>> +
>>>   /* this is called by DMA driver every time descriptor has 
>>> completed */
>>>   static void dai_dma_cb(void *data, uint32_t type, struct 
>>> dma_sg_elem *next)
>>>   {
>>> @@ -81,6 +96,8 @@ static void dai_dma_cb(void *data, uint32_t type, 
>>> struct dma_sg_elem *next)
>>>         tracev_dai("irq");
>>>   +    calc_mcps(dev->pipeline);
>>> +
>>>       /* stop dma copy for pause/stop/xrun */
>>>       if (dev->state != COMP_STATE_ACTIVE || dd->xrun) {
>>
>> _______________________________________________
>> Sound-open-firmware mailing list
>> Sound-open-firmware at alsa-project.org
>> http://mailman.alsa-project.org/mailman/listinfo/sound-open-firmware
>



More information about the Sound-open-firmware mailing list