* @brief initialize a SFIFO cache * * @param ccache_params some common cache parameters * @param cache_specific_params SFIFO specific parameters, e.g., "n-seg=4" */
| 117 | * @param cache_specific_params SFIFO specific parameters, e.g., "n-seg=4" |
| 118 | */ |
| 119 | cache_t *SFIFO_init(const common_cache_params_t ccache_params, |
| 120 | const char *cache_specific_params) { |
| 121 | cache_t *cache = cache_struct_init("SFIFO", ccache_params, cache_specific_params); |
| 122 | cache->cache_init = SFIFO_init; |
| 123 | cache->cache_free = SFIFO_free; |
| 124 | cache->get = SFIFO_get; |
| 125 | cache->find = SFIFO_find; |
| 126 | cache->insert = SFIFO_insert; |
| 127 | cache->evict = SFIFO_evict; |
| 128 | cache->remove = SFIFO_remove; |
| 129 | cache->to_evict = SFIFO_to_evict; |
| 130 | cache->get_occupied_byte = cache_get_occupied_byte_default; |
| 131 | cache->get_n_obj = cache_get_n_obj_default; |
| 132 | cache->can_insert = SFIFO_can_insert; |
| 133 | |
| 134 | if (ccache_params.consider_obj_metadata) { |
| 135 | cache->obj_md_size = 8 * 2; |
| 136 | } else { |
| 137 | cache->obj_md_size = 0; |
| 138 | } |
| 139 | |
| 140 | cache->eviction_params = (SFIFO_params_t *)malloc(sizeof(SFIFO_params_t)); |
| 141 | SFIFO_params_t *params = (SFIFO_params_t *)(cache->eviction_params); |
| 142 | params->n_seg = 4; |
| 143 | |
| 144 | if (cache_specific_params != NULL) { |
| 145 | SFIFO_parse_params(cache, cache_specific_params); |
| 146 | } |
| 147 | |
| 148 | params->per_seg_max_size = ccache_params.cache_size / params->n_seg; |
| 149 | params->fifo_heads = |
| 150 | (cache_obj_t **)malloc(sizeof(cache_obj_t *) * params->n_seg); |
| 151 | params->fifo_tails = |
| 152 | (cache_obj_t **)malloc(sizeof(cache_obj_t *) * params->n_seg); |
| 153 | params->fifo_n_objs = (int64_t *)malloc(sizeof(int64_t) * params->n_seg); |
| 154 | params->fifo_n_bytes = (int64_t *)malloc(sizeof(int64_t) * params->n_seg); |
| 155 | |
| 156 | for (int i = 0; i < params->n_seg; i++) { |
| 157 | params->fifo_heads[i] = NULL; |
| 158 | params->fifo_tails[i] = NULL; |
| 159 | params->fifo_n_objs[i] = 0; |
| 160 | params->fifo_n_bytes[i] = 0; |
| 161 | } |
| 162 | |
| 163 | return cache; |
| 164 | } |
| 165 | |
| 166 | /** |
| 167 | * @brief this function is the user facing API |
no test coverage detected