Skip to content

Commit 1312011

Browse files
authored
Merge pull request #166 from comparch-security/report-replace-prio
let regression report replace prio
2 parents 0d56566 + 04399d9 commit 1312011

File tree

6 files changed

+46
-40
lines changed

6 files changed

+46
-40
lines changed

cache/cache.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -335,23 +335,23 @@ class CacheSkewed : public CacheBase
335335
}
336336

337337
virtual void hook_read(uint64_t addr, uint32_t ai, uint32_t s, uint32_t w, bool hit, const CMMetadataBase * meta, const CMDataBase *data, uint64_t *delay) override {
338-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_read(addr, ai, s, w, hit, meta, data, delay);
338+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_read(addr, ai, s, w, (ai < P ? replacer[ai].eviction_rank(s, w) : -1), hit, meta, data, delay);
339339
}
340340

341341
virtual void replace_read(uint32_t ai, uint32_t s, uint32_t w, bool prefetch, bool genre = false) override {
342342
if(ai < P) replacer[ai].access(s, w, true, prefetch);
343343
}
344344

345345
virtual void hook_write(uint64_t addr, uint32_t ai, uint32_t s, uint32_t w, bool hit, const CMMetadataBase * meta, const CMDataBase *data, uint64_t *delay) override {
346-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_write(addr, ai, s, w, hit, meta, data, delay);
346+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_write(addr, ai, s, w, (ai < P ? replacer[ai].eviction_rank(s, w) : -1), hit, meta, data, delay);
347347
}
348348

349349
virtual void replace_write(uint32_t ai, uint32_t s, uint32_t w, bool demand_acc, bool genre = false) override {
350350
if(ai < P) replacer[ai].access(s, w, demand_acc, false);
351351
}
352352

353353
virtual void hook_manage(uint64_t addr, uint32_t ai, uint32_t s, uint32_t w, bool hit, uint32_t evict, bool writeback, const CMMetadataBase * meta, const CMDataBase *data, uint64_t *delay) override {
354-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_manage(addr, ai, s, w, hit, evict, writeback, meta, data, delay);
354+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_manage(addr, ai, s, w, (ai < P ? replacer[ai].eviction_rank(s, w) : -1), hit, evict, writeback, meta, data, delay);
355355
}
356356

357357
virtual void replace_manage(uint32_t ai, uint32_t s, uint32_t w, bool hit, uint32_t evict, bool genre = false) override {

cache/dynamic_random.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ class SimpleEVRemapper : public RemapperBase
208208
public:
209209
SimpleEVRemapper(uint64_t period) : period(period) {}
210210

211-
virtual void invalid(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, const CMMetadataBase *meta, const CMDataBase *data) override {
211+
virtual void invalid(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, const CMMetadataBase *meta, const CMDataBase *data) override {
212212
if(!active) return;
213213
cnt_invalid++;
214214
if(cnt_invalid !=0 && (cnt_invalid % period) == 0) {

cache/exclusive.hpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,11 @@ class CacheSkewedExclusive : public CacheSkewed<IW, NW, P, MT, DT, IDX, RPC, DLY
129129

130130
virtual void hook_read(uint64_t addr, uint32_t ai, uint32_t s, uint32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay) override {
131131
if(ai < P) {
132-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_read(addr, ai, s, w, hit, meta, data, delay);
132+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_read(addr, ai, s, w,
133+
(w >= NW ? ext_replacer[ai].eviction_rank(s, w-NW) : replacer[ai].eviction_rank(s, w)),
134+
hit, meta, data, delay);
133135
} else {
134-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_read(addr, -1, -1, -1, hit, meta, data, delay);
136+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_read(addr, -1, -1, -1, -1, hit, meta, data, delay);
135137
}
136138
}
137139

@@ -144,9 +146,11 @@ class CacheSkewedExclusive : public CacheSkewed<IW, NW, P, MT, DT, IDX, RPC, DLY
144146

145147
virtual void hook_write(uint64_t addr, uint32_t ai, uint32_t s, uint32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay) override {
146148
if(ai < P) {
147-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_write(addr, ai, s, w, hit, meta, data, delay);
149+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_write(addr, ai, s, w,
150+
(w >= NW ? ext_replacer[ai].eviction_rank(s, w-NW) : replacer[ai].eviction_rank(s, w)),
151+
hit, meta, data, delay);
148152
} else {
149-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_write(addr, -1, -1, -1, hit, meta, data, delay);
153+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_write(addr, -1, -1, -1, -1, hit, meta, data, delay);
150154
}
151155
}
152156

@@ -159,9 +163,11 @@ class CacheSkewedExclusive : public CacheSkewed<IW, NW, P, MT, DT, IDX, RPC, DLY
159163

160164
virtual void hook_manage(uint64_t addr, uint32_t ai, uint32_t s, uint32_t w, bool hit, uint32_t evict, bool writeback, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay) override {
161165
if(ai < P){
162-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_manage(addr, ai, s, w, hit, evict, writeback, meta, data, delay);
166+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_manage(addr, ai, s, w,
167+
(w >= NW ? ext_replacer[ai].eviction_rank(s, w-NW) : replacer[ai].eviction_rank(s, w)),
168+
hit, evict, writeback, meta, data, delay);
163169
} else {
164-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_manage(addr, -1, -1, -1, hit, evict, writeback, meta, data, delay);
170+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_manage(addr, -1, -1, -1, -1, hit, evict, writeback, meta, data, delay);
165171
}
166172
}
167173

cache/memory.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,11 @@ class SimpleMemoryModel : public InnerCohPortUncached<policy_memory, EnMT>, publ
131131
void detach_monitor() { monitors->detach_monitor(); }
132132

133133
virtual void hook_read(uint64_t addr, uint32_t ai, uint32_t s, uint32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay) override {
134-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_read(addr, -1, -1, -1, hit, meta, data, delay);
134+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_read(addr, -1, -1, -1, -1, hit, meta, data, delay);
135135
}
136136

137137
virtual void hook_write(uint64_t addr, uint32_t ai, uint32_t s, uint32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay) override {
138-
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_write(addr, -1, -1, -1, hit, meta, data, delay);
138+
if constexpr (EnMon || !C_VOID<DLY>) monitors->hook_write(addr, -1, -1, -1, -1, hit, meta, data, delay);
139139
}
140140

141141
private:

util/monitor.hpp

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ class MonitorBase
2525

2626
// standard functions to supprt a type of monitoring
2727
virtual bool attach(uint64_t cache_id) = 0; // decide whether to attach the mointor to this cache
28-
virtual void read(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data) = 0;
29-
virtual void write(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data) = 0;
30-
virtual void invalid(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, const CMMetadataBase *meta, const CMDataBase *data) = 0;
28+
virtual void read(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data) = 0;
29+
virtual void write(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data) = 0;
30+
virtual void invalid(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, const CMMetadataBase *meta, const CMDataBase *data) = 0;
3131
virtual bool magic_func(uint64_t cache_id, uint64_t addr, uint64_t magic_id, void *magic_data) { return false; } // a special function to log non-standard information to a special monitor
3232

3333
// control
@@ -56,9 +56,9 @@ class MonitorContainerBase
5656
// support run-time assign/reassign mointors
5757
void detach_monitor() { monitors.clear(); }
5858

59-
virtual void hook_read(uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) = 0;
60-
virtual void hook_write(uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) = 0;
61-
virtual void hook_manage(uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, bool evict, bool writeback, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) = 0;
59+
virtual void hook_read(uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) = 0;
60+
virtual void hook_write(uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) = 0;
61+
virtual void hook_manage(uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, bool evict, bool writeback, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) = 0;
6262
virtual void magic_func(uint64_t addr, uint64_t magic_id, void *magic_data) = 0; // an interface for special communication with a specific monitor if attached
6363
virtual void pause() = 0;
6464
virtual void resume() = 0;
@@ -103,19 +103,19 @@ class CacheMonitorImp : public MonitorContainerBase
103103
}
104104
}
105105

106-
virtual void hook_read(uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) override {
107-
if constexpr (EnMon) for(auto m:monitors) m->read(id, addr, ai, s, w, hit, meta, data);
106+
virtual void hook_read(uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) override {
107+
if constexpr (EnMon) for(auto m:monitors) m->read(id, addr, ai, s, w, ev_rank, hit, meta, data);
108108
if constexpr (!C_VOID<DLY>) timer->read(addr, ai, s, w, hit, delay);
109109
}
110110

111-
virtual void hook_write(uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) override {
112-
if constexpr (EnMon) for(auto m:monitors) m->write(id, addr, ai, s, w, hit, meta, data);
111+
virtual void hook_write(uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) override {
112+
if constexpr (EnMon) for(auto m:monitors) m->write(id, addr, ai, s, w, ev_rank, hit, meta, data);
113113
if constexpr (!C_VOID<DLY>) timer->write(addr, ai, s, w, hit, delay);
114114
}
115115

116-
virtual void hook_manage(uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, bool evict, bool writeback, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) override {
116+
virtual void hook_manage(uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, bool evict, bool writeback, const CMMetadataBase *meta, const CMDataBase *data, uint64_t *delay, unsigned int genre = 0) override {
117117
if(hit && evict) {
118-
if constexpr (EnMon) for(auto m:monitors) m->invalid(id, addr, ai, s, w, meta, data);
118+
if constexpr (EnMon) for(auto m:monitors) m->invalid(id, addr, ai, s, w, ev_rank, meta, data);
119119
}
120120
if constexpr (!C_VOID<DLY>) timer->manage(addr, ai, s, w, hit, evict, writeback, delay);
121121
}
@@ -153,13 +153,13 @@ class SimpleAccMonitor : public MonitorBase
153153

154154
virtual bool attach(uint64_t cache_id) override { return true; }
155155

156-
virtual void read(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
156+
virtual void read(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
157157
if(!active) return;
158158
cnt_access++;
159159
if(!hit) cnt_miss++;
160160
}
161161

162-
virtual void write(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
162+
virtual void write(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
163163
if(!active) return;
164164
cnt_access++;
165165
cnt_write++;
@@ -169,7 +169,7 @@ class SimpleAccMonitor : public MonitorBase
169169
}
170170
}
171171

172-
virtual void invalid(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, const CMMetadataBase *meta, const CMDataBase *data) override {
172+
virtual void invalid(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, const CMMetadataBase *meta, const CMDataBase *data) override {
173173
if(!active) return;
174174
cnt_invalid++;
175175
}
@@ -210,10 +210,10 @@ class SimpleTracer : public MonitorBase
210210

211211
virtual bool attach(uint64_t cache_id) { return true; }
212212

213-
virtual void read(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
213+
virtual void read(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
214214
if(!active) return;
215215
std::string msg; msg.reserve(100);
216-
msg += (boost::format("%-10s read %016x %02d %04d %02d %1x") % UniqueID::name(cache_id) % addr % ai % s % w % hit).str();
216+
msg += (boost::format("%-10s read %016x %02d %04d %02d %02d %1x") % UniqueID::name(cache_id) % addr % ai % s % w % ev_rank % hit).str();
217217

218218
if(meta)
219219
msg.append(" [").append(meta->to_string()).append("]");
@@ -225,10 +225,10 @@ class SimpleTracer : public MonitorBase
225225

226226
print(msg);
227227
}
228-
virtual void write(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
228+
virtual void write(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
229229
if(!active) return;
230230
std::string msg; msg.reserve(100);
231-
msg += (boost::format("%-10s write %016x %02d %04d %02d %1x") % UniqueID::name(cache_id) % addr % ai % s % w % hit).str();
231+
msg += (boost::format("%-10s write %016x %02d %04d %02d %02d %1x") % UniqueID::name(cache_id) % addr % ai % s % w % ev_rank % hit).str();
232232

233233
if(meta)
234234
msg.append(" [").append(meta->to_string()).append("]");
@@ -240,10 +240,10 @@ class SimpleTracer : public MonitorBase
240240

241241
print(msg);
242242
}
243-
virtual void invalid(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, const CMMetadataBase *meta, const CMDataBase *data) override {
243+
virtual void invalid(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, const CMMetadataBase *meta, const CMDataBase *data) override {
244244
if(!active) return;
245245
std::string msg; msg.reserve(100);
246-
msg += (boost::format("%-10s evict %016x %02d %04d %02d ") % UniqueID::name(cache_id) % addr % ai % s % w).str() ;
246+
msg += (boost::format("%-10s evict %016x %02d %04d %02d %02d ") % UniqueID::name(cache_id) % addr % ai % s % w % ev_rank).str() ;
247247

248248
if(meta)
249249
msg.append(" [").append(meta->to_string()).append("]");
@@ -297,10 +297,10 @@ class AddrTracer : public MonitorBase
297297

298298
virtual bool attach(uint64_t cache_id) override { return true; }
299299

300-
virtual void read(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
300+
virtual void read(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
301301
if(!active || addr != target) return;
302302
std::string msg; msg.reserve(100);
303-
msg += (boost::format("%-10s read %016x %02d %04d %02d %1x") % UniqueID::name(cache_id) % addr % ai % s % w % hit).str();
303+
msg += (boost::format("%-10s read %016x %02d %04d %02d %02d %1x") % UniqueID::name(cache_id) % addr % ai % s % w % ev_rank % hit).str();
304304

305305
if(meta)
306306
msg.append(" [").append(meta->to_string()).append("]");
@@ -313,10 +313,10 @@ class AddrTracer : public MonitorBase
313313
print(msg);
314314
}
315315

316-
virtual void write(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
316+
virtual void write(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, bool hit, const CMMetadataBase *meta, const CMDataBase *data) override {
317317
if(!active || target != addr) return;
318318
std::string msg; msg.reserve(100);
319-
msg += (boost::format("%-10s write %016x %02d %04d %02d %1x") % UniqueID::name(cache_id) % addr % ai % s % w % hit).str();
319+
msg += (boost::format("%-10s write %016x %02d %04d %02d %02d %1x") % UniqueID::name(cache_id) % addr % ai % s % w % ev_rank % hit).str();
320320

321321
if(meta)
322322
msg.append(" [").append(meta->to_string()).append("]");
@@ -329,10 +329,10 @@ class AddrTracer : public MonitorBase
329329
print(msg);
330330
}
331331

332-
virtual void invalid(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, const CMMetadataBase *meta, const CMDataBase *data) override {
332+
virtual void invalid(uint64_t cache_id, uint64_t addr, int32_t ai, int32_t s, int32_t w, int32_t ev_rank, const CMMetadataBase *meta, const CMDataBase *data) override {
333333
if(!active || target != addr) return;
334334
std::string msg; msg.reserve(100);
335-
msg += (boost::format("%-10s evict %016x %02d %04d %02d ") % UniqueID::name(cache_id) % addr % ai % s % w).str() ;
335+
msg += (boost::format("%-10s evict %016x %02d %04d %02d %02d ") % UniqueID::name(cache_id) % addr % ai % s % w % ev_rank).str() ;
336336

337337
if(meta)
338338
msg.append(" [").append(meta->to_string()).append("]");

0 commit comments

Comments
 (0)