On Tue, Feb 28, 2023 at 05:52:28PM +0100, Otto Moerbeek wrote: > Second iteration. > > Gain back performance by allocation chunk_info pages in a bundle, and > use less buckets is !malloc option S. The chunk sizes used are 16, 32, > 48, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 512, 640, > 768, 896, 1024, 1280, 1536, 1792, 2048 (and a few more for sparc84 > with it's 8k sized pages and loongson with it's 16k pages). > > If malloc option S (or rather cache size 0) is used we use strict > multiple of 16 buckets, to get as many buckets as possible. > > See the find_bucket() and bin_of() functions. Thanks to Tony Finch for > pointing me to code to compute nice bucket sizes. > > I think this is ready for review and wide testing.
Two vala-based ports, graphics/birdfont and productivity/minder, run out of memory when attempting to build them with this diff (and its previous version) on both amd64 and arm64: ***MEMORY-ERROR***: valac[93681]: GSlice: failed to allocate 2032 bytes (alignment: 2048): Cannot allocate memory Abort trap (core dumped) To be able to build birdfont with PORTS_PRIVSEP = Yes, I had to bump _pbuild's datasize-cur to 15G, while 14G was not enough. That's nearly double the current default. On amd64 without this diff, birdfont builds comfortably with a datasize-cur of 1G. birdfont may be easier to investigate since the error happens early in the build. You can get there relatively quickly by doing cd /usr/ports/graphics/birdfont doas pkg_add birdfont make FETCH_PACKAGES= prepare make Not sure if the top of the trace is of much use. Here it is: #0 thrkill () at /tmp/-:3 #1 0x486dd8c0aacac468 in ?? () #2 0x00000c3a34319d0e in _libc_abort () at /usr/src/lib/libc/stdlib/abort.c:51 #3 0x00000c39b735724b in mem_error () from /usr/local/lib/libglib-2.0.so.4201.9 #4 0x00000c39b735604f in slab_allocator_alloc_chunk () from /usr/local/lib/libglib-2.0.so.4201.9 #5 0x00000c39b7355a95 in g_slice_alloc () from /usr/local/lib/libglib-2.0.so.4201.9 #6 0x00000c39b735606e in g_slice_alloc0 () from /usr/local/lib/libglib-2.0.so.4201.9 #7 0x00000c396c2675f5 in g_type_create_instance () from /usr/local/lib/libgobject-2.0.so.4200.16 #8 0x00000c3a19ad2222 in vala_data_type_construct_with_symbol () from /usr/local/lib/libvala-0.56.so.0.0 #9 0x00000c3a19b4ecae in vala_integer_type_construct () from /usr/local/lib/libvala-0.56.so.0.0 #10 0x00000c3a19b4f08c in vala_integer_type_real_copy () from /usr/local/lib/libvala-0.56.so.0.0 #11 0x00000c3a19a9d46f in vala_assignment_real_check () from /usr/local/lib/libvala-0.56.so.0.0 #12 0x00000c3a19ae54e5 in vala_expression_statement_real_check () from /usr/local/lib/libvala-0.56.so.0.0 #13 0x00000c3a19aa6a0d in vala_block_real_check () from /usr/local/lib/libvala-0.56.so.0.0