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:
@@ -13,6 +13,7 @@
|
||||
#include "../cleaning/acp.h"
|
||||
#include "../engine/engine_common.h"
|
||||
#include "../concurrency/ocf_cache_line_concurrency.h"
|
||||
#include "../concurrency/ocf_metadata_concurrency.h"
|
||||
#include "cleaning_priv.h"
|
||||
|
||||
#define OCF_ACP_DEBUG 0
|
||||
@@ -385,8 +386,11 @@ static ocf_cache_line_t _acp_trylock_dirty(struct ocf_cache *cache,
|
||||
{
|
||||
struct ocf_map_info info;
|
||||
bool locked = false;
|
||||
unsigned lock_idx = ocf_metadata_concurrency_next_idx(
|
||||
cache->cleaner.io_queue);
|
||||
|
||||
ocf_hb_cline_prot_lock_rd(&cache->metadata.lock, core_id, core_line);
|
||||
ocf_hb_cline_prot_lock_rd(&cache->metadata.lock, lock_idx, core_id,
|
||||
core_line);
|
||||
|
||||
ocf_engine_lookup_map_entry(cache, &info, core_id,
|
||||
core_line);
|
||||
@@ -397,7 +401,8 @@ static ocf_cache_line_t _acp_trylock_dirty(struct ocf_cache *cache,
|
||||
locked = true;
|
||||
}
|
||||
|
||||
ocf_hb_cline_prot_unlock_rd(&cache->metadata.lock, core_id, core_line);
|
||||
ocf_hb_cline_prot_unlock_rd(&cache->metadata.lock, lock_idx, core_id,
|
||||
core_line);
|
||||
|
||||
return locked ? info.coll_idx : cache->device->collision_table_entries;
|
||||
}
|
||||
|
Reference in New Issue
Block a user