Skip to content

v0.15.1

Choose a tag to compare

@github-actions github-actions released this 08 Oct 11:58
ce199ae

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 prev with 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.
  • /heads on 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 ?min reads no longer
    time out with 503. 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-concurrency trades 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 build build with
    grpc-go's grpcnotrace tag. It drops gRPC's own request tracing (golang.org/x/net/trace,
    off unless grpc.EnableTracing is set, which nothing here does), and with it
    html/template and text/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 plain go build/go install works the same, about
    3.8 MB larger.

Full Changelog: v0.15.0...v0.15.1