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
1.3 KiB
1.3 KiB
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.