diff mbox series

[19/22] selftests/resctrl: Read in less obvious order to defeat prefetch optimizations

Message ID 20230412132122.29452-20-ilpo.jarvinen@linux.intel.com (mailing list archive)
State New
Headers show
Series selftests/resctrl: Fixes, cleanups, and rewritten CAT test | expand

Commit Message

Ilpo Järvinen April 12, 2023, 1:21 p.m. UTC
When reading memory in order, HW prefetching optimizations will
interfere with measuring how caches and memory are being accessed. This
adds noise into the results.

Change the fill_buf reading loop to not use an obvious in-order
access.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---
 tools/testing/selftests/resctrl/fill_buf.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
diff mbox series

Patch

diff --git a/tools/testing/selftests/resctrl/fill_buf.c b/tools/testing/selftests/resctrl/fill_buf.c
index 316800715386..742b3878ac2f 100644
--- a/tools/testing/selftests/resctrl/fill_buf.c
+++ b/tools/testing/selftests/resctrl/fill_buf.c
@@ -96,14 +96,17 @@  static void *malloc_and_init_memory(size_t s)
 
 static int fill_one_span_read(unsigned char *start_ptr, unsigned char *end_ptr)
 {
-	unsigned char sum, *p;
-
+	unsigned int size = (end_ptr - start_ptr) / (CL_SIZE / 2);
+	unsigned int count = size;
+	unsigned char sum;
+
+	/*
+	 * Read the buffer in an order that is unexpected by HW prefetching
+	 * optimizations to prevent them interfering with the caching pattern.
+	 */
 	sum = 0;
-	p = start_ptr;
-	while (p < end_ptr) {
-		sum += *p;
-		p += (CL_SIZE / 2);
-	}
+	while (count--)
+		sum += start_ptr[((count * 59) % size) * CL_SIZE / 2];
 
 	return sum;
 }