Hi Stefan,
Hi Chris, On Wed, May 06, 2020 at 01:23:59PM +0200, Chris Hofer wrote:
> Hi,
>
> to measure the performance overhead of the Armv8 Genode VMM, I ran some
> benchmarks (cyclictest and lmbench). I compared it against a native Linux
> installation on the Imx8-evk board (same kernel version). For some
> measurements (for example fork + executing /bin/sh from lmbench), I observe
> counter-intuitive results in the sense that the virtualized version runs
> *faster* than the native one (Vm 1,1ms vs. native 2,5ms).
>
> My understanding is, that the virtual timer offset (cntvoff_el2) is not used
> and thus, the guest sees wall clock time. I would expect that the
> virtualization incurs an overhead and this overhead manifests itself in
> longer (wall clock) time measurements.
>
>> Correct, but you assume that native Linux and virtualized version run
>> with the same frequencies (cpu + timer) - don't you?
>>
>> Actually, I think the timer frequency should be constant in both
>> scenarios, whereby at least the cpu will be controlled dynamically in
>> the native Linux case.
>>
>> When comparing such complex scenarios to avoid mistakes I would
>> strongly encourage you to not measure time on-target. It often leads
>> to wrong assumptions. It is better to measure long-term scenarios from
>> another host. If you need to measure micro-benchmarks, you might loop
>> the operation quite often and measure the whole time-span outside, and
>> divide the result.
>>
>> Alternatively, if you insist to measure on-target, you can instrument
>> Linux to use a constant CPU frequency (google for "linux cpu
>> governor"). Moreover, you might check whether the timer frequency is
>> the same in both settings (CNTFRQ_EL0) - well it should be.
Thank you for this advice; it makes perfect sense to capture the time
off-target.
I finally found a big mistake in my setup to measure the duration of
forking a process and calling /bin/sh. The native installation uses a
dynamically linked shell and the guest has a statically linked binary.
After using statically linked binaries on both systems I get reasonable
results.
Nevertheless, I will take advice and verify the measurements off-target.
Best,
Chris