Merge pull request #744 from mmkayPL/cacheline-alignment
Cacheline alignment
This commit is contained in:
commit
a7553fecee
@ -30,7 +30,7 @@ struct cas_classifier {
|
|||||||
struct workqueue_struct *wq;
|
struct workqueue_struct *wq;
|
||||||
|
|
||||||
/* Lock for rules list */
|
/* Lock for rules list */
|
||||||
rwlock_t lock;
|
rwlock_t lock __attribute__((aligned(64)));
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cas_cls_condition_handler;
|
struct cas_cls_condition_handler;
|
||||||
|
@ -192,8 +192,8 @@ static int _cas_upgrade_dump_cache_conf_main(ocf_cache_t cache,
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct _ocf_core_visitor_ctx {
|
struct _ocf_core_visitor_ctx {
|
||||||
int i;
|
|
||||||
struct cas_properties *cache_props;
|
struct cas_properties *cache_props;
|
||||||
|
int i;
|
||||||
int error;
|
int error;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -710,9 +710,9 @@ static int _cas_upgrade_init_props_array(
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct _cas_cache_dump_conf_visitor_ctx {
|
struct _cas_cache_dump_conf_visitor_ctx {
|
||||||
int i;
|
|
||||||
struct cas_properties **caches_props_array;
|
struct cas_properties **caches_props_array;
|
||||||
struct casdsk_props_conf *caches_serialized_conf;
|
struct casdsk_props_conf *caches_serialized_conf;
|
||||||
|
int i;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -14,16 +14,16 @@ struct _env_allocator {
|
|||||||
/*!< Memory pool ID unique name */
|
/*!< Memory pool ID unique name */
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
/*!< Size of specific item of memory pool */
|
|
||||||
uint32_t item_size;
|
|
||||||
|
|
||||||
/*!< OS handle to memory pool */
|
/*!< OS handle to memory pool */
|
||||||
struct kmem_cache *kmem_cache;
|
struct kmem_cache *kmem_cache;
|
||||||
|
|
||||||
/*!< Number of currently allocated items in pool */
|
|
||||||
atomic_t count;
|
|
||||||
|
|
||||||
struct cas_reserve_pool *rpool;
|
struct cas_reserve_pool *rpool;
|
||||||
|
|
||||||
|
/*!< Size of specific item of memory pool */
|
||||||
|
uint32_t item_size;
|
||||||
|
|
||||||
|
/*!< Number of currently allocated items in pool */
|
||||||
|
atomic_t count __attribute__((aligned(64)));
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline size_t env_allocator_align(size_t size)
|
static inline size_t env_allocator_align(size_t size)
|
||||||
|
@ -9,14 +9,14 @@
|
|||||||
#define MAX_THREAD_NAME_SIZE 48
|
#define MAX_THREAD_NAME_SIZE 48
|
||||||
|
|
||||||
struct cas_thread_info {
|
struct cas_thread_info {
|
||||||
|
char name[MAX_THREAD_NAME_SIZE];
|
||||||
|
void *sync_data;
|
||||||
atomic_t stop;
|
atomic_t stop;
|
||||||
|
atomic_t kicked;
|
||||||
struct completion compl;
|
struct completion compl;
|
||||||
struct completion sync_compl;
|
struct completion sync_compl;
|
||||||
void *sync_data;
|
|
||||||
wait_queue_head_t wq;
|
wait_queue_head_t wq;
|
||||||
atomic_t kicked;
|
|
||||||
struct task_struct *thread;
|
struct task_struct *thread;
|
||||||
char name[MAX_THREAD_NAME_SIZE];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int _cas_io_queue_thread(void *data)
|
static int _cas_io_queue_thread(void *data)
|
||||||
|
@ -7,12 +7,12 @@
|
|||||||
#include "ocf_env.h"
|
#include "ocf_env.h"
|
||||||
|
|
||||||
struct env_mpool {
|
struct env_mpool {
|
||||||
int mpool_max;
|
|
||||||
/*!< Max mpool allocation order */
|
|
||||||
|
|
||||||
env_allocator *allocator[env_mpool_max];
|
env_allocator *allocator[env_mpool_max];
|
||||||
/*!< OS handle to memory pool */
|
/*!< OS handle to memory pool */
|
||||||
|
|
||||||
|
int mpool_max;
|
||||||
|
/*!< Max mpool allocation order */
|
||||||
|
|
||||||
uint32_t hdr_size;
|
uint32_t hdr_size;
|
||||||
/*!< Data header size (constant allocation part) */
|
/*!< Data header size (constant allocation part) */
|
||||||
|
|
||||||
|
@ -25,25 +25,31 @@
|
|||||||
#define CAS_DEBUG_PARAM(format, ...)
|
#define CAS_DEBUG_PARAM(format, ...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* This is currently 24B padded/force aligned to 32B.
|
||||||
|
* With a 64B cacheline this means two structs on different cores may
|
||||||
|
* invalidate each other. This shouldn't happen between different physical
|
||||||
|
* CPUs and cause false sharing though, since with an even number of cores
|
||||||
|
* per CPU same cacheline shouldn't be polluted from the other physical CPU.
|
||||||
|
* */
|
||||||
struct _cas_reserve_pool_per_cpu {
|
struct _cas_reserve_pool_per_cpu {
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
atomic_t count;
|
atomic_t count;
|
||||||
};
|
} __attribute__((__aligned__(32)));
|
||||||
|
|
||||||
struct cas_reserve_pool {
|
struct cas_reserve_pool {
|
||||||
uint32_t limit;
|
uint32_t limit;
|
||||||
char *name;
|
|
||||||
uint32_t entry_size;
|
uint32_t entry_size;
|
||||||
|
char *name;
|
||||||
struct _cas_reserve_pool_per_cpu *rpools;
|
struct _cas_reserve_pool_per_cpu *rpools;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _cas_rpool_pre_alloc_info {
|
struct _cas_rpool_pre_alloc_info {
|
||||||
struct work_struct ws;
|
struct work_struct ws;
|
||||||
|
struct completion cmpl;
|
||||||
struct cas_reserve_pool *rpool_master;
|
struct cas_reserve_pool *rpool_master;
|
||||||
cas_rpool_new rpool_new;
|
cas_rpool_new rpool_new;
|
||||||
void *allocator_ctx;
|
void *allocator_ctx;
|
||||||
struct completion cmpl;
|
|
||||||
int error;
|
int error;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user