Skip to content

v0.13.0

Choose a tag to compare

@sdogruyol sdogruyol released this 27 Jul 19:08
· 329 commits to master since this release
4ebdfef

Changed

  • Darwin empty_chunk_retain 8 MB → 512 KB: Aggressive MADV_FREE_REUSABLE reclaim on Darwin. Kemal RSS drops from ~160 MiB to ~18 MiB (1.04× Boehm). ACIKTURKIYE RSS unchanged (~700 MiB); conservative live set remains the dominant driver.
  • scrub_fibers_enabled = true (Linux + macOS): Default-on fiber stack scrubbing to reduce false roots from parked fiber stacks. Linux: Kemal RSS 0.99×→0.95×, acikturkiye RSS 3.00×→2.65×. macOS: ACIKTURKIYE RSS steady at ~700 MiB (conservative live set dominant). Opt-out via GCRY_DISABLE_SCRUB_FIBERS=1.
  • Darwin gc_threshold 32 MB → 16 MB: More frequent major collections on Darwin; pause halved (47→25 ms p50) on ACIKTURKIYE.
  • Darwin small_chunk_bytes 128 KiB → 256 KiB: The 128 KiB chunk inflated collection count (~290 majors in 30s) and crushed acikturkiye throughput to ~57% Boehm. 256 KiB recovers throughput to ~78% without meaningful Kemal RSS cost (1.06× vs 0.88×). Set in gc_override.cr for Darwin only; library default stays 128 KiB. Escape: GCRY_CHUNK_BYTES=131072.

Added

  • Darwin large-freelist MADV_FREE_REUSABLE: darwin_release_large_freelist_pages issues MADV_FREE_REUSABLE for every cached large-object chunk after major collection on Darwin, dropping physical pages without unmapping. Linux unchanged (mmap-resident for cache budget).

Performance

  • macOS v0.13.0 (Apple Silicon M2 Pro, median-of-3, wrk -c 100 -d 30, --release, 256 KiB chunk default):