mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-05-01 15:28:00 +00:00
MINOR: pools: add a new debugging flag POOL_DBG_COLD_FIRST
When enabling pools integrity checks, we usually prefer to allocate cold objects first in order to maximize the time the objects spend in the cache. In order to make this configurable at runtime, let's introduce a new debugging flag to control this allocation order. It is currently preset by the DEBUG_POOL_INTEGRITY build-time setting.
This commit is contained in:
parent
fd8b737e2c
commit
d3470e1ce8
@ -43,6 +43,7 @@
|
||||
/* pool debugging flags */
|
||||
#define POOL_DBG_FAIL_ALLOC 0x00000001 // randomly fail memory allocations
|
||||
#define POOL_DBG_DONT_MERGE 0x00000002 // do not merge same-size pools
|
||||
#define POOL_DBG_COLD_FIRST 0x00000004 // pick cold objects first
|
||||
|
||||
|
||||
/* This is the head of a thread-local cache */
|
||||
|
@ -275,16 +275,18 @@ static inline void *pool_get_from_cache(struct pool_head *pool, const void *call
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (unlikely(pool_debugging & POOL_DBG_COLD_FIRST)) {
|
||||
/* allocate oldest objects first so as to keep them as long as possible
|
||||
* in the cache before being reused and maximizing the chance to detect
|
||||
* an overwrite.
|
||||
*/
|
||||
item = LIST_PREV(&ph->list, typeof(item), by_pool);
|
||||
} else {
|
||||
/* allocate hottest objects first */
|
||||
item = LIST_NEXT(&ph->list, typeof(item), by_pool);
|
||||
}
|
||||
#if defined(DEBUG_POOL_INTEGRITY)
|
||||
/* allocate oldest objects first so as to keep them as long as possible
|
||||
* in the cache before being reused and maximizing the chance to detect
|
||||
* an overwrite.
|
||||
*/
|
||||
item = LIST_PREV(&ph->list, typeof(item), by_pool);
|
||||
pool_check_pattern(ph, item, pool->size);
|
||||
#else
|
||||
/* allocate hottest objects first */
|
||||
item = LIST_NEXT(&ph->list, typeof(item), by_pool);
|
||||
#endif
|
||||
BUG_ON(&item->by_pool == &ph->list);
|
||||
LIST_DELETE(&item->by_pool);
|
||||
|
@ -43,6 +43,9 @@ uint pool_debugging __read_mostly = /* set of POOL_DBG_* flags */
|
||||
#endif
|
||||
#ifdef DEBUG_DONT_SHARE_POOLS
|
||||
POOL_DBG_DONT_MERGE |
|
||||
#endif
|
||||
#ifdef DEBUG_POOL_INTEGRITY
|
||||
POOL_DBG_COLD_FIRST |
|
||||
#endif
|
||||
0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user