MCPcopy Create free account
hub / github.com/1a1a11a/libCacheSim / admit

Method admit

libCacheSim/cache/eviction/LRB/lrb.cpp:231–268  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

229}
230
231void LRBCache::admit(const SimpleRequest &req) {
232 const uint64_t &size = req.size;
233 if (size > _cacheSize) {
234 LOG("L", _cacheSize, req.id, size);
235 return;
236 }
237
238 auto it = key_map.find(req.id);
239 if (it == key_map.end()) {
240 // fresh insert
241 key_map.insert(
242 {static_cast<uint64_t>(req.id), {0, (uint32_t)in_cache_metas.size()}});
243 auto lru_it = in_cache_lru_queue.request(req.id);
244 in_cache_metas.emplace_back(req.id, req.size, current_seq,
245 req.extra_features, lru_it);
246 _currentSize += size;
247 } else {
248 // bring list 1 to list 0
249 // first move meta data, then modify hash table
250 uint32_t tail0_pos = in_cache_metas.size();
251 auto &meta = out_cache_metas[it->second.list_pos];
252 meta._size = size;
253 auto forget_timestamp = meta._past_timestamp % memory_window;
254 negative_candidate_queue->erase(forget_timestamp);
255 auto it_lru = in_cache_lru_queue.request(req.id);
256 in_cache_metas.emplace_back(out_cache_metas[it->second.list_pos], it_lru);
257 uint32_t tail1_pos = out_cache_metas.size() - 1;
258 if (it->second.list_pos != tail1_pos) {
259 // swap tail
260 out_cache_metas[it->second.list_pos] = out_cache_metas[tail1_pos];
261 key_map.find(out_cache_metas[tail1_pos]._key)->second.list_pos =
262 it->second.list_pos;
263 }
264 out_cache_metas.pop_back();
265 it->second = {0, tail0_pos};
266 _currentSize += size;
267 }
268}
269
270pair<uint64_t, uint32_t> LRBCache::rank() {
271 {

Callers 2

cache_can_insert_defaultFunction · 0.45
LRB_insertFunction · 0.45

Calls 7

findMethod · 0.45
endMethod · 0.45
insertMethod · 0.45
sizeMethod · 0.45
requestMethod · 0.45
emplace_backMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected