Releases: microsoft/snmalloc
0.7.0
What's Changed
See https://github.com/microsoft/snmalloc/blob/main/docs/release/0.7/README.md for an introduction to the 0.7 release.
Optimisation
Startup time
- Startup improvements by @mjp41 in #639
- Startup speed by @mjp41 in #665
- Implement MCS Combining lock by @mjp41 in #666
- Add documentation for the combining lock by @mjp41 in #683
- implement polite waiting by @SchrodingerZhu in #685
Produce Consumer workloads (BatchIt)
- Using exclusive mode prefetch by @mjp41 in #627
- Refactorings to support BatchIt by @nwf-msr in #652
- msgpass benchmark and its refactoring dependencies by @nwf-msr in #659
- Bottom commits from BatchIt by @nwf-msr in #675
- BatchIt by @nwf in #677
Security Features
Platforms and Bindings
Libc
- Factor out libc code into a header. by @mjp41 in #624
- Remove unnecessary assertion from aligned_alloc by @mjp41 in #658
- aligned_alloc: Permit alignment values smaller than sizeof(uintptr_t) by @bsdjhb in #671
- aligned_alloc requirements update. by @devnexen in #681
Rust
Windows
- Override _msize on windows by @Naville in #633
- Disable empty static prefix for Windows. by @mjp41 in #629
- Add Windows ARM64 support by @jblazquez in #656
Haiku
NetBSD
Minor changes and refactorings
- Add a default constructor to seqset nodes. by @davidchisnall in #636
- Template construction of Pool elements by @mjp41 in #641
- NFC: sizeclass: differentiate minimum step size and minimum allocation sizes by @nwf-msr in #651
- Refactor new/delete overrides by @mjp41 in #660
- Remove the SNMALLOC_USE_CXX17 C preprocessor symbol by @nwf-msr in #667
- 0-length arrays in Buddy ranges by @nwf-msr in #672
- gcc UAF warning in test/perf/singlethread -malloc by @nwf in #679
- Remove some unneeded headers by @mjp41 in #680
- Remove unneeded template. by @mjp41 in #687
Build and CI
- Move to clang-format 15 by @mjp41 in #621
- Adding an option to enable dynamic loading by @matajoh in #632
- Add C++17 version for Mac. by @mjp41 in #635
- Workaround runner issue. by @mjp41 in #645
- FreeBSD CI. by @mjp41 in #647
- Update NetBSD runner by @mjp41 in #648
- Updated CI workaround. by @mjp41 in #650
- Rework CI by @nwf-msr in #674
- Further gcc -Werror=array-bounds fix by @nwf in #678
- Provide option to CMake for Page Size by @mjp41 in #664
- fuzzing test and detect the memmove error by @SchrodingerZhu in #688
- Add fuzz to CI by @mjp41 in #690
- clean up Result and make Result move-only by @SchrodingerZhu in #691
- Minor update to clangformat file. by @mjp41 in #694
- avoid chrono inclusion when clock_gettime is available by @SchrodingerZhu in #695
New Contributors
- @matajoh made their first contribution in #632
- @Naville made their first contribution in #633
- @jblazquez made their first contribution in #656
- @bsdjhb made their first contribution in #671
Full Changelog: 0.6.2...0.7.0
0.6.2
Minor release primarily improving support on CHERI and Open Enclave
- CHERI (#587, #557, #578)
- Open Enclave provide new low memory mode that disables some thread caching (#612, #617)
- Improve security checks (emptyness #569, separate features #587))
- Improve ranges support (#540, #556, #562, #619)
- Performance (#604, #605, #606, #607)
- NetBSD support (#583)
- ARM support (#564, #601
- Debug performance improvement (#585)
- Fix C++ overrides argument order that caused a assert failure (#597)
- Improve override for RTLD_DEEPBIND (#598)
- Code tidying (#548, #554, #558, #565, #568)
- C++ support (#574, #581, #591)
- CI improvements/build ( #555, #559, #579, #580, #582, #588, #589, #590, #592, #599, #608, #613, #614, #620)
- Documentation (#602, #610, #611)
Thanks to @devnexen, @saaramar, @brvtalcake, @jumaffre and @EAirPeter for your contributions to this release.
0.6.1
Minor release. Largest change is bringing online Morello CHERI support.
- CHERI support (#537, #542, #532, #543)
- Improve error messages for checks (#526, #521)
- Increased checks on client (#520, #550)
- Portability fixes for Haiku and older versions of glibc (#545, #546, #533)
- Expose macOS
malloc_good_size
(#538) - General code tidying (#527, #535, #547, #551, #536, #534, #529)
- Documentation (#551, #522)
Thanks to the external contributors @panekj, @devnexen and @mfelsche.
0.6.0
This is a major revision of the snmalloc design. The redesign has been primarily focused on adding new security features. The redesign affects all aspects of snmalloc. A more comprehensive explanation of the new features can be found in the docs
- Uses Buddy Allocators for large allocations: In 0.5.3, we never reconsolidate large allocations, so if you ask for several 1MiB allocations, return them, and then ask for several 2MiB allocations it won't be able to use the space from the 1MiB allocations. This is not a problem in 0.6 as we have a proper buddy allocator at that level so we recombine the big bits of memory properly
- Variable sized slabs and out of band meta-data - Previously, snmalloc used fixed sized super slabs with metadata at the head. By using variable sized slabs and out of band meta-data, the slabs don't have to be grouped into superslabs which reduces the minimum memory requirement. (https://github.com/microsoft/snmalloc/blob/main/docs/security/VariableSizedChunks.md)
- Improved per thread caching - #511 - This enables very small per thread usage initially that can grow to the level required. This means that low foot print scenarios on OpenEnclave can be supported with exactly the same code paths as high footprint scenarios. This brings the per thread costs down to approximately 16k per thread of metadata + 16k per thread per sizeclass used. This will grow in powers of 2 (upto 2MiB) to cover the required amount.
0.5.3
0.5.2
Bug fixes
- Fixes issue where unused memory is zeroed by the OS, then superslab data can become corrupt. Only affected the 16MiB chunk size configuration. The bug did not affect the Linux implementation. #259
- Typo that meant 16MiB configuration was ignored in some cases. #254
Platform Support
Thanks especially to @devnexen for finding and fixing many issues in this release, and for the contributions to many previous releases in expanding snmalloc
s platform support.
0.5.1
The main change in this release is a new mechanism for tracking very coarse-grained memory usage statistics (#241). The interface is only exposed in malloc-extensions.h. We recommend static linking this API, as we may refine this in future releases.
Other changes:
- PALs now fully static (#245)
Bug fixes:
0.5.0
This version significantly improves the peak working set on Windows, and has a lower RSS on Linux systems using transparent huge pages.
Detailed changes:
- Change default chunksize to 1MiB, and add explicit
-16mib
tagged version of libraries (#229). - Adds new
AddressSpaceManager
that improves performance with transparent huge pages (#214, #227) also improves support for open enclave (#212) - Improve Open Enclave support with new smaller chunk size of 256KiB (#212), and add versions of libraries and tests using this chunksize with the tag
-oe
. - Preliminary support for Haiku (#218) and Solaris (#226)
0.4.2
Changes
- Preliminary Android support (#171)
- Fixes to 32bit compile for Linux (#173)
- Preparatory work for CHERI support (#188, #191, #193, #202)
- Performance of
alloc_size
(#196) - Minor changes to build defaults (#177, #182, #187, #189, #194, #197, #206)
- Improve Open Enclave support (#205, #201, #195)
- Expose
cfree
(#179) - Allow different OS_PAGE_SIZES (#185)
- Improve support for VS2019 (#207)
- Add error message for failed init (#190)
Bug fixes