| #ifndef JEMALLOC_INTERNAL_SEC_OPTS_H |
| #define JEMALLOC_INTERNAL_SEC_OPTS_H |
| |
| /* |
| * The configuration settings used by an sec_t. Morally, this is part of the |
| * SEC interface, but we put it here for header-ordering reasons. |
| */ |
| |
| typedef struct sec_opts_s sec_opts_t; |
| struct sec_opts_s { |
| /* |
| * We don't necessarily always use all the shards; requests are |
| * distributed across shards [0, nshards - 1). |
| */ |
| size_t nshards; |
| /* |
| * We'll automatically refuse to cache any objects in this sec if |
| * they're larger than max_alloc bytes, instead forwarding such objects |
| * directly to the fallback. |
| */ |
| size_t max_alloc; |
| /* |
| * Exceeding this amount of cached extents in a shard causes us to start |
| * flushing bins in that shard until we fall below bytes_after_flush. |
| */ |
| size_t max_bytes; |
| /* |
| * The number of bytes (in all bins) we flush down to when we exceed |
| * bytes_cur. We want this to be less than bytes_cur, because |
| * otherwise we could get into situations where a shard undergoing |
| * net-deallocation keeps bytes_cur very near to max_bytes, so that |
| * most deallocations get immediately forwarded to the underlying PAI |
| * implementation, defeating the point of the SEC. |
| */ |
| size_t bytes_after_flush; |
| /* |
| * When we can't satisfy an allocation out of the SEC because there are |
| * no available ones cached, we allocate multiple of that size out of |
| * the fallback allocator. Eventually we might want to do something |
| * cleverer, but for now we just grab a fixed number. |
| */ |
| size_t batch_fill_extra; |
| }; |
| |
| #define SEC_OPTS_DEFAULT { \ |
| /* nshards */ \ |
| 4, \ |
| /* max_alloc */ \ |
| (32 * 1024) < PAGE ? PAGE : (32 * 1024), \ |
| /* max_bytes */ \ |
| 256 * 1024, \ |
| /* bytes_after_flush */ \ |
| 128 * 1024, \ |
| /* batch_fill_extra */ \ |
| 0 \ |
| } |
| |
| |
| #endif /* JEMALLOC_INTERNAL_SEC_OPTS_H */ |