Skip to content

dwarfs-0.12.1

Compare
Choose a tag to compare
@mhx mhx released this 11 Apr 04:30
· 113 commits to main since this release

A quick update to v0.12.0 that addresses a few issues and improves the performance of the release binaries while mostly making them even smaller. The universal x86_64 binary is slightly bigger, but that's a different story [1].

v0.11.3 v0.12.0 v0.12.1
Linux x86_64 universal binary 5,319,916 2,833,280 2,903,624
Linux aarch64 universal binary 4,637,312 2,725,864 2,588,924
Linux x86_64 fuse-extract binary - 1,183,752 1,075,536
Linux aarch64 fuse-extract binary - 1,188,760 1,059,588
Linux x86_64 binary tarball 7,736,712 3,888,104 3,698,356
Linux aarch64 binary tarball 6,791,424 3,497,140 3,271,584

Bugfixes

  • Attempt to fix a linking issue in the Homebrew build.

Features

  • Added --memory-limit=auto to mkdwarfs to use a more reasonably (hopefully) default for the block queue. The old default of 1 GiB was quite arbitrary and definitely not suitable for low-end systems. The new auto default will determine the limit based on the number of workers (which in turn is based on the number of CPUs), the block size, and the amount of physical memory of the system.

  • Replaced vector_byte_buffer with malloc_byte_buffer, which is internally based around a simple buffer that doesn't incur the cost of initializing each element like std::vector. Especially for large blocks which are known to be overwritten immediately, this can save a few CPU cycles.

  • The x86_64 release binaries now use an optimized memcpy implementation (if supported by the CPU) instead of the rather slow musl memcpy implementation. This makes mkdwarfs a few percent faster and dwarfsextract up to 20% faster.

Build

  • Switched the release binaries to use mimalloc instead of jemalloc. The primary reason for this change is a reduction in binary size.

  • Updated the xz library to the latest 5.8.1 release.

Full Changelog: v0.12.0...v0.12.1

SHA-256 Checksums

f61d49436ad6b02e7e496f746ce09d69a3f050592286b5ff3d6e3edba765b82a  dwarfs-0.12.1-Linux-aarch64.tar.xz
6685622e6bf1edea138023dfb5a84ec241c6a57619ec5d7ee86344057d89296b  dwarfs-0.12.1-Linux-x86_64.tar.xz
5523a5c3aea244cbfbccfe64f1df6053b3901e6af8916fac1530faf0f7a5f07f  dwarfs-0.12.1.tar.xz
d51c2e5ed021a7322928aeb8f09cc3c392362c8a1ea6217e2ba177f241f8a809  dwarfs-0.12.1-Windows-AMD64.7z
8850a0002d7008791c2629fd3a5bc718c50606dfc391bf5b1259d9f6d79c8401  dwarfs-fuse-extract-0.12.1-Linux-aarch64
d01dd82068e0d2020fd35ba5a2ddf416aeba32a9f6f7ac4544a173eefc6c743f  dwarfs-fuse-extract-0.12.1-Linux-x86_64
3dfc3d8d2152f4d9d29c543d0a30b2ba1bc0bba470742e08924ad75dc8c23967  dwarfs-universal-0.12.1-Linux-aarch64
518faa4f5a476dcc4ec75d8ed4ac31d076990bb515cd32a752a8165b3ad04885  dwarfs-universal-0.12.1-Linux-x86_64
1ad50c0b6127e56dc026de7d2f7a3df28fa3983bdd628584a652d05f97e28b88  dwarfs-universal-0.12.1-Windows-AMD64.exe

[1] I've noticed that the universal binary, and sometimes the other binaries as well, fluctuate dramatically in size after being UPX compressed. In the last CI build before tagging the new DwarFS release, the UPX-compressed universal binary had a size of 2,713,752 bytes. The only change after tagging the release was the version info (although, with LTO, you never know what the compiler makes of that). Interestingly, when unpacked, both binaries have exactly the same size. But the packed size differs by ~190 KiB.