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... Patch 1 is already in next, so you only need to refresh this one. Jan -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux -- 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/1eab7944-3f71-dd82-99a5-b4806443d701%40siemens.com.
