0.29.0 (2024-11-08) === ## What's Changed ### CI * Install cargo-msrv using stable toolchain. by @wks in https://github.com/mmtk/mmtk-core/pull/1215 * Update CI macos image by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1216 * Performance history canary by @wks in https://github.com/mmtk/mmtk-core/pull/1209 * Change the default testing branch for Julia tests by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1221 * Fix auto merge branches by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1230 ### Documentation * Document the policy about performance testing environment and epochs by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1206 ### Misc * Fix a race between forwarding bits and VO bits. by @wks in https://github.com/mmtk/mmtk-core/pull/1214 * Remove space for nogc link by @Pat-Lafon in https://github.com/mmtk/mmtk-core/pull/1217 * Make env_logger an optional dependency by @wks in https://github.com/mmtk/mmtk-core/pull/1226 * Use modern syntax for optional dependencies by @wks in https://github.com/mmtk/mmtk-core/pull/1229 * Fix nightly build and add `inline` attributes to `{un,}likely` by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1228 ## New Contributors * @Pat-Lafon made their first contribution in https://github.com/mmtk/mmtk-core/pull/1217 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.28.0...v0.29.0 0.28.0 (2024-09-27) === ## What's Changed ### API * Require ObjectReference to point inside object by @wks in https://github.com/mmtk/mmtk-core/pull/1195 * Return if a GC ran or not for `handle_user_collection_request` by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1205 ### CI * Update ci-perf-kit to 0.7.6 by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1199 * Update ci-perf-kit to plot epoch by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1208 ### Misc * Skip iterating through unallocated memory for `MonotonePageResource` by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1189 * Fix find_last_non_zero_bit, and align metadata address before converting to data address. by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1188 * Panic message and outdated comments by @wks in https://github.com/mmtk/mmtk-core/pull/1191 * Filter the result for find_prev_non_zero_value_fast to make sure it is in the search range by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1192 * Assert OBJECT_REF_OFFSET_LOWER_BOUND invariant by @wks in https://github.com/mmtk/mmtk-core/pull/1194 * Minor fixes by @wks in https://github.com/mmtk/mmtk-core/pull/1196 * Add a feature immix_stress_copying by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1202 * Update migration guide for #1205 by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1211 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.27.0...v0.28.0 0.27.0 (2024-08-09) === ## What's Changed ### Policy * Clear pin bits by @udesou in https://github.com/mmtk/mmtk-core/pull/1166 * Set the unlog bits for objects in the bootimage by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1168 * Fix bug in line mark when `MARK_LINE_AT_SCAN_TIME=false` by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1171 ### API * Require object reference to be aligned by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1159 * Internal pointer support by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1165 * Heap traversal by @wks in https://github.com/mmtk/mmtk-core/pull/1174 ### CI * Parallelize and workaround CI style checks by @wks in https://github.com/mmtk/mmtk-core/pull/1184 ### Misc * Extensible eBPF timeline attributes by @wks in https://github.com/mmtk/mmtk-core/pull/1162 * Only map with executable permissions when using code space by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1176 * Fix style check for Rust 1.80 by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1178 * Extra assertions for mutators and epilogues by @wks in https://github.com/mmtk/mmtk-core/pull/1182 * Refactor iterate_meta_bits by @wks in https://github.com/mmtk/mmtk-core/pull/1181 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.26.0...v0.27.0 0.26.0 (2024-07-01) === ## What's Changed ### Policy * Clear side forwarding bits properly by @wks in https://github.com/mmtk/mmtk-core/pull/1138 * Fix mark bit clearing in PrepareChunkMap by @wks in https://github.com/mmtk/mmtk-core/pull/1148 * Let MarkSweepSpace use BlockPageResource by @wks in https://github.com/mmtk/mmtk-core/pull/1150 * Add SweepChunk to native MarkSweepSpace by @wks in https://github.com/mmtk/mmtk-core/pull/1158 ### API * Rename edge to slot by @wks in https://github.com/mmtk/mmtk-core/pull/1134 ### Documentation * Fix broken link and stale descriptions in doc by @wks in https://github.com/mmtk/mmtk-core/pull/1139 * API migration guide. by @wks in https://github.com/mmtk/mmtk-core/pull/1133 * Add back `DummyVM` as a part of the porting guide. Minor changes to MMTk initialization in the porting guide. by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1142 * Fix broken link to mmtk.h by @wks in https://github.com/mmtk/mmtk-core/pull/1149 ### Misc * Fix clippy warnings for Rust 1.79 by @wks in https://github.com/mmtk/mmtk-core/pull/1151 * Display number of slots in timeline visualization by @wks in https://github.com/mmtk/mmtk-core/pull/1154 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.25.0...v0.26.0 0.25.0 (2024-05-17) === ## What's Changed ### Plan * Allow roots to be pinned for StickyImmix nursery collections by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1108 * Check `FULL_NURSERY_GC` for StickyImmix as well by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1124 ### Policy * Remove data race for marksweep block lists by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1112 ### Scheduler * Remove coordinator and support forking by @wks in https://github.com/mmtk/mmtk-core/pull/1067 ### API * Allow nursery size to be proportional to the heap size by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1087 * Remove NULL ObjectReference by @wks in https://github.com/mmtk/mmtk-core/pull/1064 * Fix write barrier parameter type by @wks in https://github.com/mmtk/mmtk-core/pull/1130 * Allow querying if the current GC may move objects. by @wks in https://github.com/mmtk/mmtk-core/pull/1128 ### CI * Use host toolchain and explicit target in CI script by @wks in https://github.com/mmtk/mmtk-core/pull/1109 * Fix ignores in merge check by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1117 * Fix the openjdk test name in merge check by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1119 ### Misc * Bump dependencies after version 0.24 by @wks in https://github.com/mmtk/mmtk-core/pull/1105 * Don't use `PROT_EXEC` with `mmap` on macos by @eileencodes in https://github.com/mmtk/mmtk-core/pull/1110 * Rename associated types in GCWorkContext by @wks in https://github.com/mmtk/mmtk-core/pull/1116 * Add missing pinning metadata to mock_vm by @wks in https://github.com/mmtk/mmtk-core/pull/1121 * Use to_address for SFT access by @wks in https://github.com/mmtk/mmtk-core/pull/1122 * Ensure reference objects are either traced or cleared by @wks in https://github.com/mmtk/mmtk-core/pull/1126 * Dump process map on `mmap` failure and fix typos by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1127 * Fix compiler errors and warnings for Rust 1.78.0 by @wks in https://github.com/mmtk/mmtk-core/pull/1132 * Remove fl_map and refactor FreeListPageResoure by @wks in https://github.com/mmtk/mmtk-core/pull/953 ## New Contributors * @eileencodes made their first contribution in https://github.com/mmtk/mmtk-core/pull/1110 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.24.0...v0.25.0 0.24.0 (2024-04-08) === ## What's Changed ### Misc * Check and fix broken links in docs by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1085 * Allow binding to implement GC trigger by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1083 * Resolve issues for unit tests on 32 bits by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1095 * Use SFTDenseChunkMap on 64bits when vm_space is enabled by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1094 * Fix warnings with the stable Rust toolchain by @wks in https://github.com/mmtk/mmtk-core/pull/1099 * Use proper logging for the treadmill by @wks in https://github.com/mmtk/mmtk-core/pull/1101 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.23.0...v0.24.0 0.23.0 (2024-02-09) === ## What's Changed ### API * Ask from binding if GC is disabled by @udesou in https://github.com/mmtk/mmtk-core/pull/1075 ### CI * Stop using the deprecated set-output in our CI configs by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1059 * Rename CI tests to minimal/extended tests by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1073 * Properly get PR number for merge group by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1077 ### Misc * MMTk Enhancement Proposal by @wks in https://github.com/mmtk/mmtk-core/pull/1056 * Timeline visualization tool by @wks in https://github.com/mmtk/mmtk-core/pull/1022 * Add a document for project principles by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1069 * Fix un-cleared VO bits for contiguous monotone PR by @wks in https://github.com/mmtk/mmtk-core/pull/1071 * Use live memory to estimate collection pages in mem balancer by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1050 * Fix issues in sanity GC by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1079 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.22.1...v0.23.0 0.22.1 (2024-01-11) === ## What's Changed * Revert a mistake in v0.22 that prevents cargo publish by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1065 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.22.0...v0.22.1 0.22.0 (2023-12-21) === ## What's Changed ### API * Flush mutator buffers in `destroy_mutator` by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1045 * NULL and movement check in process_edge by @wks in https://github.com/mmtk/mmtk-core/pull/1032 ### Documentation * Mention revoking TLABs of all mutators after a GC by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1018 * Add missing docs for the vm module by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1021 * Add missing docs for some util modules by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1024 * Add missing docs for the rest of the util module by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1026 * Add missing docs for the rest of the code base (merge after #1026) by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1028 * Update some stale comments by @k-sareen in https://github.com/mmtk/mmtk-core/pull/1036 ### CI * Use new running scripts in ci-perf-kit by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1005 * Upload perf build and log as artifacts (merge after #1005) by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1011 * Fix multiple issues in recent CI changes by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1014 * Fix CI for OpenJDK nogc config by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1019 * Use ci-perf-kit 0.7.4: ignore runs with unmatched key/value in the logs. by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1025 * Fix Ruby binding test repo checkout by @wks in https://github.com/mmtk/mmtk-core/pull/1048 ### Misc * Post-release dependency version bump for v0.21.0 by @wks in https://github.com/mmtk/mmtk-core/pull/1013 * Introduce MockVM by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1049 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.21.0...v0.22.0 0.21.0 (2023-11-03) === ## What's Changed ### Plan * Move some states from BasePlan to GlobalState by @qinsoon in https://github.com/mmtk/mmtk-core/pull/949 * Extract set_collection_kind and set_gc_status by @qinsoon in https://github.com/mmtk/mmtk-core/pull/957 * Expose `is_emergency_collection` to VM bindings by @wks in https://github.com/mmtk/mmtk-core/pull/997 ### Policy * Clear all side forwarding bits by @wks in https://github.com/mmtk/mmtk-core/pull/974 * Stop using the name "ForwardingWord" by @wks in https://github.com/mmtk/mmtk-core/pull/976 * Implement get_gc_trigger() for LockFreeImmortalSpace by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1003 ### API * Expose alloc_slow. Add a section in user guide about allocation optimization by @qinsoon in https://github.com/mmtk/mmtk-core/pull/967 * Use BumpPointer::default() by @qinsoon in https://github.com/mmtk/mmtk-core/pull/993 * Fix mention of `to_object_reference()` in comment by @k-sareen in https://github.com/mmtk/mmtk-core/pull/998 ### Documentation * Fix rustdoc warnings in Rust 1.73 by @qinsoon in https://github.com/mmtk/mmtk-core/pull/978 * Add a section about debugging tips in user guide by @qinsoon in https://github.com/mmtk/mmtk-core/pull/987 * Update doc comments by @wks in https://github.com/mmtk/mmtk-core/pull/1000 * Add document for release by @qinsoon in https://github.com/mmtk/mmtk-core/pull/1007 * Move constants and add comments for stress copying by @wks in https://github.com/mmtk/mmtk-core/pull/1008 * Update bibtex of the tracing paper to include the DOI by @caizixian in https://github.com/mmtk/mmtk-core/pull/1009 ### CI * Fix performance baseline workflow by @qinsoon in https://github.com/mmtk/mmtk-core/pull/971 * Allow auto merge binding PRs by @qinsoon in https://github.com/mmtk/mmtk-core/pull/988 * Apply a delay before we enable auto merge on a PR by @qinsoon in https://github.com/mmtk/mmtk-core/pull/992 * Use `cargo generate-lockfile` to update JikesRVM's Cargo.lock by @qinsoon in https://github.com/mmtk/mmtk-core/pull/996 ### Misc * Add option to exclude kernel events from perf results by @k-sareen in https://github.com/mmtk/mmtk-core/pull/995 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.20.0...v0.21.0 0.20.0 (2023-09-29) === ## What's Changed ### Plan * Refactor derive macros and add HasSpaces trait by @wks in https://github.com/mmtk/mmtk-core/pull/934 * Make MarkCompact LOS support 2nd transitive closure by @wenyuzhao in https://github.com/mmtk/mmtk-core/pull/944 * Disabling PrepareMutator from PlanConstraints by @wks in https://github.com/mmtk/mmtk-core/pull/964 ### Policy * Add ExternalPageResource and allow discontiguous VM space by @qinsoon in https://github.com/mmtk/mmtk-core/pull/864 * Discontiguous mark compact space support by @wenyuzhao in https://github.com/mmtk/mmtk-core/pull/939 * Discontiguous PageProtect GC support by @wenyuzhao in https://github.com/mmtk/mmtk-core/pull/946 * Fix vo-bit reset for discontiguous space by @wenyuzhao in https://github.com/mmtk/mmtk-core/pull/948 ### API * Boot-time configurable heap constants by @wenyuzhao in https://github.com/mmtk/mmtk-core/pull/899 * This PR enables transitively pinning (TP) objects from particular roots for Immix/StickyImmix by @udesou in https://github.com/mmtk/mmtk-core/pull/897 * Let VM control when or if to read env var options by @wks in https://github.com/mmtk/mmtk-core/pull/955 ### Misc * Update doc comment of Scanning::process_weak_refs by @wks in https://github.com/mmtk/mmtk-core/pull/919 * Binding test for Ruby by @wks in https://github.com/mmtk/mmtk-core/pull/916 * Fix api-check CI by @wks in https://github.com/mmtk/mmtk-core/pull/923 * Fix default value for RUBY_BINDING_REPO by @qinsoon in https://github.com/mmtk/mmtk-core/pull/926 * Add a ready-to-merge check by @qinsoon in https://github.com/mmtk/mmtk-core/pull/910 * Run ready to merge check for PRs by @qinsoon in https://github.com/mmtk/mmtk-core/pull/928 * Remove cast ref to mut everywhere by @playXE in https://github.com/mmtk/mmtk-core/pull/893 * Benchmark Rust code by @qinsoon in https://github.com/mmtk/mmtk-core/pull/933 * Fix broken links in the tutorial by @caizixian in https://github.com/mmtk/mmtk-core/pull/936 * Update doc to add a section for LTO by @qinsoon in https://github.com/mmtk/mmtk-core/pull/937 * Add CARGO_INCREMENTAL=0 to work around clippy 1.72 bug by @qinsoon in https://github.com/mmtk/mmtk-core/pull/938 * Fix issues for cargo fmt in 1.72 by @qinsoon in https://github.com/mmtk/mmtk-core/pull/940 * Use atomic operations for SFT map and remove unsafe code by @qinsoon in https://github.com/mmtk/mmtk-core/pull/931 * Fix outdated Rust version in README by @qinsoon in https://github.com/mmtk/mmtk-core/pull/942 * Fix length of Map64::descriptor_map by @wks in https://github.com/mmtk/mmtk-core/pull/956 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.19.0...v0.20.0 0.19.0 (2023-08-18) === ## What's Changed ### Plan * Remove a warning in sticky immix trace_object_nursery by @qinsoon in https://github.com/mmtk/mmtk-core/pull/815 * Change default plan to GenImmix by @qinsoon in https://github.com/mmtk/mmtk-core/pull/819 ### Policy * Remove redundant clear_nursery() by @tianleq in https://github.com/mmtk/mmtk-core/pull/799 * Introduce VMSpace, and allow VMSpace to be set lazily by @qinsoon in https://github.com/mmtk/mmtk-core/pull/802 * Fix an issue that the aligned VM space may not match the original location by @qinsoon in https://github.com/mmtk/mmtk-core/pull/809 * Remove some uses of mem::transmute in marksweep block by @qinsoon in https://github.com/mmtk/mmtk-core/pull/826 * Fix `is_live` for ImmixSpace by @wks in https://github.com/mmtk/mmtk-core/pull/842 * Sweep abandoned blocks in eager sweeping by @qinsoon in https://github.com/mmtk/mmtk-core/pull/830 * Fix VO bits for Immix by @wks in https://github.com/mmtk/mmtk-core/pull/849 * Fix unaligned access by @wks in https://github.com/mmtk/mmtk-core/pull/887 ### Scheduler * Let the coordinator thread open buckets by @wks in https://github.com/mmtk/mmtk-core/pull/782 * No coordinator work by @wks in https://github.com/mmtk/mmtk-core/pull/794 ### Misc * Rename "alloc bit" to "valid-object bit" (VO bit), the second attempt. by @wks in https://github.com/mmtk/mmtk-core/pull/791 * Add MarkState. Use MarkState for ImmortalSpace. by @qinsoon in https://github.com/mmtk/mmtk-core/pull/796 * Change info logging to debug in ImmortalSpace by @qinsoon in https://github.com/mmtk/mmtk-core/pull/801 * Reset nursery_index in finalizable processor if we remove objects from candidates by @qinsoon in https://github.com/mmtk/mmtk-core/pull/807 * Allow bulk set side metadata by @qinsoon in https://github.com/mmtk/mmtk-core/pull/808 * Some fixes for sanity GC by @qinsoon in https://github.com/mmtk/mmtk-core/pull/806 * Use extreme assertion for metadata mapped assert by @wks in https://github.com/mmtk/mmtk-core/pull/812 * Install the missing deps for i686 CI tests by @qinsoon in https://github.com/mmtk/mmtk-core/pull/816 * Use min nursery as mem balancer's extra memory by @qinsoon in https://github.com/mmtk/mmtk-core/pull/820 * Sort dependencies in alphabetical order by @k-sareen in https://github.com/mmtk/mmtk-core/pull/822 * Use sysinfo instead of sys-info-rs by @k-sareen in https://github.com/mmtk/mmtk-core/pull/827 * Let sysinfo only load memory-related info by @wks in https://github.com/mmtk/mmtk-core/pull/836 * Add extreme assertion for barrier slow path calls by @ArberSephirotheca in https://github.com/mmtk/mmtk-core/pull/833 * Refactor: Use `Atomic
` where appropriate by @ClSlaid in https://github.com/mmtk/mmtk-core/pull/843 * Update porting guide by @k-sareen in https://github.com/mmtk/mmtk-core/pull/857 * Fix typo in doc comment by @k-sareen in https://github.com/mmtk/mmtk-core/pull/859 * Replace debug_assert in side_after with assert by @qinsoon in https://github.com/mmtk/mmtk-core/pull/873 * Work around stack overflow in array_from_fn by @wks in https://github.com/mmtk/mmtk-core/pull/876 * Let ObjectReference implement Ord by @wks in https://github.com/mmtk/mmtk-core/pull/870 * Add USDT tracepoints for key GC activities by @caizixian in https://github.com/mmtk/mmtk-core/pull/883 * Fix UB in SFTMap implementations by @playXE in https://github.com/mmtk/mmtk-core/pull/879 * Run CI build/unit test with latest stable Rust toolchain by @qinsoon in https://github.com/mmtk/mmtk-core/pull/885 * Document MSRV policy by @wks in https://github.com/mmtk/mmtk-core/pull/881 * Fix performance regression test scripts by @qinsoon in https://github.com/mmtk/mmtk-core/pull/892 * Run V8 binding tests on GitHub hosted runner by @caizixian in https://github.com/mmtk/mmtk-core/pull/900 * Add tracing tools and documentation by @caizixian in https://github.com/mmtk/mmtk-core/pull/898 * Run benchmarks for more plans on OpenJDK by @qinsoon in https://github.com/mmtk/mmtk-core/pull/901 * Apply style check on auxiliary crates (macros and dummyvm) by @caizixian in https://github.com/mmtk/mmtk-core/pull/913 * Call Collection::out_of_memory if the allocation size is larger than max heap size by @qinsoon in https://github.com/mmtk/mmtk-core/pull/896 * Add a unit test for comma-separated bulk option parsing by @caizixian in https://github.com/mmtk/mmtk-core/pull/911 * Merge tutorial and porting guide into user guide by @qinsoon in https://github.com/mmtk/mmtk-core/pull/907 * Fix broken links in README and cargo doc warnings by @caizixian in https://github.com/mmtk/mmtk-core/pull/912 ### API * Add object() in MemorySlice by @qinsoon in https://github.com/mmtk/mmtk-core/pull/798 * Remove Collection::COORDINATOR_ONLY_STW by @ArberSephirotheca in https://github.com/mmtk/mmtk-core/pull/814 * Refactor: Change `ActivePlan::mutators()`'s return type by @ArberSephirotheca in https://github.com/mmtk/mmtk-core/pull/817 * Replace alloc-related `offset` type to `usize` instead `isize` by @fepicture in https://github.com/mmtk/mmtk-core/pull/838 * Rename ambiguous `scan_thread_root{,s}` functions by @k-sareen in https://github.com/mmtk/mmtk-core/pull/846 * Update comments on bind_mutator by @qinsoon in https://github.com/mmtk/mmtk-core/pull/854 * Counting VM-allocated pages into heap size. by @wks in https://github.com/mmtk/mmtk-core/pull/866 * Expose Allocators type to public API by @playXE in https://github.com/mmtk/mmtk-core/pull/880 * Collect live bytes during GC by @qinsoon in https://github.com/mmtk/mmtk-core/pull/768 * Tidy up mutator scan API by @qinsoon in https://github.com/mmtk/mmtk-core/pull/875 * Implement transparent hugepage support by @caizixian in https://github.com/mmtk/mmtk-core/pull/905 * Implement AllocatorInfo by @playXE in https://github.com/mmtk/mmtk-core/pull/889 * Add comma as an alternative options string separator by @wenyuzhao in https://github.com/mmtk/mmtk-core/pull/909 ## New Contributors * @ArberSephirotheca made their first contribution in https://github.com/mmtk/mmtk-core/pull/814 * @fepicture made their first contribution in https://github.com/mmtk/mmtk-core/pull/838 * @ClSlaid made their first contribution in https://github.com/mmtk/mmtk-core/pull/843 * @playXE made their first contribution in https://github.com/mmtk/mmtk-core/pull/880 **Full Changelog**: https://github.com/mmtk/mmtk-core/compare/v0.18.0...v0.19.0 0.18.0 (2023-04-03) === Plan --- * Add a new plan, `StickyImmix`. This is an variant of immix using a sticky mark bit. This plan allows generational behaviors without using a compulsory copying nursery. * Side log bits in generational plans are now set using relaxed store for the entire byte as an optimization. Policy --- * Add constants `STRESS_DEFRAG` and `DEFRAG_EVERY_BLOCK` to allow immix to stress defrag copying for debugging. API --- * Add a new write barrier method `object_probable_write`. The method can be called before the fields of an object may get updated without a normal write barrier. * Add a feature `immix_non_moving` to replace the current `immix_no_defrag` feature. This is only intended for debugging uses to rule out issues from copying. Misc --- * Refactor `Mmapper` and `VMMap`. Their implementation is now chosen dynamically, rather than statically based on the pointer size of the architecture. This allows us to use a more appropriate implementation to support compressed pointers. * Revert changes in d341506 about forwarding bits, and bulk zero side forward bits for defrag source blocks. * Fix a bug in the scheduler where a worker may spuriously wake up and attempt to open new buckets while the coordinator is executing a coordinator work packet, which would result in an assertion failure. * Fix a bug in the mem balancer where subtraction may silently overflow and cause unexpected statistics to be used for computing new heap sizes. * Fix a bug where `ScanObjectsWork` does not properly set the worker when it internally uses `ProcessEdgesWork`. * Fix a bug where nodes pushed during root scanning were not cached for sanity GC. * Fix a bug where `harness_begin` does not force a full heap GC for generational plans. * Add info-level logging for each GC to show the memory usage before and after the GC, and elapsed time for the GC. 0.17.0 (2023-02-17) === Plan --- * Fix a bug where `SemiSpace::get_available_pages` returned unused pages as 'available pages'. It should return half of the unused pages as 'available'. * Fix a bug where generational plans may make full-heap GC decision before all the releasing work is done. Now plans have a `Plan::end_of_gc()` method that is executed after all the GC work is done. * Fix a bug where generational plans tended to trigger full heap GCs when heap is full. Now we properly use Appel-style nursery and allow the nursery to extend to the heap size. * Add a feature `immix_zero_on_release` as a debug feature for Immix to eagerly zero any reclaimed memory. * Fix a bug where the alloc bits for dead objects were still set after the objects were reclaimed. Now Immix eagerly clears the alloc bits once the memory is reclaimed. * Fix a bug where Immix uses forwarding bits and forwarding pointers but did not declare it. Allocator --- * Fix a bug about the maximum object size in `FreeListAllocator`. The allowed maximum object size depends on both the block size and the largest bin size. Scheduler --- * Add a 'sentinel' mechanism to execute a specified 'sentinel' work packet when a bucket is drained, and prevent the GC from entering the next stage depending on the sentinel packet. This makes it possible to expand the transitive closure multiple times. It replaces `GCWorkScheduler::closure_end()`. API --- * Add a new set of APIs to support binding-specific weak reference processing: * Add `Scanning::process_weak_refs()` and `Scanning::forward_weak_refs()`. They both supply an `ObjectTracerContext` argument for retaining and updating weak references. `Scanning::process_weak_refs()` allows a boolean return value to indicate if the method should be called again by MMTk after finishing transitive closures for the weak references, which can be used to implement ephemeron. * Add `Collection::post_forwarding()` which is called by MMTk after all weak reference related work is done. A binding can use this call for any post processing for weak references, such as enqueue cleared weak references to a queue (Java). * These replace old methods for the same purpose, like `Collection::process_weak_refs()`, `Collection::vm_release()`, and `memory_manager::on_closure_end`. Misc --- * Upgrade the Rust toolchain we use to 1.66.1 and upgrade MSRV to 1.61.0. * Improve the boot time significantly for MMTk: * Space descriptor map is created as an zeroed vector. * Mmapper coalesces the mmap requests for adjancent chunks, and reduces our `mmap` system calls at boot time. * Add `GCTrigger` to allow different heuristics to trigger a GC: * Implement `FixedHeapSizeTrigger` that triggers the GC when the maximum heap size is reached (the current approach). * Implement `MemBalancerTrigger` (https://dl.acm.org/doi/pdf/10.1145/3563323) as the dynamic heap resize heuristic. * Refactor `SFTMap` so it is dynamically created now. * Fix a bug where `Address::store` dropped the value after store. * Fix a bug about an incorrect pointer cast in unsafe code in `CommonFreeListPageResource`. * Remove all inline directives from our code base. We rely on Rust compiler and PGO for inlining decisions. * Remove `SynchronizedCounter`. 0.16.0 (2022-12-06) === Plan --- * Refactor `MarkSweep` to work with both our native mark sweep policy and the malloc mark sweep policy backed by malloc libraries. Allocators --- * Add `FreeListAllocator` which is implemented as a `MiMalloc` allocator. * Fix a bug in `ImmixAllocator` that alignment is properly taken into consideration when deciding whether to do overflow allocation. Policies --- * Add `MarkSweepSpace`: * It uses our native MiMalloc implementation in MMTk core. * When the feature `malloc_mark_sweep` is enabled, it uses the selected malloc library to back up its allocation. * Malloc mark sweep now accounts for memory based on page usage, and each malloc library may use a different page size. * The immix space now uses the newly added `BlockPageResource`. * Changes to Space Function Table (SFT) to improve our boot time and reduce the memory footprint: * Rename the current SFT map to `SFTSparseChunkMap`, and only use it for 32 bits architectures. * Add `SFTSpaceMap` and by default use it for 64 bits architectures. * Add `SFTDenseChunkMap` and use it when we have no control of the virtual address range for a MMTk space on 64 bits architectures. API --- * Add an option `thread_affinity` to set processor affinity for MMTk GC threads. * Add `AllocationSemantics::NonMoving` to allocate objects that are known to be non-moving at allocation time. * Add `ReferenceGlue::is_referent_cleared` to allow some bindings to use a special value rather than a normal null reference for a cleared referent. * Add `pin`, `unpin`, and `is_pinned` for object pinning. Note that some spaces do not support object pinning, and using these methods may cause panic if the space does not support object pinning. * Refactor `ObjectReference`: * MMTk core now pervasively uses `ObjectModel::ref_to_address` to get an address from an object reference for setting per-object side metadata. * Add `ObjectModel::address_to_ref` that does the opposite of `ref_to_address`: getting an object reference from an address that is returned by `ref_to_address`. * Add `ObjectModel::ref_to_header` for the binding to tell us the base header address from an object reference. * Rename `ObjectModel::object_start_ref` to `ObjectModel::ref_to_object_start` (to be consistent with other methods). * Remove `ObjectModel::OBJECT_REF_OFFSET_BEYOND_CELL`, as we no longer use the raw address of an object reference. * Add `ObjectModel::UNIFIED_OBJECT_REFERENCE_ADDRESS`. If a binding uses the same address for `ObjectReference`, `ref_to_address` and `ref_to_object_start`, they should set this to `true`. MMTk can utilize this information for optimization. * Add `ObjectModel::OBJECT_REF_OFFSET_LOWER_BOUND` to specify the minimam value of the possible offsets between an allocation result and object reference's raw address. * `destroy_mutator()` no longer requires a boxed mutator as its argument. Instead, a mutable reference to the mutator is required. It is made clear that the binding should manage the lifetime of the boxed mutator from a `bind_mutator()` call. * Remove `VMBinding::LOG_MIN_ALIGNMENT` and `VMBinding::MAX_ALIGNMENT_SHIFT` (so we only keep `VMBinding::MIN_ALIGNMENT` and `VMBinding::MAX_ALIGNMENT`). Misc --- * Add a lock-free `BlockPageResource` that can be used for policies that always allocate memory at the granularity of a fixed sized block. This page resource facilitates block allocation and reclamation, and uses lock-free operations where possible. * Fix a race condition in `FreeListPageResource` when multiple threads release pages. * Fix a bug in `fetch_and/or` in our metadata implementation. * Fix a bug in side metadata bulk zeroing that may zero unrelated bits if the zeroed region cannot be mapped to whole metadata bytes. * Remove unused `meta_data_pages_per_region` in page resource implementations. * Remove the use of `MaybeUninit::uninit().assume_init()` in `FreeListPageResource` which has undefined behaviors and causes the illegal instruction error with newer Rust toolchains. * Remove the trait bound `From` and `Into` for `Region`, as we cannot guarantee safe conversion between those two types. * Extract `Chunk` and `ChunkMap` from the immix policy, and make it available for all the policies. 0.15.0 (2022-09-20) === GC Plans --- * Generational plans now support bounded nursery size and fixed nursery size. * Immix can be used in a non-moving variant (with no defragmentation) to facilitate early porting stages where a non-moving GC is expected by the VM. Enable the feature `immix_no_defrag` to use the variant. Note that this variant performs poorly, compared to normal immix. API --- * Add `mod build_info` for bindings to get information about the current build. * Add `trait Edge`. A binding can implement its own edge type if they need more sophisiticated edges than a simple address slot, e.g. to support compressed pointers, base pointers with offsets, or tagged pointers. * Add APIs for implementing write barriers. MMTk provides subusming barriers `object_reference_write()` and pre/post write barriers `object_reference_write_pre/post()`. * Add APIs for implementing barriers for memory copying such as `array_copy` in Java. MMTk provides `memory_region_copy()` (subsuming) and `memory_region_copy_pre/post()`. * The `ignore_system_g_c` option is renamed to `ignore_system_gc` to be consistent with our naming convention. * The `max/min_nursery` option is replaced by `nursery`. Bindings can use `nursery=Fixed: