New submission from Tim Peters <t...@python.org>:

On 64-bit Python, many object sizes essentially doubled over 32-bit Python, 
because Python objects are so heavy with pointers.  More recently, forcing 
alignment to 16 bytes on 64-bit boxes boosted the memory requirements more 
modestly.

But obmalloc's 256 KiB arenas and 4 KiB pools haven't changed since obmalloc 
was first written, and its `address_in_range()` machinery cannot deal with 
pools bigger than that (they're segfault factories, because the machinery 
relies on that a pool is no larger than a system page).

obmalloc's fastest paths are those that stay within a pool.  Whenever a pool 
boundary is hit, it necessarily gets slower, then slower still if an arena 
boundary is hit.

So I propose to:

- Remove the 4 KiB pool limit, by making `address_in_range()` page-based rather 
than pool-based.  Pools should be able to span any power-of-2 number of pages.  
Then a pool for a given size class will be able to hold that many more times as 
many objects too, and so stay in the fastest paths more often.

- On 64-bit boxes, increase both POOL_SIZE and ARENA_SIZE.

----------
components: Interpreter Core
messages: 345097
nosy: tim.peters
priority: normal
severity: normal
status: open
title: obmalloc:  eliminate limit on pool size
type: enhancement
versions: Python 3.9

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue37211>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to