Optimizations in nxt_mp_create().

This commit is contained in:
Igor Sysoev
2017-06-21 10:21:06 +03:00
parent d59e906c01
commit 5e73d93999

View File

@@ -156,41 +156,37 @@ nxt_mp_create(size_t cluster_size, size_t page_alignment, size_t page_size,
size_t min_chunk_size) size_t min_chunk_size)
{ {
nxt_mp_t *mp; nxt_mp_t *mp;
nxt_uint_t pages, chunk_size; uint32_t pages, chunk_size_shift, page_size_shift;
nxt_queue_t *chunk_pages; nxt_queue_t *chunk_pages;
pages = 0; chunk_size_shift = nxt_lg2(min_chunk_size);
chunk_size = page_size; page_size_shift = nxt_lg2(page_size);
do { pages = page_size_shift - chunk_size_shift;
pages++;
chunk_size /= 2;
} while (chunk_size > min_chunk_size);
mp = nxt_zalloc(sizeof(nxt_mp_t) + pages * sizeof(nxt_queue_t)); mp = nxt_zalloc(sizeof(nxt_mp_t) + pages * sizeof(nxt_queue_t));
if (nxt_fast_path(mp != NULL)) { if (nxt_fast_path(mp != NULL)) {
mp->retain = 1; mp->retain = 1;
mp->chunk_size_shift = chunk_size_shift;
mp->page_size_shift = page_size_shift;
mp->page_size = page_size; mp->page_size = page_size;
mp->page_alignment = nxt_max(page_alignment, NXT_MAX_ALIGNMENT); mp->page_alignment = nxt_max(page_alignment, NXT_MAX_ALIGNMENT);
mp->cluster_size = cluster_size; mp->cluster_size = cluster_size;
chunk_pages = mp->chunk_pages; chunk_pages = mp->chunk_pages;
do { while (pages != 0) {
nxt_queue_init(chunk_pages); nxt_queue_init(chunk_pages);
chunk_pages++; chunk_pages++;
chunk_size *= 2; pages--;
} while (chunk_size < page_size); };
mp->chunk_size_shift = nxt_lg2(min_chunk_size);
mp->page_size_shift = nxt_lg2(page_size);
nxt_rbtree_init(&mp->blocks, nxt_mp_rbtree_compare);
nxt_queue_init(&mp->free_pages); nxt_queue_init(&mp->free_pages);
nxt_queue_init(&mp->nget_pages); nxt_queue_init(&mp->nget_pages);
nxt_queue_init(&mp->get_pages); nxt_queue_init(&mp->get_pages);
nxt_rbtree_init(&mp->blocks, nxt_mp_rbtree_compare);
} }
return mp; return mp;