Longer Linux runs refine the Ada HTTP result.

Superseded: the benchmark linked one Flyology event loop while reporting 16 and did not verify every server thread's CPU affinity. The measurements remain only as a historical record.

Superseded measurement

A later linked-runtime check found that this campaign used one Flyology event loop while its metadata reported 16, and it did not verify every server thread's CPU affinity. Keep the files as a historical record, but do not use these tables as current performance evidence. See the corrected comparison.

This follow-up extends the preliminary three-second Docker snapshot to two architectures, seven trials, 30-second measurements, five-second warmups, and 20-second cooldowns. Every included request returned the expected HTTP 200 response and exact body.

The ARM64 host used Neoverse-N1 processors with 80 physical and 80 logical cores and 256 GB of memory. The AMD64 host used an Intel Xeon Gold 5412U with 24 physical cores, 48 logical CPUs, and 256 GB of memory. These are whole-machine totals, not resources reserved exclusively for the benchmark.

Each container had a 16-CPU quota, but not an exclusive CPU set. The server was pinned to CPUs 0–7 and the client to CPUs 8–15 within the container.

METHOD

The comparison stayed apples-to-apples.

The plain tier compares direct HTTP handlers: Flyology's raw connection handler, AWS's callback API, and EWS's dynamic handler API. The application tier compares Flyology's router and exchange API with one identical ServletAda servlet running over AWS and EWS.

Transport
HTTP/1.1 cleartext over loopback with persistent connections; no TLS or connection churn.
ARM64 machine
Neoverse-N1, 80 physical / 80 logical cores, and 256 GB of memory.
AMD64 machine
Intel Xeon Gold 5412U, 24 physical / 48 logical cores, and 256 GB of memory.
Responses
An exact 13-byte body and exact 1 KiB body in the plain tier; one routed GET in the application tier.
Campaign
Seven trials, five-second warmups, 30-second measurements, and 20-second cooldowns.
Flyology
Sixteen event loops; lightweight and native task lanes measured separately.
Validity
Only rows with a 100% HTTP success rate enter the comparison table.
OBSERVATION

Flyology led every valid peer row.

At concurrency one, Flyology's faster lane led the tested peer fixtures in both tiers and on both architectures. Which Flyology lane was faster changed with architecture: native led on ARM64, while lightweight led on AMD64.

Plain HTTP, 13-byte response: median requests per second
ArchitectureFlyology lightweightFlyology nativeAWSEWS
ARM6413.3k14.8k7.9k7.1k
AMD6421.2k20.1k18.1k10.9k
Routed application GET: median requests per second
ArchitectureFlyology lightweightFlyology nativeServletAda / AWSServletAda / EWS
ARM6411.9k13.6k3.6k6.3k
AMD6418.5k17.7k9.5k10.1k

The 1 KiB plain response kept the same peer ordering. Complete medians, ranges, and latency percentiles are in the downloadable CSV rather than compressed into a single headline number.

TRADEOFF

Lightweight is the efficiency result, not a universal throughput winner.

Lightweight used two server threads in every run; native used 257. Across the two plain workloads, lightweight accumulated 52.7 CPU seconds on ARM64 and 51.6 on AMD64. Native accumulated 186.2 and 212.5 seconds respectively.

Plain-tier process footprint: median across seven trials
ArchitectureLaneCPU secondsRSS MiBMaximum threads
ARM64Lightweight52.75.62
Native186.26.9257
AMD64Lightweight51.67.62
Native212.513.2257

That lower footprint did not force one throughput outcome. Lightweight delivered about 90% of native plaintext throughput on ARM64 and 106% on AMD64. The routed application tier followed the same pattern. Native remains a performance tool when its OS-thread cost is appropriate; lightweight is compelling when throughput, CPU use, and thread count are considered together.

EXCLUSION

The common higher-concurrency table did not survive.

The runner advances only after every fixture passes a strict 100% success threshold. At concurrency eight, the first EWS plaintext measurement recorded 20 five-second request timeouts on ARM64 and 23 on AMD64, alongside hundreds of thousands of successful responses. Those success rates were close to—but not equal to—100%, so the runner stopped.

We therefore exclude concurrency eight and 32 from this follow-up. The result is not “EWS scores zero,” nor evidence that EWS has a universal concurrency limit. It says only that this exact fixture did not pass this campaign's validity gate on the shared hosts. Reporting that boundary is more useful than filling a chart with incomparable rows.

LIMITS

This still measures HTTP overhead, not a complete service.

The endpoints do almost no application work. They do not query a database, call a remote service, use TLS, serialize a meaningful object, or rotate connections. A database-backed endpoint could change the balance: nonblocking waits should suit lightweight tasks, while a blocking client library belongs behind a bounded native-task boundary.

The hosts were shared and the CPU quota was not an exclusive reservation. Cross-architecture numbers describe two separate environments and should not be read as a processor comparison. A dedicated-host campaign remains the right next step for stronger absolute claims.

The restrained conclusion is specific: under the valid concurrency-one profile, Flyology led the tested peer fixtures on both architectures. Lightweight retained that standing with two threads and substantially less CPU than Flyology native, but native was faster in the ARM64 runs.

REPRODUCE

Bring your own two Linux nodes.

The generic runner creates an isolated namespace, builds the benchmark image once per architecture, runs the campaign, copies the artifacts, and removes the namespace.

Seven-trial ARM64 and AMD64 command
Native Linux campaign
HTTP_BENCH_ARM64_NODE=<arm64-node> \
HTTP_BENCH_AMD64_NODE=<amd64-node> \
HTTP_BENCH_TRIALS=7 \
HTTP_BENCH_DURATION=30s \
HTTP_BENCH_WARMUP=5s \
HTTP_BENCH_COOLDOWN=20 \
HTTP_BENCH_CONCURRENCIES=1 \
HTTP_BENCH_SERVER_CPUSET=0-7 \
HTTP_BENCH_CLIENT_CPUSET=8-15 \
HTTP_BENCH_LOOPS=16 \
  ./showcases/http-comparison/scripts/run-kubernetes.sh

Read the comparison guide before substituting hosts or changing the validity threshold. The fixture source used for these measurements is pinned in the article metadata.