Last active
April 2, 2025 10:40
-
-
Save lucascompython/ebfb354af39aeb8b5f821d45118c12ca to your computer and use it in GitHub Desktop.
lzbench results ran on the 01/04/25 | lzbench 2.0.2 (64-bit Linux) AMD A9-9420 RADEON R5, 5 COMPUTE CORES 2C+3G
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import polars as pl | |
import argparse | |
import sys | |
from typing import List, Dict, Tuple | |
def calculate_optimal_algorithm( | |
csv_file: str, | |
file_size_mb: float, | |
upload_speed_mbps: float, | |
download_speed_mbps: float = None, | |
visualize: bool = False | |
): | |
""" | |
Calculate the optimal compression algorithm for a given file size and network speeds. | |
Args: | |
csv_file: Path to the CSV file with compression benchmark data | |
file_size_mb: Size of the file in MB | |
upload_speed_mbps: Upload speed in Mbps | |
download_speed_mbps: Download speed in Mbps (if None, same as upload) | |
visualize: Whether to generate visualization plots | |
""" | |
# If download speed not provided, assume same as upload speed | |
if download_speed_mbps is None: | |
download_speed_mbps = upload_speed_mbps | |
try: | |
df = pl.read_csv(csv_file) | |
except Exception as e: | |
print(f"Error reading CSV file: {e}") | |
sys.exit(1) | |
if "Compressor name" in df.columns: | |
df = df.filter(pl.col("Compressor name") != "memcpy") | |
else: | |
print("Error: CSV file doesn't have the expected column 'Compressor name'") | |
sys.exit(1) | |
required_columns = ["Compressor name", "Ratio", "Compression speed", "Decompression speed"] | |
for col in required_columns: | |
if col not in df.columns: | |
print(f"Error: Required column '{col}' not found in CSV file") | |
sys.exit(1) | |
df = df.with_columns([ | |
(file_size_mb * (pl.col("Ratio") / 100) / upload_speed_mbps).alias("upload_time_seconds"), | |
(file_size_mb * (pl.col("Ratio") / 100) / download_speed_mbps).alias("download_time_seconds"), | |
(file_size_mb / pl.col("Compression speed")).alias("compression_time_seconds"), | |
(file_size_mb / pl.col("Decompression speed")).alias("decompression_time_seconds") | |
]) | |
df = df.with_columns([ | |
(pl.col("compression_time_seconds") + | |
pl.col("upload_time_seconds") + | |
pl.col("download_time_seconds") + | |
pl.col("decompression_time_seconds")).alias("total_time_seconds") | |
]) | |
column_names = df.columns | |
no_compression_data = {col: [None] for col in column_names} | |
no_compression_upload_time = file_size_mb / upload_speed_mbps | |
no_compression_download_time = file_size_mb / download_speed_mbps | |
no_compression_total_time = no_compression_upload_time + no_compression_download_time | |
no_compression_data.update({ | |
"Compressor name": ["No compression"], | |
"Compression speed": [float('inf')], | |
"Decompression speed": [float('inf')], | |
"Ratio": [100.0], | |
"upload_time_seconds": [no_compression_upload_time], | |
"download_time_seconds": [no_compression_download_time], | |
"compression_time_seconds": [0.0], | |
"decompression_time_seconds": [0.0], | |
"total_time_seconds": [no_compression_total_time] | |
}) | |
for col in ["Original size", "Compressed size", "Filename"]: | |
if col in column_names: | |
value = df[col][0] if df.height > 0 else None | |
no_compression_data[col] = [value] | |
no_compression = pl.DataFrame(no_compression_data).select(column_names) | |
df_with_no_compression = pl.concat([df, no_compression]) | |
df_sorted = df_with_no_compression.sort("total_time_seconds") | |
top_results = df_sorted.head(15) | |
print(f"\nOptimal Algorithm Analysis for {file_size_mb:.2f} MB file") | |
print(f"Upload speed: {upload_speed_mbps:.2f} Mbps, Download speed: {download_speed_mbps:.2f} Mbps\n") | |
headers = ["Rank", "Algorithm", "Total (s)", "Comp (s)", "Upload (s)", "Download (s)", "Decomp (s)", | |
"Ratio (%)", "Comp Speed", "Decomp Speed"] | |
header_format = "{:<6} | {:<21} | {:<10} | {:<10} | {:<10} | {:<12} | {:<10} | {:<10} | {:<10} | {:<10}" | |
formatted_header = header_format.format(*headers) | |
print(formatted_header) | |
print("-" * len(formatted_header)) | |
row_format = "{:<6} | {:<21} | {:<10} | {:<10} | {:<10} | {:<12} | {:<10} | {:<10} | {:<10} | {:<10}" | |
for i, row in enumerate(top_results.iter_rows(named=True)): | |
if row["Compressor name"] == "No compression": | |
print(row_format.format( | |
i+1, | |
row["Compressor name"], | |
f"{row['total_time_seconds']:.2f}", | |
"N/A", | |
f"{row['upload_time_seconds']:.2f}", | |
f"{row['download_time_seconds']:.2f}", | |
"N/A", | |
"100.00", | |
"N/A", | |
"N/A" | |
)) | |
else: | |
print(row_format.format( | |
i+1, | |
row["Compressor name"], | |
f"{row['total_time_seconds']:.2f}", | |
f"{row['compression_time_seconds']:.2f}", | |
f"{row['upload_time_seconds']:.2f}", | |
f"{row['download_time_seconds']:.2f}", | |
f"{row['decompression_time_seconds']:.2f}", | |
f"{row['Ratio']:.2f}", | |
f"{row['Compression speed']:.2f}", | |
f"{row['Decompression speed']:.2f}" | |
)) | |
best_row = top_results.row(0, named=True) | |
# Find the "No compression" row for comparison | |
no_comp_row = None | |
for row in df_with_no_compression.iter_rows(named=True): | |
if row["Compressor name"] == "No compression": | |
no_comp_row = row | |
break | |
if not no_comp_row: | |
no_comp_row = { | |
"total_time_seconds": no_compression_total_time, | |
"upload_time_seconds": no_compression_upload_time, | |
"download_time_seconds": no_compression_download_time | |
} | |
print("\n" + "=" * 90) | |
print(f"BEST CHOICE: {best_row['Compressor name']}") | |
print(f"Estimated total time: {best_row['total_time_seconds']:.2f} seconds") | |
time_savings = no_comp_row["total_time_seconds"] - best_row["total_time_seconds"] | |
time_savings_pct = (time_savings / no_comp_row["total_time_seconds"]) * 100 | |
if best_row['Compressor name'] == 'No compression': | |
print(f"Time breakdown: 0.00s compression + {best_row['upload_time_seconds']:.2f}s upload + " | |
f"{best_row['download_time_seconds']:.2f}s download + 0.00s decompression") | |
print("RECOMMENDATION: Don't compress the file, just transfer it directly!") | |
else: | |
print(f"Time breakdown: {best_row['compression_time_seconds']:.2f}s compression + " | |
f"{best_row['upload_time_seconds']:.2f}s upload + " | |
f"{best_row['download_time_seconds']:.2f}s download + " | |
f"{best_row['decompression_time_seconds']:.2f}s decompression") | |
compressed_size = file_size_mb * (best_row['Ratio'] / 100) | |
savings_pct = 100 - best_row['Ratio'] | |
print(f"File size reduction: {file_size_mb:.2f} MB → {compressed_size:.2f} MB ({savings_pct:.1f}% savings)") | |
if time_savings > 0: | |
print(f"Time savings vs no compression: {time_savings:.2f} seconds ({time_savings_pct:.1f}% faster)") | |
hours_saved = time_savings // 3600 | |
minutes_saved = (time_savings % 3600) // 60 | |
seconds_saved = time_savings % 60 | |
if hours_saved > 0: | |
print(f"That's {int(hours_saved)}h {int(minutes_saved)}m {int(seconds_saved)}s saved!") | |
elif minutes_saved > 0: | |
print(f"That's {int(minutes_saved)}m {int(seconds_saved)}s saved!") | |
else: | |
print(f"NOTE: Compression adds {-time_savings:.2f} seconds compared to direct transfer.") | |
print("Compression is not beneficial for this combination of file size and network speed.") | |
print("=" * 90) | |
if best_row['Compressor name'] != 'No compression': | |
print("\nINSIGHTS:") | |
times = { | |
'Compression': best_row['compression_time_seconds'], | |
'Upload': best_row['upload_time_seconds'], | |
'Download': best_row['download_time_seconds'], | |
'Decompression': best_row['decompression_time_seconds'] | |
} | |
bottleneck = max(times, key=times.get) | |
bottleneck_pct = (times[bottleneck] / best_row['total_time_seconds']) * 100 | |
print(f"- {bottleneck} is the bottleneck in your scenario ({times[bottleneck]:.2f}s, {bottleneck_pct:.1f}% of total time)") | |
if bottleneck == 'Compression': | |
faster_comp = df.filter( | |
(pl.col("Compression speed") > best_row['Compression speed'] * 1.3) & | |
(pl.col("Ratio") < best_row['Ratio'] * 1.1) | |
) | |
if faster_comp.height > 0: | |
faster_comp = faster_comp.sort("Compression speed", descending=True) | |
alt = faster_comp.row(0, named=True) | |
speedup = alt['Compression speed'] / best_row['Compression speed'] | |
print(f"- Consider: {alt['Compressor name']} - {speedup:.1f}x faster compression with only slightly worse ratio") | |
print(f" Potential time savings: {best_row['compression_time_seconds'] - (file_size_mb / alt['Compression speed']):.2f}s") | |
elif bottleneck == 'Decompression': | |
faster_decomp = df.filter( | |
(pl.col("Decompression speed") > best_row['Decompression speed'] * 1.3) & | |
(pl.col("Ratio") < best_row['Ratio'] * 1.1) | |
) | |
if faster_decomp.height > 0: | |
faster_decomp = faster_decomp.sort("Decompression speed", descending=True) | |
alt = faster_decomp.row(0, named=True) | |
speedup = alt['Decompression speed'] / best_row['Decompression speed'] | |
print(f"- Consider: {alt['Compressor name']} - {speedup:.1f}x faster decompression with only slightly worse ratio") | |
print(f" Potential time savings: {best_row['decompression_time_seconds'] - (file_size_mb / alt['Decompression speed']):.2f}s") | |
elif bottleneck in ['Upload', 'Download']: | |
better_ratio = df.filter( | |
(pl.col("Ratio") < best_row['Ratio'] * 0.9) & | |
(pl.col("Compression speed") > best_row['Compression speed'] * 0.5) & | |
(pl.col("Decompression speed") > best_row['Decompression speed'] * 0.5) | |
) | |
if better_ratio.height > 0: | |
better_ratio = better_ratio.sort("Ratio") | |
alt = better_ratio.row(0, named=True) | |
ratio_improvement = (best_row['Ratio'] - alt['Ratio']) / best_row['Ratio'] * 100 | |
current_transfer = best_row['upload_time_seconds'] + best_row['download_time_seconds'] | |
alt_transfer = (file_size_mb * (alt['Ratio'] / 100) / upload_speed_mbps) + (file_size_mb * (alt['Ratio'] / 100) / download_speed_mbps) | |
transfer_savings = current_transfer - alt_transfer | |
current_processing = best_row['compression_time_seconds'] + best_row['decompression_time_seconds'] | |
alt_processing = (file_size_mb / alt['Compression speed']) + (file_size_mb / alt['Decompression speed']) | |
processing_penalty = alt_processing - current_processing | |
net_savings = transfer_savings - processing_penalty | |
if net_savings > 0: | |
print(f"- Consider: {alt['Compressor name']} - {ratio_improvement:.1f}% better compression ratio") | |
print(f" Potential net time savings: {net_savings:.2f}s (Transfer: -{transfer_savings:.2f}s, Processing: +{processing_penalty:.2f}s)") | |
print("\nALGORITHM RECOMMENDATIONS BY NETWORK SPEED:") | |
test_speeds = [0.5, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000] | |
algorithms_by_speed = {} | |
for speed in test_speeds: | |
test_df = df.with_columns([ | |
(file_size_mb * (pl.col("Ratio") / 100) / speed).alias("test_upload_time"), | |
(file_size_mb * (pl.col("Ratio") / 100) / speed).alias("test_download_time"), | |
(pl.col("compression_time_seconds") + | |
(file_size_mb * (pl.col("Ratio") / 100) / speed) + | |
(file_size_mb * (pl.col("Ratio") / 100) / speed) + | |
pl.col("decompression_time_seconds")).alias("test_total_time") | |
]) | |
no_comp_time = file_size_mb / speed * 2 # upload + download | |
test_df = test_df.sort("test_total_time") | |
if test_df.height > 0: | |
best_algo = test_df.row(0, named=True) | |
# Check if compression is actually beneficial at this speed | |
if best_algo["test_total_time"] < no_comp_time: | |
algorithms_by_speed[speed] = best_algo["Compressor name"] | |
else: | |
algorithms_by_speed[speed] = "No compression" | |
else: | |
algorithms_by_speed[speed] = "Unknown" | |
algo_to_speeds = {} | |
for speed, algo in algorithms_by_speed.items(): | |
if algo not in algo_to_speeds: | |
algo_to_speeds[algo] = [] | |
algo_to_speeds[algo].append(speed) | |
for algo, speeds in algo_to_speeds.items(): | |
if len(speeds) > 0: | |
min_speed = min(speeds) | |
max_speed = max(speeds) | |
if min_speed == max_speed: | |
print(f"- {algo}: Optimal at {min_speed} Mbps") | |
else: | |
if speeds == test_speeds: | |
print(f"- {algo}: Optimal across all tested network speeds ({min_speed}-{max_speed} Mbps)") | |
elif min_speed == test_speeds[0]: | |
print(f"- {algo}: Optimal for slow networks up to {max_speed} Mbps") | |
elif max_speed == test_speeds[-1]: | |
print(f"- {algo}: Optimal for fast networks {min_speed}+ Mbps") | |
else: | |
print(f"- {algo}: Optimal for networks between {min_speed}-{max_speed} Mbps") | |
if visualize: | |
try: | |
import matplotlib.pyplot as plt | |
top_5_algos = list(top_results.filter(pl.col("Compressor name") != "No compression").head(5)["Compressor name"]) | |
top_5_algos.append("No compression") | |
# Test more granular speeds for smoother curves | |
vis_speeds = sorted(list(set([x/10 for x in range(1, 101)] + [x for x in range(10, 1001, 10)]))) | |
# For each algorithm, calculate times at different network speeds | |
algo_times = {algo: [] for algo in top_5_algos} | |
no_comp_times = [] | |
for speed in vis_speeds: | |
no_comp_time = file_size_mb / speed * 2 # Upload + download | |
no_comp_times.append(no_comp_time) | |
for algo in top_5_algos: | |
if algo == "No compression": | |
continue | |
algo_data = df.filter(pl.col("Compressor name") == algo) | |
if algo_data.height > 0: | |
row = algo_data.row(0, named=True) | |
comp_time = row["compression_time_seconds"] | |
decomp_time = row["decompression_time_seconds"] | |
transfer_time = file_size_mb * (row["Ratio"] / 100) / speed * 2 # Upload + download | |
total_time = comp_time + transfer_time + decomp_time | |
algo_times[algo].append(total_time) | |
else: | |
algo_times[algo].append(float('inf')) | |
algo_times["No compression"] = no_comp_times | |
plt.figure(figsize=(12, 8)) | |
for algo in top_5_algos: | |
plt.plot(vis_speeds, algo_times[algo], label=algo) | |
plt.xscale('log') # Log scale for network speed | |
plt.yscale('log') # Log scale for time | |
plt.xlabel('Network Speed (Mbps)') | |
plt.ylabel('Total Transfer Time (seconds)') | |
plt.title(f'Compression Algorithm Performance vs Network Speed for {file_size_mb} MB File') | |
plt.grid(True, which="both", ls="--") | |
plt.legend() | |
plt.axvline(x=upload_speed_mbps, color='r', linestyle='--', alpha=0.7) | |
plt.text(upload_speed_mbps*1.1, plt.ylim()[0]*1.1, f'Current: {upload_speed_mbps} Mbps', | |
rotation=90, verticalalignment='bottom') | |
plt.tight_layout() | |
plt.savefig('compression_performance.png') | |
print("\nVisualization saved as 'compression_performance.png'") | |
except ImportError: | |
print("\nVisualization skipped: matplotlib not available") | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser(description='Calculate optimal compression algorithm based on file size and network speeds') | |
parser.add_argument('file_size', type=float, help='File size in MB') | |
parser.add_argument('upload_speed', type=float, help='Upload speed in Mbps (megabits per second)') | |
parser.add_argument('--download_speed', type=float, help='Download speed in Mbps (if different from upload)') | |
parser.add_argument('--csv', default='compression_benchmark.csv', help='Path to compression benchmark CSV file') | |
parser.add_argument('--visualize', action='store_true', help='Generate visualization (requires matplotlib)') | |
args = parser.parse_args() | |
calculate_optimal_algorithm(args.csv, args.file_size, args.upload_speed, args.download_speed, args.visualize) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ python3 calc2.py --csv results.csv 100 10 --visualize | |
Optimal Algorithm Analysis for 100.00 MB file | |
Upload speed: 10.00 Mbps, Download speed: 10.00 Mbps | |
Rank | Algorithm | Total (s) | Comp (s) | Upload (s) | Download (s) | Decomp (s) | Ratio (%) | Comp Speed | Decomp Speed | |
------------------------------------------------------------------------------------------------------------------------------------------ | |
1 | zstd 1.5.7 -2 | 7.35 | 0.67 | 3.27 | 3.27 | 0.14 | 32.70 | 148.41 | 734.87 | |
2 | zstd 1.5.7 -1 | 7.40 | 0.38 | 3.45 | 3.45 | 0.12 | 34.53 | 263.33 | 863.57 | |
3 | libdeflate 1.23 -1 | 7.74 | 0.64 | 3.47 | 3.47 | 0.17 | 34.68 | 155.98 | 601.58 | |
4 | libdeflate 1.23 -3 | 7.92 | 1.13 | 3.31 | 3.31 | 0.17 | 33.11 | 88.59 | 602.23 | |
5 | libdeflate 1.23 -6 | 8.21 | 1.68 | 3.19 | 3.19 | 0.16 | 31.85 | 59.56 | 618.05 | |
6 | lizard 2.1 -40 | 8.30 | 0.55 | 3.81 | 3.81 | 0.12 | 38.14 | 182.77 | 825.37 | |
7 | zstd 1.5.7 -5 | 8.32 | 2.22 | 2.96 | 2.96 | 0.18 | 29.60 | 44.99 | 557.39 | |
8 | lizard 2.1 -32 | 8.42 | 0.91 | 3.71 | 3.71 | 0.09 | 37.11 | 109.59 | 1130.96 | |
9 | brotli 1.1.0 -0 | 8.44 | 0.64 | 3.70 | 3.70 | 0.39 | 37.02 | 155.21 | 253.38 | |
10 | brotli 1.1.0 -2 | 8.45 | 1.67 | 3.21 | 3.21 | 0.35 | 32.12 | 59.99 | 281.77 | |
11 | kanzi 2.3 -2 | 8.51 | 1.75 | 3.22 | 3.22 | 0.32 | 32.22 | 57.13 | 315.09 | |
12 | lizard 2.1 -30 | 8.56 | 0.37 | 4.05 | 4.05 | 0.10 | 40.49 | 270.83 | 1039.30 | |
13 | zstd 1.5.7 --fast --1 | 8.65 | 0.35 | 4.10 | 4.10 | 0.10 | 41.01 | 288.62 | 1031.99 | |
14 | zlib-ng 2.2.3 -6 | 8.81 | 2.08 | 3.25 | 3.25 | 0.23 | 32.49 | 48.06 | 436.84 | |
15 | quicklz 1.5.0 -2 | 8.89 | 0.64 | 3.99 | 3.99 | 0.27 | 39.89 | 155.06 | 371.67 | |
========================================================================================== | |
BEST CHOICE: zstd 1.5.7 -2 | |
Estimated total time: 7.35 seconds | |
Time breakdown: 0.67s compression + 3.27s upload + 3.27s download + 0.14s decompression | |
File size reduction: 100.00 MB → 32.70 MB (67.3% savings) | |
Time savings vs no compression: 12.65 seconds (63.3% faster) | |
========================================================================================== | |
INSIGHTS: | |
- Upload is the bottleneck in your scenario (3.27s, 44.5% of total time) | |
ALGORITHM RECOMMENDATIONS BY NETWORK SPEED: | |
- bsc 3.3.5 -m0 -e1: Optimal at 0.5 Mbps | |
- zstd 1.5.7 -8: Optimal at 1 Mbps | |
- zstd 1.5.7 -5: Optimal at 2 Mbps | |
- zstd 1.5.7 -2: Optimal for networks between 5-10 Mbps | |
- zstd 1.5.7 -1: Optimal for networks between 20-100 Mbps | |
- lz4 1.10.0 --fast -3: Optimal at 200 Mbps | |
- No compression: Optimal for fast networks 500+ Mbps | |
Visualization saved as 'compression_performance.png' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Compressor name | Compression speed | Decompression speed | Original size | Compressed size | Ratio | Filename | |
---|---|---|---|---|---|---|---|
memcpy | 4464.68 | 4439.61 | 211957760 | 211957760 | 100.00 | test/silesia.tar | |
brieflz 1.3.0 -1 | 77.16 | 216.26 | 211957760 | 81137647 | 38.28 | test/silesia.tar | |
brieflz 1.3.0 -3 | 36.11 | 221.08 | 211957760 | 75550707 | 35.64 | test/silesia.tar | |
brieflz 1.3.0 -6 | 5.18 | 219.19 | 211957760 | 67210100 | 31.71 | test/silesia.tar | |
brieflz 1.3.0 -8 | 1.17 | 218.43 | 211957760 | 64534659 | 30.45 | test/silesia.tar | |
brotli 1.1.0 -0 | 155.21 | 253.38 | 211957760 | 78466800 | 37.02 | test/silesia.tar | |
brotli 1.1.0 -2 | 59.99 | 281.77 | 211957760 | 68070616 | 32.12 | test/silesia.tar | |
brotli 1.1.0 -5 | 7.95 | 266.06 | 211957760 | 59564694 | 28.10 | test/silesia.tar | |
brotli 1.1.0 -8 | 2.01 | 222.95 | 211957760 | 57149614 | 26.96 | test/silesia.tar | |
brotli 1.1.0 -11 | 0.31 | 194.05 | 211957760 | 50489635 | 23.82 | test/silesia.tar | |
bsc 3.3.5 -m0 -e1 | 8.20 | 14.16 | 211957760 | 49143500 | 23.19 | test/silesia.tar | |
bsc 3.3.5 -m4 -e1 | 17.56 | 7.46 | 211957760 | 50627194 | 23.89 | test/silesia.tar | |
bsc 3.3.5 -m5 -e1 | 13.28 | 6.80 | 211957760 | 49522602 | 23.36 | test/silesia.tar | |
bzip2 1.0.8 -1 | 9.87 | 35.75 | 211957760 | 60482924 | 28.54 | test/silesia.tar | |
bzip2 1.0.8 -5 | 7.19 | 11.17 | 211957760 | 55723043 | 26.29 | test/silesia.tar | |
bzip2 1.0.8 -9 | 6.02 | 10.69 | 211957760 | 54592325 | 25.76 | test/silesia.tar | |
bzip3 1.5.1 -5 | 6.11 | 6.75 | 211957760 | 47253497 | 22.29 | test/silesia.tar | |
fastlz 0.5.0 -1 | 215.34 | 521.89 | 211957760 | 104628326 | 49.36 | test/silesia.tar | |
fastlz 0.5.0 -2 | 192.39 | 492.18 | 211957760 | 100906271 | 47.61 | test/silesia.tar | |
fastlzma2 1.0.1 -1 | 8.43 | 57.22 | 211957760 | 59019977 | 27.85 | test/silesia.tar | |
fastlzma2 1.0.1 -3 | 5.32 | 59.28 | 211957760 | 54029035 | 25.49 | test/silesia.tar | |
fastlzma2 1.0.1 -5 | 3.68 | 63.42 | 211957760 | 51215991 | 24.16 | test/silesia.tar | |
fastlzma2 1.0.1 -8 | 2.30 | 65.26 | 211957760 | 49128355 | 23.18 | test/silesia.tar | |
fastlzma2 1.0.1 -10 | 1.91 | 64.87 | 211957760 | 48654522 | 22.95 | test/silesia.tar | |
kanzi 2.3 -2 | 57.13 | 315.09 | 211957760 | 68288596 | 32.22 | test/silesia.tar | |
kanzi 2.3 -3 | 31.83 | 190.49 | 211957760 | 65160545 | 30.74 | test/silesia.tar | |
kanzi 2.3 -4 | 25.34 | 79.71 | 211957760 | 61152773 | 28.85 | test/silesia.tar | |
kanzi 2.3 -5 | 10.01 | 24.16 | 211957760 | 54054977 | 25.50 | test/silesia.tar | |
kanzi 2.3 -6 | 7.72 | 16.88 | 211957760 | 49517373 | 23.36 | test/silesia.tar | |
kanzi 2.3 -7 | 5.65 | 9.49 | 211957760 | 47308689 | 22.32 | test/silesia.tar | |
kanzi 2.3 -8 | 1.61 | 1.58 | 211957760 | 43257294 | 20.41 | test/silesia.tar | |
kanzi 2.3 -9 | 0.99 | 0.98 | 211957760 | 41854328 | 19.75 | test/silesia.tar | |
libdeflate 1.23 -1 | 155.98 | 601.58 | 211957760 | 73505636 | 34.68 | test/silesia.tar | |
libdeflate 1.23 -3 | 88.59 | 602.23 | 211957760 | 70171199 | 33.11 | test/silesia.tar | |
libdeflate 1.23 -6 | 59.56 | 618.05 | 211957760 | 67511026 | 31.85 | test/silesia.tar | |
libdeflate 1.23 -9 | 24.54 | 617.76 | 211957760 | 66716186 | 31.48 | test/silesia.tar | |
libdeflate 1.23 -12 | 3.27 | 615.77 | 211957760 | 64681823 | 30.52 | test/silesia.tar | |
lizard 2.1 -10 | 327.15 | 1896.52 | 211957760 | 103397408 | 48.78 | test/silesia.tar | |
lizard 2.1 -12 | 42.75 | 1867.83 | 211957760 | 86232453 | 40.68 | test/silesia.tar | |
lizard 2.1 -15 | 21.73 | 1951.35 | 211957760 | 81187500 | 38.30 | test/silesia.tar | |
lizard 2.1 -19 | 2.54 | 1817.75 | 211957760 | 77416343 | 36.52 | test/silesia.tar | |
lizard 2.1 -20 | 232.78 | 1186.06 | 211957760 | 96922317 | 45.73 | test/silesia.tar | |
lizard 2.1 -22 | 35.40 | 1174.57 | 211957760 | 84866581 | 40.04 | test/silesia.tar | |
lizard 2.1 -25 | 6.25 | 1093.39 | 211957760 | 75131513 | 35.45 | test/silesia.tar | |
lizard 2.1 -29 | 1.02 | 1002.26 | 211957760 | 68695997 | 32.41 | test/silesia.tar | |
lizard 2.1 -30 | 270.83 | 1039.30 | 211957760 | 85815427 | 40.49 | test/silesia.tar | |
lizard 2.1 -32 | 109.59 | 1130.96 | 211957760 | 78665107 | 37.11 | test/silesia.tar | |
lizard 2.1 -35 | 23.65 | 1400.34 | 211957760 | 74573727 | 35.18 | test/silesia.tar | |
lizard 2.1 -39 | 2.50 | 1338.35 | 211957760 | 69813383 | 32.94 | test/silesia.tar | |
lizard 2.1 -40 | 182.77 | 825.37 | 211957760 | 80845198 | 38.14 | test/silesia.tar | |
lizard 2.1 -42 | 33.46 | 874.24 | 211957760 | 73355790 | 34.61 | test/silesia.tar | |
lizard 2.1 -45 | 6.19 | 886.96 | 211957760 | 66683694 | 31.46 | test/silesia.tar | |
lizard 2.1 -49 | 0.99 | 720.85 | 211957760 | 60681666 | 28.63 | test/silesia.tar | |
lz4 1.10.0 --fast -17 | 728.18 | 2254.43 | 211957760 | 131733247 | 62.15 | test/silesia.tar | |
lz4 1.10.0 --fast -9 | 598.18 | 2183.61 | 211957760 | 120130702 | 56.68 | test/silesia.tar | |
lz4 1.10.0 --fast -3 | 473.47 | 2088.59 | 211957760 | 107066585 | 50.51 | test/silesia.tar | |
lz4 1.10.0 | 407.91 | 2041.31 | 211957760 | 100881062 | 47.59 | test/silesia.tar | |
lz4hc 1.10.0 -1 | 168.69 | 1816.53 | 211957760 | 89135698 | 42.05 | test/silesia.tar | |
lz4hc 1.10.0 -4 | 49.88 | 1976.48 | 211957760 | 79808204 | 37.65 | test/silesia.tar | |
lz4hc 1.10.0 -9 | 22.22 | 1970.86 | 211957760 | 77884747 | 36.75 | test/silesia.tar | |
lz4hc 1.10.0 -12 | 7.08 | 1965.12 | 211957760 | 77262923 | 36.45 | test/silesia.tar | |
lzav 4.15 -1 | 95.49 | 756.48 | 211957760 | 86544995 | 40.83 | test/silesia.tar | |
lzav 4.15 -2 | 19.82 | 691.53 | 211957760 | 75424938 | 35.58 | test/silesia.tar | |
lzf 3.6 -0 | 248.08 | 499.60 | 211957760 | 105682318 | 49.86 | test/silesia.tar | |
lzf 3.6 -1 | 249.56 | 501.06 | 211957760 | 102041403 | 48.14 | test/silesia.tar | |
lzfse 2017-03-08 | 38.14 | 435.68 | 211957760 | 67628452 | 31.91 | test/silesia.tar | |
lzg 1.0.10 -1 | 43.12 | 402.43 | 211957760 | 108553985 | 51.21 | test/silesia.tar | |
lzg 1.0.10 -4 | 26.76 | 401.55 | 211957760 | 95930878 | 45.26 | test/silesia.tar | |
lzg 1.0.10 -6 | 14.38 | 443.31 | 211957760 | 89490532 | 42.22 | test/silesia.tar | |
lzg 1.0.10 -8 | 2.24 | 487.73 | 211957760 | 83607283 | 39.45 | test/silesia.tar | |
lzham 1.0 -d26 -0 | 5.54 | 163.46 | 211957760 | 64148135 | 30.26 | test/silesia.tar | |
lzham 1.0 -d26 -1 | 1.37 | 196.84 | 211957760 | 54738023 | 25.82 | test/silesia.tar | |
lzlib 1.15 -0 | 19.05 | 40.58 | 211957760 | 63847892 | 30.12 | test/silesia.tar | |
lzlib 1.15 -3 | 3.12 | 44.58 | 211957760 | 56323014 | 26.57 | test/silesia.tar | |
lzlib 1.15 -6 | 1.43 | 48.37 | 211957760 | 49790504 | 23.49 | test/silesia.tar | |
lzlib 1.15 -9 | 0.93 | 49.18 | 211957760 | 48301322 | 22.79 | test/silesia.tar | |
lzma 24.09 -0 | 11.83 | 56.12 | 211957760 | 60510178 | 28.55 | test/silesia.tar | |
lzma 24.09 -2 | 5.73 | 63.31 | 211957760 | 57073562 | 26.93 | test/silesia.tar | |
lzma 24.09 -4 | 4.74 | 62.69 | 211957760 | 55926312 | 26.39 | test/silesia.tar | |
lzma 24.09 -6 | 1.44 | 66.52 | 211957760 | 49541380 | 23.37 | test/silesia.tar | |
lzma 24.09 -9 | 1.21 | 66.98 | 211957760 | 48676345 | 22.97 | test/silesia.tar | |
lzo1 2.10 -1 | 185.84 | 484.76 | 211957760 | 106475106 | 50.23 | test/silesia.tar | |
lzo1 2.10 -99 | 59.45 | 506.46 | 211957760 | 94946557 | 44.80 | test/silesia.tar | |
lzo1a 2.10 -1 | 182.02 | 531.44 | 211957760 | 104202423 | 49.16 | test/silesia.tar | |
lzo1a 2.10 -99 | 58.49 | 550.19 | 211957760 | 92666254 | 43.72 | test/silesia.tar | |
lzo1b 2.10 -1 | 157.94 | 501.88 | 211957760 | 97035311 | 45.78 | test/silesia.tar | |
lzo1b 2.10 -3 | 160.39 | 511.77 | 211957760 | 94044993 | 44.37 | test/silesia.tar | |
lzo1b 2.10 -6 | 147.98 | 512.90 | 211957760 | 91375570 | 43.11 | test/silesia.tar | |
lzo1b 2.10 -9 | 108.45 | 510.53 | 211957760 | 89265861 | 42.11 | test/silesia.tar | |
lzo1b 2.10 -99 | 56.83 | 511.81 | 211957760 | 85653474 | 40.41 | test/silesia.tar | |
lzo1b 2.10 -999 | 8.04 | 586.73 | 211957760 | 76594617 | 36.14 | test/silesia.tar | |
lzo1c 2.10 -1 | 164.41 | 502.01 | 211957760 | 99551259 | 46.97 | test/silesia.tar | |
lzo1c 2.10 -3 | 160.90 | 509.40 | 211957760 | 96716387 | 45.63 | test/silesia.tar | |
lzo1c 2.10 -6 | 128.94 | 510.52 | 211957760 | 93302628 | 44.02 | test/silesia.tar | |
lzo1c 2.10 -9 | 95.41 | 499.96 | 211957760 | 91035787 | 42.95 | test/silesia.tar | |
lzo1c 2.10 -99 | 56.59 | 506.52 | 211957760 | 88120064 | 41.57 | test/silesia.tar | |
lzo1c 2.10 -999 | 16.81 | 537.38 | 211957760 | 80397073 | 37.93 | test/silesia.tar | |
lzof 2.10 -1 | 146.94 | 468.45 | 211957760 | 99741943 | 47.06 | test/silesia.tar | |
lzof 2.10 -999 | 14.92 | 479.98 | 211957760 | 80890516 | 38.16 | test/silesia.tar | |
lzo1x 2.10 -1 | 378.40 | 523.89 | 211957760 | 100568131 | 47.45 | test/silesia.tar | |
lzo1x 2.10 -11 | 413.09 | 536.66 | 211957760 | 106599920 | 50.29 | test/silesia.tar | |
lzo1x 2.10 -12 | 409.32 | 525.20 | 211957760 | 103234754 | 48.71 | test/silesia.tar | |
lzo1x 2.10 -15 | 399.06 | 523.09 | 211957760 | 101455670 | 47.87 | test/silesia.tar | |
lzo1x 2.10 -999 | 5.24 | 496.03 | 211957760 | 75302222 | 35.53 | test/silesia.tar | |
lzo1y 2.10 -1 | 383.03 | 517.53 | 211957760 | 101254091 | 47.77 | test/silesia.tar | |
lzo1y 2.10 -999 | 5.18 | 491.51 | 211957760 | 75504149 | 35.62 | test/silesia.tar | |
lzo1z 2.10 -999 | 5.11 | 485.49 | 211957760 | 75061645 | 35.41 | test/silesia.tar | |
lzo2a 2.10 -999 | 18.15 | 356.95 | 211957760 | 82809652 | 39.07 | test/silesia.tar | |
lzsse2 2019-04-18 -1 | 8.95 | 1730.17 | 211957760 | 87976771 | 41.51 | test/silesia.tar | |
lzsse2 2019-04-18 -6 | 4.64 | 1889.19 | 211957760 | 75837821 | 35.78 | test/silesia.tar | |
lzsse2 2019-04-18 -12 | 4.54 | 1895.80 | 211957760 | 75830691 | 35.78 | test/silesia.tar | |
lzsse2 2019-04-18 -16 | 4.52 | 1892.80 | 211957760 | 75830691 | 35.78 | test/silesia.tar | |
lzsse4 2019-04-18 -1 | 8.31 | 2176.32 | 211957760 | 82542691 | 38.94 | test/silesia.tar | |
lzsse4 2019-04-18 -6 | 4.90 | 2237.40 | 211957760 | 76118927 | 35.91 | test/silesia.tar | |
lzsse4 2019-04-18 -12 | 4.80 | 2250.87 | 211957760 | 76113661 | 35.91 | test/silesia.tar | |
lzsse4 2019-04-18 -16 | 4.80 | 2246.98 | 211957760 | 76113661 | 35.91 | test/silesia.tar | |
lzsse8 2019-04-18 -1 | 7.06 | 2233.42 | 211957760 | 81866836 | 38.62 | test/silesia.tar | |
lzsse8 2019-04-18 -6 | 4.42 | 2325.43 | 211957760 | 75470365 | 35.61 | test/silesia.tar | |
lzsse8 2019-04-18 -12 | 4.34 | 2341.09 | 211957760 | 75464968 | 35.60 | test/silesia.tar | |
lzsse8 2019-04-18 -16 | 4.34 | 2320.95 | 211957760 | 75464968 | 35.60 | test/silesia.tar | |
lzvn 2017-03-08 | 40.17 | 594.40 | 211957760 | 80814886 | 38.13 | test/silesia.tar | |
ppmd8 24.09 -4 | 5.81 | 5.43 | 211957760 | 51257333 | 24.18 | test/silesia.tar | |
quicklz 1.5.0 -1 | 342.24 | 406.08 | 211957760 | 94723857 | 44.69 | test/silesia.tar | |
quicklz 1.5.0 -2 | 155.06 | 371.67 | 211957760 | 84560192 | 39.89 | test/silesia.tar | |
quicklz 1.5.0 -3 | 29.28 | 602.67 | 211957760 | 81822087 | 38.60 | test/silesia.tar | |
slz_gzip 1.2.1 -1 | 204.49 | 269.01 | 211957760 | 99655454 | 47.02 | test/silesia.tar | |
slz_gzip 1.2.1 -2 | 199.11 | 268.34 | 211957760 | 96861907 | 45.70 | test/silesia.tar | |
slz_gzip 1.2.1 -3 | 193.25 | 267.99 | 211957760 | 96187264 | 45.38 | test/silesia.tar | |
snappy 1.2.1 | 294.12 | 938.58 | 211957760 | 101533051 | 47.90 | test/silesia.tar | |
ucl_nrv2b 1.03 -1 | 15.81 | 179.96 | 211957760 | 81703296 | 38.55 | test/silesia.tar | |
ucl_nrv2b 1.03 -6 | 7.54 | 214.98 | 211957760 | 73902403 | 34.87 | test/silesia.tar | |
ucl_nrv2b 1.03 -9 | 0.34 | 233.82 | 211957760 | 71031467 | 33.51 | test/silesia.tar | |
ucl_nrv2d 1.03 -1 | 15.99 | 198.17 | 211957760 | 81462119 | 38.43 | test/silesia.tar | |
ucl_nrv2d 1.03 -6 | 7.57 | 223.45 | 211957760 | 73757888 | 34.80 | test/silesia.tar | |
ucl_nrv2d 1.03 -9 | 0.34 | 240.20 | 211957760 | 70054181 | 33.05 | test/silesia.tar | |
ucl_nrv2e 1.03 -1 | 16.10 | 189.71 | 211957760 | 81195705 | 38.31 | test/silesia.tar | |
ucl_nrv2e 1.03 -6 | 7.55 | 217.72 | 211957760 | 73302227 | 34.58 | test/silesia.tar | |
ucl_nrv2e 1.03 -9 | 0.34 | 233.61 | 211957760 | 69645422 | 32.86 | test/silesia.tar | |
zlib 1.3.1 -1 | 72.82 | 251.55 | 211957760 | 77260301 | 36.45 | test/silesia.tar | |
zlib 1.3.1 -6 | 22.45 | 268.80 | 211957760 | 68228689 | 32.19 | test/silesia.tar | |
zlib 1.3.1 -9 | 9.34 | 270.37 | 211957760 | 67644092 | 31.91 | test/silesia.tar | |
zlib-ng 2.2.3 -1 | 148.54 | 410.52 | 211957760 | 94129610 | 44.41 | test/silesia.tar | |
zlib-ng 2.2.3 -6 | 48.06 | 436.84 | 211957760 | 68864698 | 32.49 | test/silesia.tar | |
zlib-ng 2.2.3 -9 | 20.31 | 439.75 | 211957760 | 67584038 | 31.89 | test/silesia.tar | |
zstd 1.5.7 --fast --5 | 366.71 | 1167.39 | 211957760 | 103023976 | 48.61 | test/silesia.tar | |
zstd 1.5.7 --fast --3 | 333.46 | 1092.45 | 211957760 | 94599846 | 44.63 | test/silesia.tar | |
zstd 1.5.7 --fast --1 | 288.62 | 1031.99 | 211957760 | 86915882 | 41.01 | test/silesia.tar | |
zstd 1.5.7 -1 | 263.33 | 863.57 | 211957760 | 73191354 | 34.53 | test/silesia.tar | |
zstd 1.5.7 -2 | 148.41 | 734.87 | 211957760 | 69303966 | 32.70 | test/silesia.tar | |
zstd 1.5.7 -5 | 44.99 | 557.39 | 211957760 | 62740792 | 29.60 | test/silesia.tar | |
zstd 1.5.7 -8 | 25.64 | 557.75 | 211957760 | 59701675 | 28.17 | test/silesia.tar | |
zstd 1.5.7 -11 | 11.05 | 431.11 | 211957760 | 57966091 | 27.35 | test/silesia.tar | |
zstd 1.5.7 -15 | 3.09 | 403.24 | 211957760 | 56872400 | 26.83 | test/silesia.tar | |
zstd 1.5.7 -18 | 1.73 | 382.92 | 211957760 | 53298213 | 25.15 | test/silesia.tar | |
zstd 1.5.7 -22 | 0.95 | 433.31 | 211957760 | 52286229 | 24.67 | test/silesia.tar |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment