From 92bcc50c0aa39581b6f29e2ba91a49047a30071d Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 25 Mar 2022 14:09:24 +0100 Subject: [PATCH] test/memcpy: test with a more consistent alignment On some platforms, the page index affects the measurements. genodelabs/genode#4454 --- repos/libports/run/memcpy.run | 20 +++++++++++--------- repos/libports/src/test/memcpy/main.cc | 16 +++++++++++++--- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/repos/libports/run/memcpy.run b/repos/libports/run/memcpy.run index cd183f4f00..47fcc26f18 100644 --- a/repos/libports/run/memcpy.run +++ b/repos/libports/run/memcpy.run @@ -26,7 +26,7 @@ install_config { - + @@ -51,19 +51,21 @@ proc run_test {name serial_id} { } run_genode_until "Memcpy testsuite started.*\n" 60 -set serial_id [output_spawn_id] -set byte_dur [run_test "bytewise memcpy" $serial_id] -set genode_dur [run_test "Genode memcpy" $serial_id] -set genode_set_dur [run_test "Genode memset" $serial_id] -set libc_cpy_dur [run_test "libc memcpy" $serial_id] -set libc_set_dur [run_test "libc memset" $serial_id] -set uncached_wr_dur [run_test "Genode memcpy" $serial_id] -set uncached_rd_dur [run_test "Genode memcpy" $serial_id] +set serial_id [output_spawn_id] +set byte_dur [run_test "bytewise memcpy" $serial_id] +set genode_dur [run_test "Genode memcpy" $serial_id] +set genode_set_dur [run_test "Genode memset" $serial_id] +set libc_cpy_dur [run_test "libc memcpy" $serial_id] +set libc_set_dur [run_test "libc memset" $serial_id] +set genode_offset_dur [run_test "Genode memcpy" $serial_id] +set uncached_wr_dur [run_test "Genode memcpy" $serial_id] +set uncached_rd_dur [run_test "Genode memcpy" $serial_id] puts "bytewise: copied 8 GB in $byte_dur milliseconds ([expr {8192000 / $byte_dur}] MiB/sec)" puts "memcpy: copied 8 GB in $genode_dur milliseconds ([expr {8192000 / $genode_dur}] MiB/sec)" puts "memset: copied 8 GB in $genode_set_dur milliseconds ([expr {8192000 / $genode_set_dur}] MiB/sec)" puts "libc memcpy: copied 8 GB in $libc_cpy_dur milliseconds ([expr {8192000 / $libc_cpy_dur}] MiB/sec)" puts "libc memset: copied 8 GB in $libc_set_dur milliseconds ([expr {8192000 / $libc_set_dur}] MiB/sec)" +puts "memcpy (page offset): copied 8 GB in $genode_offset_dur milliseconds ([expr {8192000 / $genode_offset_dur}] MiB/sec)" puts "memcpy (uncached write): copied 8 GB in $uncached_wr_dur milliseconds ([expr {8192000 / $uncached_wr_dur}] MiB/sec)" puts "memcpy (uncached read): copied 8 GB in $uncached_rd_dur milliseconds ([expr {8192000 / $uncached_rd_dur}] MiB/sec)" exit 0 diff --git a/repos/libports/src/test/memcpy/main.cc b/repos/libports/src/test/memcpy/main.cc index ff0caa600d..9108972d7d 100644 --- a/repos/libports/src/test/memcpy/main.cc +++ b/repos/libports/src/test/memcpy/main.cc @@ -58,12 +58,22 @@ void Libc::Component::construct(Libc::Env &env) { log("Memcpy testsuite started"); - memcpy_test(); - memcpy_test(); + /* Alloc dataspaces to control page alignment */ + Genode::Attached_ram_dataspace cached_ds1(env.ram(), env.rm(), + BUF_SIZE, Genode::CACHED); + Genode::Attached_ram_dataspace cached_ds2(env.ram(), env.rm(), + BUF_SIZE+4096, Genode::CACHED); + + memcpy_test (cached_ds1.local_addr(), cached_ds2.local_addr(), BUF_SIZE); + memcpy_test(cached_ds1.local_addr(), cached_ds2.local_addr(), BUF_SIZE); memcpy_test(); - memcpy_test(); + memcpy_test (cached_ds1.local_addr(), cached_ds2.local_addr(), BUF_SIZE); memcpy_test(); + /* offset src by one page so that src and dst have different cache indices */ + memcpy_test( cached_ds1.local_addr(), + (void*)((Genode::addr_t)cached_ds2.local_addr()+4096), BUF_SIZE); + Genode::Attached_ram_dataspace uncached_ds(env.ram(), env.rm(), BUF_SIZE, Genode::UNCACHED);