diff options
| author | Louis Burda <quent.burda@gmail.com> | 2022-08-15 16:20:27 +0200 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2022-08-15 16:20:27 +0200 |
| commit | fef45f5207c99b00676c014bc02141e284c331ce (patch) | |
| tree | 136766ab312e5bd56582fb54dbd2932005c18ad7 /kmod/cachepc.h | |
| parent | 2ee8bd2f14f1fe909108e89a24ec9f6de814f438 (diff) | |
| download | cachepc-fef45f5207c99b00676c014bc02141e284c331ce.tar.gz cachepc-fef45f5207c99b00676c014bc02141e284c331ce.zip | |
Stash version with no consistent noise in eviction test
Diffstat (limited to 'kmod/cachepc.h')
| -rwxr-xr-x | kmod/cachepc.h | 63 |
1 files changed, 45 insertions, 18 deletions
diff --git a/kmod/cachepc.h b/kmod/cachepc.h index 97746ec..0e02678 100755 --- a/kmod/cachepc.h +++ b/kmod/cachepc.h @@ -49,16 +49,21 @@ extern cacheline *cachepc_ds; cacheline * cachepc_prime(cacheline *head) { - cacheline *curr_cl; + cacheline *curr_cl; - //cachepc_cpuid(); - curr_cl = head; - do { - curr_cl = curr_cl->next; - } while(curr_cl != head); - //cachepc_cpuid(); + cachepc_mfence(); + cachepc_cpuid(); + + curr_cl = head; + do { + curr_cl = curr_cl->next; + } while (curr_cl != head); + curr_cl = curr_cl->prev; - return curr_cl->prev; + cachepc_mfence(); + cachepc_cpuid(); + + return curr_cl; } /* @@ -78,16 +83,20 @@ cachepc_prime(cacheline *head) cacheline * cachepc_prime_rev(cacheline *head) { - cacheline *curr_cl; + cacheline *curr_cl; - //cachepc_cpuid(); - curr_cl = head; - do { - curr_cl = curr_cl->prev; - } while(curr_cl != head); - //cachepc_cpuid(); + cachepc_mfence(); + cachepc_cpuid(); + + curr_cl = head; + do { + curr_cl = curr_cl->prev; + } while(curr_cl != head); + + cachepc_mfence(); + cachepc_cpuid(); - return curr_cl->prev; + return curr_cl->prev; } cacheline * @@ -97,6 +106,9 @@ cachepc_probe(cacheline *start_cl) cacheline *next_cl; cacheline *curr_cl; + cachepc_mfence(); + cachepc_cpuid(); + curr_cl = start_cl; do { @@ -134,21 +146,32 @@ cachepc_probe(cacheline *start_cl) curr_cl = next_cl; } while (__builtin_expect(curr_cl != start_cl, 1)); + cachepc_mfence(); + cachepc_cpuid(); + return curr_cl->next; } void cachepc_victim(void *p) { - cachepc_cpuid(); cachepc_mfence(); + cachepc_cpuid(); + cachepc_readq(p); + + cachepc_mfence(); + cachepc_cpuid(); } uint64_t cachepc_read_pmc(uint64_t event) { uint32_t lo, hi; + uint64_t res; + + cachepc_mfence(); + cachepc_cpuid(); event = 0xC0010201 + 2 * event; @@ -157,6 +180,10 @@ cachepc_read_pmc(uint64_t event) : "=a" (lo), "=d" (hi) : "c"(event) ); + res = ((uint64_t) hi << 32) | (uint64_t) lo; + + cachepc_mfence(); + cachepc_cpuid(); - return ((uint64_t) hi << 32) | (uint64_t) lo; + return res; } |
