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

Function ClockPro_run_hot

libCacheSim/cache/eviction/ClockPro.c:394–429  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

392}
393
394static void ClockPro_run_hot(cache_t *cache) {
395 ClockPro_params_t *params = (ClockPro_params_t *)cache->eviction_params;
396 cache_obj_t *obj = params->hand_hot;
397
398 if (obj->clockpro.status != CLOCKPRO_HOT) {
399 params->hand_hot = obj->queue.next;
400 return;
401 }
402
403 if (obj->clockpro.referenced) {
404 obj->clockpro.referenced = false;
405 params->hand_hot = obj->queue.next;
406 return;
407 }
408
409 while (params->mem_cold + obj->obj_size > params->mem_cold_max) {
410 ClockPro_run_cold(cache);
411 }
412
413 obj->clockpro.status = CLOCKPRO_COLD;
414 obj->clockpro.referenced = params->init_ref;
415
416 if (params->hand_cold == obj) {
417 params->hand_cold = obj->queue.next;
418 }
419 if (params->hand_test == obj) {
420 params->hand_test = obj->queue.next;
421 }
422
423 cache_obj_t *hand_hot_next = params->hand_hot->queue.next;
424 move_obj_to_tail(&hand_hot_next, &params->hand_hot, obj);
425 params->hand_hot = obj->queue.next;
426
427 params->mem_hot -= obj->obj_size;
428 params->mem_cold += obj->obj_size;
429}
430
431static void ClockPro_promote(cache_t *cache, cache_obj_t *obj) {
432 ClockPro_params_t *params = (ClockPro_params_t *)cache->eviction_params;

Callers 1

ClockPro_promoteFunction · 0.85

Calls 2

ClockPro_run_coldFunction · 0.85
move_obj_to_tailFunction · 0.85

Tested by

no test coverage detected