Test / test (push) Successful in 2m4s
Release / gates (push) Successful in 2m5s
Release / build (amd64, freebsd) (push) Successful in 1m27s
Release / build (amd64, linux) (push) Successful in 1m22s
Release / build (amd64, netbsd) (push) Successful in 1m19s
Release / build (amd64, openbsd) (push) Successful in 1m20s
Release / build (arm64, darwin) (push) Successful in 1m21s
Release / build (arm64, freebsd) (push) Successful in 1m26s
Release / build (arm64, linux) (push) Successful in 1m25s
Release / build (arm64, netbsd) (push) Successful in 1m31s
Release / build (arm64, openbsd) (push) Successful in 1m27s
Release / build (loong64, linux) (push) Successful in 1m37s
Release / build (riscv64, linux) (push) Successful in 1m21s
Release / release (push) Successful in 40s
Assisted-by: GLM 5.3 Flash
31 lines
1.3 KiB
Markdown
31 lines
1.3 KiB
Markdown
# Measurement: the wire level baseline
|
|
|
|
- Date: 2026-09-22
|
|
- Machine: AMD Ryzen AI Max+ Pro 395 (32 threads), idle
|
|
- Toolchain: go1.27.1, no build flags
|
|
- Command: `go test ./internal/nfs4server/ -run '^$' -bench=Wire -benchmem -count=5`
|
|
|
|
## Baseline
|
|
|
|
The commit 354760b, the head of development: the wire benchmarks are new, so this
|
|
report is the baseline every later optimisation of the request path measures
|
|
against. One benchmark iteration is one COMPOUND of the client library against
|
|
the server handler over a loopback connection, sessions included.
|
|
|
|
## Result
|
|
|
|
Median of five runs, same session, same machine.
|
|
|
|
| Benchmark | Throughput | Latency | Allocations |
|
|
|---|---|---|---|
|
|
| `BenchmarkWireRead64K` | 805 MB/s | 81.4 µs/op | 78 allocs, 628 KiB/op |
|
|
| `BenchmarkWireWrite64K` | 1062 MB/s | 61.7 µs/op | 76 allocs, 428 KiB/op |
|
|
| `BenchmarkWireGetattr` | - | 14.2 µs/op | 85 allocs, 4.1 KiB/op |
|
|
| `BenchmarkWireLookup` | - | 15.0 µs/op | 81 allocs, 4.4 KiB/op |
|
|
|
|
READ of a 64 KiB chunk is slower than WRITE of the same chunk, and the
|
|
allocation columns show where the request path spends its memory: around 80
|
|
allocations per COMPOUND regardless of the operation, on top of the data copies
|
|
the read and write paths make. Both facts are the starting point for the
|
|
optimisations of the request path; neither is a claim about any other setup.
|