Repository navigation
v0.15.1
Performance (found by profiling with the new OpenTelemetry spans). End to end, against
v0.15.0 on a shared 4-CPU box, mixed reads (head pointers, revisions, logs, /heads) went
from 557 to 1,552 requests/s on SQLite and from 549 to 1,015 on Postgres, with p99 down from
281 to 66 ms and from 248 to 68 ms:
- Namespace log pages resolved each entry's
prevwith its own query (one per entry, a
round trip each on Postgres). They now come from the page's own rows: a page takes 18 ms
instead of 160 ms on Postgres, and 13 ms instead of 48 ms on SQLite. /headson SQLite now batches its lookups as Postgres already did: 48 ms instead of
218 ms per page.- The index fetches a page's documents concurrently (
-fetch-concurrency, default 8)
instead of one at a time, applying them in log order as before. On Postgres under steady
writes its lag fell from about 950 ms (max 2.6 s) to 24 ms, and?minreads no longer
time out with503. The trade-off: it now keeps up, so its reads compete with writers, and
write throughput with the index and tree following fell by about 23% in that test; lower
-fetch-concurrencytrades freshness back. - Authenticated reads now use the read cache once the request is authorised (it served
only public namespaces before), and verified grants are cached by token, keeping only
grants that verified. Warm authenticated reads take 0.8 ms instead of 1.3 ms, and the
authenticated workload ran 29% faster. Authorisation still runs on every request, and
cache-control is unchanged.
Build:
- Smaller release binaries: releases, the Docker image and
make buildbuild with
grpc-go'sgrpcnotracetag. It drops gRPC's own request tracing (golang.org/x/net/trace,
off unlessgrpc.EnableTracingis set, which nothing here does), and with it
html/templateandtext/template, whose reflection disabled the linker's dead-code
elimination. OTLP export over gRPC and HTTP is unchanged. linux/amd64 is 28.4 MB (32.2 MB
in v0.15.0), linux/arm64 26.7 MB (30.3 MB), darwin/arm64 27.5 MB (31.2 MB),
windows/amd64 29.0 MB (32.8 MB). A plaingo build/go installworks the same, about
3.8 MB larger.
Full Changelog: v0.15.0...v0.15.1