dwarfs-0.12.1
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
tomkdwarfs
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 newauto
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
withmalloc_byte_buffer
, which is internally based around a simple buffer that doesn't incur the cost of initializing each element likestd::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 optimizedmemcpy
implementation (if supported by the CPU) instead of the rather slow muslmemcpy
implementation. This makesmkdwarfs
a few percent faster anddwarfsextract
up to 20% faster.
Build
-
Switched the release binaries to use
mimalloc
instead ofjemalloc
. 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.