diff --git a/libCacheSim/cache/eviction/ClockPro.c b/libCacheSim/cache/eviction/ClockPro.c index 2b29b3c3..1d6ca755 100644 --- a/libCacheSim/cache/eviction/ClockPro.c +++ b/libCacheSim/cache/eviction/ClockPro.c @@ -510,7 +510,7 @@ static void ClockPro_parse_params(cache_t *cache, params->init_ref = strtol(value, &end, 10); } else if (strcasecmp(key, "init-ratio-cold") == 0) { const double ratio = strtod(value, &end); - params->mem_cold_max = (int64_t)((double)cache->cache_size * ratio); + params->mem_cold_max = (int64_t)(cache->cache_size * ratio); } else if (strcasecmp(key, "print") == 0) { printf("current parameters: %s\n", ClockPro_current_params(cache, params)); diff --git a/libCacheSim/cache/eviction/QDLP.c b/libCacheSim/cache/eviction/QDLP.c index 16db6cac..d14bde57 100644 --- a/libCacheSim/cache/eviction/QDLP.c +++ b/libCacheSim/cache/eviction/QDLP.c @@ -100,11 +100,17 @@ cache_t *QDLP_init(const common_cache_params_t ccache_params, } int64_t fifo_cache_size = - (int64_t)ccache_params.cache_size * params->small_size_ratio; + (int64_t)(ccache_params.cache_size * params->small_size_ratio); int64_t main_cache_size = ccache_params.cache_size - fifo_cache_size; int64_t ghost_cache_size = (int64_t)(ccache_params.cache_size * params->ghost_size_ratio); + if (fifo_cache_size <= 0 || main_cache_size <= 0) { + ERROR( + "Invalid cache size configuration: fifo=%lld bytes, main=%lld bytes\n", + (long long)fifo_cache_size, (long long)main_cache_size); + } + common_cache_params_t ccache_params_local = ccache_params; ccache_params_local.cache_size = fifo_cache_size; params->small_cache = FIFO_init(ccache_params_local, NULL); diff --git a/libCacheSim/cache/eviction/S3FIFO.c b/libCacheSim/cache/eviction/S3FIFO.c index d3668e79..4694e285 100644 --- a/libCacheSim/cache/eviction/S3FIFO.c +++ b/libCacheSim/cache/eviction/S3FIFO.c @@ -112,11 +112,19 @@ cache_t *S3FIFO_init(const common_cache_params_t ccache_params, } int64_t small_fifo_size = - (int64_t)ccache_params.cache_size * params->small_size_ratio; + (int64_t)(ccache_params.cache_size * params->small_size_ratio); int64_t main_fifo_size = ccache_params.cache_size - small_fifo_size; int64_t ghost_fifo_size = (int64_t)(ccache_params.cache_size * params->ghost_size_ratio); + if (small_fifo_size <= 0 || main_fifo_size <= 0) { + ERROR( + "Invalid cache size configuration: small_fifo=%lld bytes, " + "main_fifo=%lld " + "bytes\n", + (long long)small_fifo_size, (long long)main_fifo_size); + } + common_cache_params_t ccache_params_local = ccache_params; ccache_params_local.cache_size = small_fifo_size; params->small_fifo = FIFO_init(ccache_params_local, NULL); diff --git a/libCacheSim/cache/eviction/S3FIFOd.c b/libCacheSim/cache/eviction/S3FIFOd.c index 5c7596b4..ede19d16 100644 --- a/libCacheSim/cache/eviction/S3FIFOd.c +++ b/libCacheSim/cache/eviction/S3FIFOd.c @@ -101,10 +101,17 @@ cache_t *S3FIFOd_init(const common_cache_params_t ccache_params, } int64_t fifo_cache_size = - (int64_t)ccache_params.cache_size * params->small_fifo_size_ratio; + (int64_t)(ccache_params.cache_size * params->small_fifo_size_ratio); int64_t main_fifo_size = ccache_params.cache_size - fifo_cache_size; int64_t ghost_fifo = main_fifo_size; + if (fifo_cache_size <= 0 || main_fifo_size <= 0) { + ERROR( + "Invalid cache size configuration: fifo=%lld bytes, main_fifo=%lld " + "bytes\n", + (long long)fifo_cache_size, (long long)main_fifo_size); + } + common_cache_params_t ccache_params_local = ccache_params; ccache_params_local.cache_size = fifo_cache_size; params->small_fifo = FIFO_init(ccache_params_local, NULL); diff --git a/libCacheSim/cache/eviction/S3FIFOv0.c b/libCacheSim/cache/eviction/S3FIFOv0.c index 0797f301..2c12b41a 100644 --- a/libCacheSim/cache/eviction/S3FIFOv0.c +++ b/libCacheSim/cache/eviction/S3FIFOv0.c @@ -110,11 +110,18 @@ cache_t *S3FIFOv0_init(const common_cache_params_t ccache_params, } int64_t fifo_cache_size = - (int64_t)ccache_params.cache_size * params->small_size_ratio; + (int64_t)(ccache_params.cache_size * params->small_size_ratio); int64_t main_fifo_size = ccache_params.cache_size - fifo_cache_size; int64_t ghostfifo__cachee_siz = (int64_t)(ccache_params.cache_size * params->ghost_size_ratio); + if (fifo_cache_size <= 0 || main_fifo_size <= 0) { + ERROR( + "Invalid cache size configuration: fifo=%lld bytes, main_fifo=%lld " + "bytes\n", + (long long)fifo_cache_size, (long long)main_fifo_size); + } + common_cache_params_t ccache_params_local = ccache_params; ccache_params_local.cache_size = fifo_cache_size; params->small_fifo = FIFO_init(ccache_params_local, NULL); diff --git a/libCacheSim/cache/eviction/SLRU.c b/libCacheSim/cache/eviction/SLRU.c index 326f2fbe..7beac103 100644 --- a/libCacheSim/cache/eviction/SLRU.c +++ b/libCacheSim/cache/eviction/SLRU.c @@ -135,7 +135,7 @@ cache_t *SLRU_init(const common_cache_params_t ccache_params, params->lru_max_n_bytes = calloc(params->n_seg, sizeof(int64_t)); for (int i = 0; i < params->n_seg; i++) { params->lru_max_n_bytes[i] = - (int64_t)ccache_params.cache_size / params->n_seg; + (int64_t)(ccache_params.cache_size / params->n_seg); } } @@ -455,6 +455,10 @@ static void SLRU_parse_params(cache_t *cache, params->lru_max_n_bytes[i] = (int64_t)((double)seg_size_array[i] / seg_size_sum * cache->cache_size); + if (params->lru_max_n_bytes[i] <= 0) { + ERROR("Invalid segment size for segment %d: %lld bytes\n", i, + (long long)params->lru_max_n_bytes[i]); + } } } else if (strcasecmp(key, "print") == 0) { printf("current parameters: %s\n", SLRU_current_params(cache, params)); diff --git a/libCacheSim/cache/eviction/other/S3LRU.c b/libCacheSim/cache/eviction/other/S3LRU.c index b4be5a89..d18f20fb 100644 --- a/libCacheSim/cache/eviction/other/S3LRU.c +++ b/libCacheSim/cache/eviction/other/S3LRU.c @@ -106,11 +106,16 @@ cache_t *S3LRU_init(const common_cache_params_t ccache_params, } int64_t LRU_cache_size = - (int64_t)ccache_params.cache_size * params->LRU_size_ratio; + (int64_t)(ccache_params.cache_size * params->LRU_size_ratio); int64_t main_cache_size = ccache_params.cache_size - LRU_cache_size; int64_t LRU_ghost_cache_size = (int64_t)(ccache_params.cache_size * params->ghost_size_ratio); + if (LRU_cache_size <= 0 || main_cache_size <= 0) { + ERROR("Invalid cache size configuration: LRU=%lld bytes, main=%lld bytes\n", + (long long)LRU_cache_size, (long long)main_cache_size); + } + common_cache_params_t ccache_params_local = ccache_params; ccache_params_local.cache_size = LRU_cache_size; // params->LRU = LRU_init(ccache_params_local, NULL); diff --git a/libCacheSim/cache/eviction/other/flashProb.c b/libCacheSim/cache/eviction/other/flashProb.c index 97bb4a87..0e059fcb 100644 --- a/libCacheSim/cache/eviction/other/flashProb.c +++ b/libCacheSim/cache/eviction/other/flashProb.c @@ -91,9 +91,14 @@ cache_t *flashProb_init(const common_cache_params_t ccache_params, } int64_t ram_cache_size = - (int64_t)ccache_params.cache_size * params->ram_size_ratio; + (int64_t)(ccache_params.cache_size * params->ram_size_ratio); int64_t disk_cache_size = ccache_params.cache_size - ram_cache_size; + if (ram_cache_size <= 0 || disk_cache_size <= 0) { + ERROR("Invalid cache size configuration: ram=%lld bytes, disk=%lld bytes\n", + (long long)ram_cache_size, (long long)disk_cache_size); + } + common_cache_params_t ccache_params_local = ccache_params; ccache_params_local.cache_size = ram_cache_size; if (strcasecmp(params->ram_cache_type, "ARC") == 0) {