diff options
| author | Louis Burda <quent.burda@gmail.com> | 2022-08-13 20:05:27 +0200 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2022-08-13 20:05:27 +0200 |
| commit | 476f6c892d90e66fbd17ba616b82b000a990f63e (patch) | |
| tree | 268efc588158ded4bf88aec234d44baf9584473f /kmod/util.c | |
| parent | 0f3b9caf389b486541614836bf180b64544615cb (diff) | |
| download | cachepc-476f6c892d90e66fbd17ba616b82b000a990f63e.tar.gz cachepc-476f6c892d90e66fbd17ba616b82b000a990f63e.zip | |
Add cache line ordering that prevents hardware prefetching, fix cachepc counts read
Diffstat (limited to 'kmod/util.c')
| -rwxr-xr-x | kmod/util.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/kmod/util.c b/kmod/util.c index 166ec3e..1932c9b 100755 --- a/kmod/util.c +++ b/kmod/util.c @@ -20,16 +20,22 @@ prng_bytes(uint8_t *dst, size_t size) void random_perm(uint32_t *arr, uint32_t arr_len) { - uint32_t i, idx, tmp; + uint32_t i, mid; // idx, tmp; - for (i = arr_len - 1; i > 0; --i) { - prng_bytes((void*)&idx, 4); - idx = idx % i; - - tmp = arr[idx]; - arr[idx] = arr[i]; - arr[i] = tmp; + /* defeat stream prefetcher by preventing access direction */ + mid = arr_len / 2; + for (i = 0; i < arr_len; i++) { + arr[i] = mid + (i % 2 ? -1 : 1) * ((i + 1) / 2); } + + // for (i = arr_len - 1; i > 0; --i) { + // prng_bytes((void*)&idx, 4); + // idx = idx % i; + + // tmp = arr[idx]; + // arr[idx] = arr[i]; + // arr[i] = tmp; + // } } void |
