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

Lauda, Tomasz tomasz.lauda at linux.intel.com
Thu Jun 21 12:04:46 CEST 2018


Hi Zhigang,


I think, that correct value for 400MHz clock is:

*#define CPU_CYCLE_PER_MS    400000000*

*
*

Tomek
**


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