I'm trying to measure performance of my code by using pmu. Code placed in EL1. To test pmu I created simple loop of couple operations. I did it under spinlock with disabled interrupts to prevent any preemption. Then I printed cycle counter to check how much cycles this my test code takes. But I see very different values at each print, ex: 100, 200, 10000, 50,
...
My question is: why output is so different? What cause this?
PS: in countrary to cycle counter, pmu's instructions counter is stable and I observe same output at each time.
Also I tried to use ARM timer, but it also showing different values similarly to pmu's cycles counter.
Android is still the Linux-like environment. The EL3 firmware may still respond to the GIC interrupts based on the GIC configuration so that your non-secure EL1 or secure EL1 may not be so accurate.
Suggest to run in bare-mental environment if you want to benchmark your loop code.