Split global metadata lock
Divide single global lock instance into 4 to reduce contention in multiple read-locks scenario. Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:
@@ -2344,11 +2344,11 @@ ocf_promotion_t ocf_mngt_cache_promotion_get_policy(ocf_cache_t cache)
|
||||
{
|
||||
ocf_promotion_t result;
|
||||
|
||||
ocf_metadata_start_shared_access(&cache->metadata.lock);
|
||||
ocf_metadata_start_shared_access(&cache->metadata.lock, 0);
|
||||
|
||||
result = cache->conf_meta->promotion_policy_type;
|
||||
|
||||
ocf_metadata_end_shared_access(&cache->metadata.lock);
|
||||
ocf_metadata_end_shared_access(&cache->metadata.lock, 0);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -2358,11 +2358,11 @@ int ocf_mngt_cache_promotion_get_param(ocf_cache_t cache, ocf_promotion_t type,
|
||||
{
|
||||
int result;
|
||||
|
||||
ocf_metadata_start_shared_access(&cache->metadata.lock);
|
||||
ocf_metadata_start_shared_access(&cache->metadata.lock, 0);
|
||||
|
||||
result = ocf_promotion_get_param(cache, type, param_id, param_value);
|
||||
|
||||
ocf_metadata_end_shared_access(&cache->metadata.lock);
|
||||
ocf_metadata_end_shared_access(&cache->metadata.lock, 0);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@@ -59,10 +59,13 @@ void cache_mngt_core_deinit_attached_meta(ocf_core_t core)
|
||||
ocf_core_id_t iter_core_id;
|
||||
ocf_cache_line_t curr_cline, prev_cline;
|
||||
uint32_t hash, num_hash = cache->device->hash_table_entries;
|
||||
unsigned lock_idx;
|
||||
|
||||
for (hash = 0; hash < num_hash;) {
|
||||
prev_cline = cache->device->collision_table_entries;
|
||||
ocf_hb_id_prot_lock_wr(&cache->metadata.lock, hash);
|
||||
|
||||
lock_idx = ocf_metadata_concurrency_next_idx(cache->mngt_queue);
|
||||
ocf_hb_id_prot_lock_wr(&cache->metadata.lock, lock_idx, hash);
|
||||
|
||||
curr_cline = ocf_metadata_get_hash(cache, hash);
|
||||
while (curr_cline != cache->device->collision_table_entries) {
|
||||
@@ -91,7 +94,7 @@ void cache_mngt_core_deinit_attached_meta(ocf_core_t core)
|
||||
else
|
||||
curr_cline = ocf_metadata_get_hash(cache, hash);
|
||||
}
|
||||
ocf_hb_id_prot_unlock_wr(&cache->metadata.lock, hash);
|
||||
ocf_hb_id_prot_unlock_wr(&cache->metadata.lock, lock_idx, hash);
|
||||
|
||||
/* Check whether all the cachelines from the hash bucket were sparsed */
|
||||
if (curr_cline == cache->device->collision_table_entries)
|
||||
|
Reference in New Issue
Block a user