LZMS solid multithreading issue (or bug)
Posted: Wed Apr 02, 2025 9:07 pm
Hello there, and thanx for releasing wimlib!
I am currently using the latest wimlib 1.14.4 64-bit Windows binaries with an Intel i7-4790K processor (4C/8T) and 32 GB DDR3-2400 (31.9 GB usable, 4 GB reserved for a RAM Disk) + 96 GB virtual memory. I've noticed that multi-threading is disabled if LZMS solid compression is used with 256M, 512M or 1G solid chunk sizes.
I've made some compression tests and analyzed the memory usage with Process Explorer with this command line:
While not having enough physical RAM could maybe be justifiable with 1G solid chunk size (about 14.5 GB per thread), I don't understand why multi-threading is still disabled with 512M or 256M solid chunk sizes, even reducing threads to 6, 4 or 2, which the physical RAM required is less compared to that required for 1G, worse the fact that virtual RAM is not taken into account at all and my PC has already maxed out all available RAM slots (32 GB is the chipset's limitation).
Plus, ALL of these options below were completely useless:
Please give a look into this and please fix it, thanx!
I am currently using the latest wimlib 1.14.4 64-bit Windows binaries with an Intel i7-4790K processor (4C/8T) and 32 GB DDR3-2400 (31.9 GB usable, 4 GB reserved for a RAM Disk) + 96 GB virtual memory. I've noticed that multi-threading is disabled if LZMS solid compression is used with 256M, 512M or 1G solid chunk sizes.
I've made some compression tests and analyzed the memory usage with Process Explorer with this command line:
Code: Select all
wimoptimize setup.wim --recompress --compress=LZMS:203 --chunk-size=1G --solid --threads=8 --solid-chunk-size=256M- Using --solid-chunk-size=1G and --threads=8 or --threads=4 or --threads=2:
Threads = 1, Private bytes = 15'238'104 K first, then 14'712'880 K, Virtual size = 15'247'400 K first, then 14'729'248 K. - Using --solid-chunk-size=512M and --threads=8 or --threads=4 or --threads=2:
Threads = 1, Private bytes = 7'883'708 K first, then 7'358'388 K, Virtual size = 7'907'368 K first, then 7'383'072 K. - Using --solid-chunk-size=256M and --threads=8 or --threads=4 or --threads=2:
Threads = 1, Private bytes = 4'206'516 K first, then 3'681'284 K, Virtual size = 4'237'352 K first, then 3'719'200 K. - Using --solid-chunk-size=128M and --threads=8 (the maximum solid chunk size with multi-threading):
Threads = 8, Private bytes = 15'245'212 K first, then 14'719'988 K, Virtual size = 15'276'184 K first, then 14'758'032 K.
While not having enough physical RAM could maybe be justifiable with 1G solid chunk size (about 14.5 GB per thread), I don't understand why multi-threading is still disabled with 512M or 256M solid chunk sizes, even reducing threads to 6, 4 or 2, which the physical RAM required is less compared to that required for 1G, worse the fact that virtual RAM is not taken into account at all and my PC has already maxed out all available RAM slots (32 GB is the chipset's limitation).
Plus, ALL of these options below were completely useless:
- Omitting or changing the non-solid chunk size;
- Omitting or changing the LZMS level to default 50, 100 or even the worst LZMS:1 (no doubt worse than LZX);
- Decompressing the archive first with --compress=NONE and then compressing (--recompress slows down the process and can increase RAM usage).
Please give a look into this and please fix it, thanx!