On 29/10/2020 17:16, Jan Kiszka wrote:
> On 29.10.20 15:55, Ralf Ramsauer wrote:
>> On x86_64 systems, this test inmate measures the time that is required to 
>> read
>> a value from main memory. Via rdtsc, it measures the CPU cycles that are
>> required for the access. Access can either happen cached, or uncached. In 
>> case
>> of uncached access, the cache line will be flushed before access.
>>
>> This tool repeats the measurement for 10e6 times, and outputs the
>> average cycles that were required for the access. Before accessing the
>> actual measurement, a dummy test is used to determine the average
>> overhead of one single measurement.
>>
>> And that's pretty useful, because this tool gives a lot of insights of
>> differences between the root and the non-root cell: With tiny effort, we
>> can also run it on Linux.
>>
>> If the 'overhead' time differs between root and non-root cell, this can
>> be an indicator that there might be some timing or speed differences
>> between the root and non-root cell.
>>
>> If the 'uncached' or 'cached' average time differs between the non-root
>> and root cell, it's an indicator that both might have different hardware
>> configurations / setups.
>>
>> Signed-off-by: Ralf Ramsauer <[email protected]>
>> ---
>> since v2:
>>   - Move host code to tools/demos :-)
>>
>> since v1:
>>   - Move host code to tools/
>>
>> since RFC:
>>   - move the inmate to demos instead of tests
>>
>>
>>  .gitignore                  |  1 +
>>  inmates/demos/x86/Makefile  |  4 +++-
>>  tools/Makefile              |  9 +++++++--
>>  tools/demos/cache-timings.c | 29 +++++++++++++++++++++++++++++
>>  4 files changed, 40 insertions(+), 3 deletions(-)
>>  create mode 100644 tools/demos/cache-timings.c
>>
>> diff --git a/.gitignore b/.gitignore
>> index 1d8905ab..245733cb 100644
>> --- a/.gitignore
>> +++ b/.gitignore
>> @@ -21,6 +21,7 @@ hypervisor/hypervisor.lds
>>  inmates/lib/arm/inmate.lds
>>  inmates/lib/arm64/inmate.lds
>>  pyjailhouse/pci_defs.py
>> +tools/demos/cache-timings
>>  tools/demos/ivshmem-demo
>>  tools/jailhouse
>>  tools/jailhouse-gcov-extract
>> diff --git a/inmates/demos/x86/Makefile b/inmates/demos/x86/Makefile
>> index f53b739e..47b79869 100644
>> --- a/inmates/demos/x86/Makefile
>> +++ b/inmates/demos/x86/Makefile
>> @@ -13,7 +13,8 @@
>>  include $(INMATES_LIB)/Makefile.lib
>>  
>>  INMATES := tiny-demo.bin apic-demo.bin ioapic-demo.bin 32-bit-demo.bin \
>> -    pci-demo.bin e1000-demo.bin ivshmem-demo.bin smp-demo.bin
>> +    pci-demo.bin e1000-demo.bin ivshmem-demo.bin smp-demo.bin \
>> +    cache-timings.bin
>>  
>>  tiny-demo-y := tiny-demo.o
>>  apic-demo-y := apic-demo.o
>> @@ -22,6 +23,7 @@ pci-demo-y := pci-demo.o
>>  e1000-demo-y        := e1000-demo.o
>>  ivshmem-demo-y      := ../ivshmem-demo.o
>>  smp-demo-y  := smp-demo.o
>> +cache-timings-y := cache-timings.o
>>  
>>  $(eval $(call DECLARE_32_BIT,32-bit-demo))
>>  32-bit-demo-y       := 32-bit-demo.o
>> diff --git a/tools/Makefile b/tools/Makefile
>> index 8cf5df84..62585369 100644
>> --- a/tools/Makefile
>> +++ b/tools/Makefile
>> @@ -35,6 +35,13 @@ KBUILD_CFLAGS += $(call cc-option, -fno-pie)
>>  KBUILD_CFLAGS += $(call cc-option, -no-pie)
>>  
>>  BINARIES := jailhouse demos/ivshmem-demo
>> +targets += jailhouse.o demos/ivshmem-demo.o
>> +
>> +ifeq ($(ARCH),x86)
>> +BINARIES += demos/cache-timings
>> +targets += demos/cache-timings.o
>> +endif # $(ARCH),x86
>> +
>>  always-y := $(BINARIES)
>>  
>>  HAS_PYTHON_MAKO := \
>> @@ -104,8 +111,6 @@ define cmd_gen_man
>>      sed 's/$${VERSION}/$(shell cat $(src)/../VERSION)/g' $< > $@
>>  endef
>>  
>> -targets += jailhouse.o demos/ivshmem-demo.o
>> -
>>  $(obj)/%: $(obj)/%.o
>>      $(call if_changed,ld)
>>  
>> diff --git a/tools/demos/cache-timings.c b/tools/demos/cache-timings.c
>> new file mode 100644
>> index 00000000..2c591dab
>> --- /dev/null
>> +++ b/tools/demos/cache-timings.c
>> @@ -0,0 +1,29 @@
>> +/*
>> + * Jailhouse, a Linux-based partitioning hypervisor
>> + *
>> + * Copyright (c) OTH Regensburg, 2020
>> + *
>> + * Authors:
>> + *  Ralf Ramsauer <[email protected]>
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2.  See
>> + * the COPYING file in the top-level directory.
>> + */
>> +
>> +#include <stdbool.h>
>> +#include <stdio.h>
>> +
>> +#define printk printf
>> +
>> +typedef unsigned int u32;
>> +typedef unsigned long long u64;
>> +
>> +void inmate_main(void);
>> +
>> +#include "../inmates/demos/x86/cache-timings-common.c"
>> +
>> +int main(void)
>> +{
>> +    inmate_main();
>> +    return 0;
>> +}
>>
> 
> Look mom, I shrunk my patch! But I guess that was not intional...

My dearest son, please have a closer look at path one.

Rhymed-By: Ralf Ramsauer <[email protected]>

> 
> Patch 1 is already in next, so you only need to refresh this one.
> 
> Jan
> 

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/bc212e0a-d93b-4c3d-b6a9-f06caf21c382%40oth-regensburg.de.

Reply via email to