Cache line align various structures and move volatile counters to

not share a cache line with (mostly) immutable state

Reviewed by:	jeff@
MFC after:	7 days
This commit is contained in:
Kip Macy 2010-03-17 21:18:28 +00:00
parent e577b0b2e3
commit 5e4bb93cca
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=205266

View File

@ -159,6 +159,11 @@ struct uma_hash {
int uh_hashmask; /* Mask used during hashing */
};
/*
* align field or structure to cache line
*/
#define UMA_ALIGN __aligned(CACHE_LINE_SIZE)
/*
* Structures for per cpu queues.
*/
@ -168,7 +173,7 @@ struct uma_bucket {
int16_t ub_cnt; /* Count of free items. */
int16_t ub_entries; /* Max items. */
void *ub_bucket[]; /* actual allocation storage */
};
} UMA_ALIGN;
typedef struct uma_bucket * uma_bucket_t;
@ -177,7 +182,7 @@ struct uma_cache {
uma_bucket_t uc_allocbucket; /* Bucket to allocate from */
u_int64_t uc_allocs; /* Count of allocations */
u_int64_t uc_frees; /* Count of frees */
};
} UMA_ALIGN;
typedef struct uma_cache * uma_cache_t;
@ -312,11 +317,12 @@ struct uma_zone {
uma_init uz_init; /* Initializer for each item */
uma_fini uz_fini; /* Discards memory */
u_int64_t uz_allocs; /* Total number of allocations */
u_int64_t uz_frees; /* Total number of frees */
u_int64_t uz_fails; /* Total number of alloc failures */
u_int32_t uz_flags; /* Flags inherited from kegs */
u_int32_t uz_size; /* Size inherited from kegs */
u_int64_t uz_allocs UMA_ALIGN; /* Total number of allocations */
u_int64_t uz_frees; /* Total number of frees */
u_int64_t uz_fails; /* Total number of alloc failures */
uint16_t uz_fills; /* Outstanding bucket fills */
uint16_t uz_count; /* Highest value ub_ptr can have */
@ -324,7 +330,7 @@ struct uma_zone {
* This HAS to be the last item because we adjust the zone size
* based on NCPU and then allocate the space for the zones.
*/
struct uma_cache uz_cpu[1]; /* Per cpu caches */
struct uma_cache uz_cpu[1] UMA_ALIGN; /* Per cpu caches */
};
/*
@ -341,6 +347,8 @@ struct uma_zone {
#define UMA_ZFLAG_INHERIT (UMA_ZFLAG_INTERNAL | UMA_ZFLAG_CACHEONLY | \
UMA_ZFLAG_BUCKET)
#undef UMA_ALIGN
#ifdef _KERNEL
/* Internal prototypes */
static __inline uma_slab_t hash_sfind(struct uma_hash *hash, u_int8_t *data);