Skip to content

Instantly share code, notes, and snippets.

@lucascompython
Last active April 2, 2025 10:40
Show Gist options
  • Save lucascompython/ebfb354af39aeb8b5f821d45118c12ca to your computer and use it in GitHub Desktop.
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
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)
$ 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'
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