You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
posix_memalign() fails at the assertion that checks if the memory is aligned when calling it with an alignment bigger than the page size and a size bigger than 2088961.
I found out about this when trying to run https://github.com/ssvb/tinymembench, which, during the latency benchmark, allocates a 64MB region aligned to 4MB.
I managed to make this allocation work by changing the continuous flag to true in https://github.com/cloudius-systems/osv/blob/master/core/mempool.cc#L1854
Of course, posix_memalign does not have this problem on Linux. It might be quite a niche problem.
The text was updated successfully, but these errors were encountered:
The bug is that malloc_large() when size is bigger than mmu::huge_page_size (2MB) and contiguous is not requested, calls mapped_malloc_large(size, offset) - this completely ignores the alignment parameter, and you always get a single-page (4KB) alignment - so the assertion in posix_memalign that it got the right alignment can fail.
By the way, the same call that ignores alignment is also used at the end of malloc_large() if attempting a continugous allocation failed.
I guess the best way to fix this bug would be to add an alignment parameter (which will need to be more than one page) to map_anon, and basically to allocate() in core/mmu.cc and find_hole(). I think it's not hard, but will be a bit ugly to do all these changes for such an obscure edge case :-(
posix_memalign() fails at the assertion that checks if the memory is aligned when calling it with an alignment bigger than the page size and a size bigger than 2088961.
I found out about this when trying to run https://github.com/ssvb/tinymembench, which, during the latency benchmark, allocates a 64MB region aligned to 4MB.
I managed to make this allocation work by changing the continuous flag to true in https://github.com/cloudius-systems/osv/blob/master/core/mempool.cc#L1854
Of course, posix_memalign does not have this problem on Linux. It might be quite a niche problem.
The text was updated successfully, but these errors were encountered: