v0.34.0_1
This commit is contained in:
1 parent
9b3d6731cc
commit
00f29f92c8
68 files changed
+2599
-513
No files matched your search
@@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Amdahl sensitivity study only: 0.33.8 measured baseline, 0.34.0 not measured.
|
||||
|
||||
No synthetic RPS is described as benchmarked RustProxy throughput. Amdahl uses
|
||||
RPS_new = RPS_old / (1 - eligible_cost_fraction * fraction_eliminated).
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
# Verified medians reproduced from the supplied 0.33.8 evidence. Cache OFF.
|
||||
BASELINE = [
|
||||
("reverse_proxy", 1040, 29334.12, 170610.16, False),
|
||||
("reverse_proxy", 65536, 20735.07, 35393.29, False),
|
||||
("reverse_proxy", 1048576, 4461.19, 2730.23, False),
|
||||
("www", 1040, 24906.20, 351605.13, False),
|
||||
("www", 65536, 20856.67, 203709.91, True),
|
||||
("www", 1048576, 2833.71, 12611.49, True),
|
||||
]
|
||||
|
||||
# WWW scenarios: share of per-request service time due to file copy/read;
|
||||
# assume sendfile removes HALF of that part, not the full service time.
|
||||
WWW_SHARES = {"low": 0.20, "middle": 0.40, "high": 0.60}
|
||||
COPY_COST_REMOVED = 0.50
|
||||
# Proxy independent optimization: hypothetical reduction in *total* request
|
||||
# service time, modeling removal of redundant response-frame mutex, nothing else.
|
||||
PROXY_TIME_SAVED = {"low": 0.01, "middle": 0.03, "high": 0.05}
|
||||
|
||||
|
||||
def run() -> dict:
|
||||
items = []
|
||||
for kind, payload_bytes, rust_rps, nginx_rps, eligible in BASELINE:
|
||||
baseline_ratio = rust_rps / nginx_rps
|
||||
row = {
|
||||
"kind": kind,
|
||||
"bytes": payload_bytes,
|
||||
"baseline_version": "0.33.8",
|
||||
"baseline_rust_rps": rust_rps,
|
||||
"baseline_nginx_rps": nginx_rps,
|
||||
"baseline_of_nginx_pct": round(100 * baseline_ratio, 2),
|
||||
"factor_to_match_nginx": round(nginx_rps / rust_rps, 2),
|
||||
"sendfile_eligible_only_if_plain_linux_http1_1_no_cache_no_compression": eligible,
|
||||
"scenarios": {},
|
||||
}
|
||||
for level in ("low", "middle", "high"):
|
||||
if kind == "www" and eligible:
|
||||
saved_fraction = WWW_SHARES[level] * COPY_COST_REMOVED
|
||||
elif kind == "reverse_proxy":
|
||||
saved_fraction = PROXY_TIME_SAVED[level]
|
||||
else:
|
||||
saved_fraction = 0.0
|
||||
simulated_rps = rust_rps / (1.0 - saved_fraction)
|
||||
row["scenarios"][level] = {
|
||||
"modeled_total_time_saved_pct": round(100 * saved_fraction, 2),
|
||||
"simulated_rps": round(simulated_rps),
|
||||
"simulated_rps_gain_pct": round(100 * (simulated_rps / rust_rps - 1), 2),
|
||||
"simulated_of_nginx_pct": round(100 * simulated_rps / nginx_rps, 2),
|
||||
"simulated_remaining_gap_to_nginx_pct_points": round(
|
||||
100 * (1 - simulated_rps / nginx_rps), 2
|
||||
),
|
||||
}
|
||||
items.append(row)
|
||||
return {
|
||||
"kind": "HYPOTHETICAL_AMDAHL_SENSITIVITY_NOT_A_BENCHMARK",
|
||||
"comparison": "Existing 0.33.8 measurements (5 runs, cache off) vs measured nginx",
|
||||
"not_measured": "0.34.0 server performance and sendfile syscall/runtime correctness",
|
||||
"conditions": [
|
||||
"Identical CPU and network assumptions to supplied 0.33.8 baseline",
|
||||
"WWW zero-copy is limited to Linux, cleartext HTTP/1.1, GET >=64KiB, no cache, range, transform, compression or TLS",
|
||||
"WWW low/middle/high: file-copy contributes 20%/40%/60% of total request time; modeled sendfile eliminates 50% of that component",
|
||||
"Reverse proxy low/middle/high: removing response-frame mutex saves a hypothetical 1%/3%/5% of total service time",
|
||||
"These fractions are chosen sensitivity parameters; not measured or inferred from profiling",
|
||||
"No change is assumed for WWW 1040B or out-of-scope protocol paths",
|
||||
"No network saturation, TLS record processing, queueing, origin latency, filesystem cache misses, CPU contention or concurrency effects modeled",
|
||||
"No additional speedup due to cache-retention changes is assumed",
|
||||
],
|
||||
"formula": "RPS_sim = RPS_0.33.8 / (1 - fraction_of_total_service_time_eliminated)",
|
||||
"entries": items,
|
||||
}
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--output", type=Path, help="write JSON to this file")
|
||||
args = parser.parse_args()
|
||||
payload = json.dumps(run(), indent=2, ensure_ascii=False) + "\n"
|
||||
if args.output:
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output.write_text(payload)
|
||||
print(f"wrote {args.output}")
|
||||
else:
|
||||
print(payload)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user