RE: [PATCH v2 21/24] selftests/resctrl: Read in less obvious order to defeat prefetch optimizations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ilpo,

> 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 using
> multiply by a prime and modulo.
> 
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx>
> ---
>  tools/testing/selftests/resctrl/fill_buf.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/tools/testing/selftests/resctrl/fill_buf.c
> b/tools/testing/selftests/resctrl/fill_buf.c
> index 7e0d3a1ea555..049a520498a9 100644
> --- a/tools/testing/selftests/resctrl/fill_buf.c
> +++ b/tools/testing/selftests/resctrl/fill_buf.c
> @@ -88,14 +88,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];
Could you please elaborate why 59 is used?

Best regards,
Shaopeng TAN




[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux