isutools

package module
v1.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 15, 2026 License: MIT Imports: 46 Imported by: 0

README

isutools

Go Reference CI

English | 日本語

ISUCONの1回のベンチを、SQL・HTTP・proxy log・pprof・host資源・scoreまで同じ証拠として保存します。

「次にどこを直すか」「変更後に本当に改善したか」「そのrunを比較してよいか」を、 1つのダッシュボードと自己完結HTMLで判断するGo向け計測ツールです。

ISUCON13で保存した最新isutoolsレポート

3分で導入

Go 1.24以上が必要です。

go get github.com/ekusiadadus/isutools@latest

アプリのDB driver名とHTTP handlerを包みます。

db, err := sql.Open(isutools.SQLDriverName("mysql"), dsn)
if err != nil {
	log.Fatal(err)
}

log.Fatal(http.ListenAndServe(":8080", isutools.HTTP(mux)))

ベンチごとに同じ境界で保存します。

curl -fsS -X POST http://127.0.0.1:19191/reset
# benchmark command
curl -fsS -X POST 'http://127.0.0.1:19191/save?score=12345'

管理画面は既定で127.0.0.1:19191です。公開bindせずSSH転送してください。 DB pool、EXPLAIN、nginx、pprofまで含む手順は導入ガイドにあります。

何が分かるか

機能 シンプルな答え
Bottleneck Overview SQL、HTTP、DB pool、CPU、I/Oのうち、次に確認する場所
SQL / HTTP 遅い1回だけでなく、回数を含む累計コストとp95
Runs / Diff 変更前後のscore、失敗、total、count、averageの差
User Flow 同じ疑似sessionが実際に通ったページ遷移の上位20
Scenario Stories 明示scenarioごとの実測request列、session数、request数
Profiles / Host CPU実行なのか、DB・I/O・connection待ちなのか
Offline / Specialist tools 過去log、slow query外れ値、pprof/trace/PGOを同じrunへ安全に接続
Collector Health 欠損・打ち切り・設定不備があり、そのrunを比較すべきでないか

JSON、live dashboard、自己完結HTMLは同じrunから生成されます。推測で原因を断定せず、 候補と根拠を並べ、scoreとcorrectnessを最後の採用条件にします。 pprof解析をpublishしたrunでは、Runsのcurrent UIからコード位置カードの行解析結果CPU pprofフレームグラフへ直接移動できます。未解析時はProfilesへフォールバックします。

User Flow / Scenario Stories

isutools.HTTPはmiddlewareでCookieをHMAC疑似sessionへ変換し、登録済みroute templateと 一緒にアプリ内で集計します。生Cookieやsession tokenをproxy logへ書かず、nginx以外でも 同じUser Flow / Scenario Storiesを取得できます。

export ISUTOOLS_FLOW_LABELS=on
export ISUTOOLS_SESSION_COOKIE=SESSIONID
export ISUTOOLS_SESSION_HMAC_KEY='32-byte以上のgitへ入れない乱数'
export ISUTOOLS_SCENARIO=isucon13_official
export ISUTOOLS_FLOW_SOURCE=middleware
export ISUTOOLS_FLOW_VIZ=on
export ISUTOOLS_FUNNEL_CONFIG=/etc/isutools/funnels.yaml

handler単位のscenarioとrouter templateには、全公開ISUCONで使われたGorilla mux、Martini、 Goji v2、Echo v3/v4/v5、httprouter、chi v5に加えてGin adapterがあります。

echov4.Install(e)
e.GET("/checkout", checkout, echov4.Scenario("checkout"))

ginadapter.Install(r)
r.GET("/checkout", ginadapter.Scenario("checkout"), checkout)

chiv5.Install(r)
r.With(chiv5.Scenario("checkout")).Get("/checkout", checkout)

ISUTOOLS_FLOW_LABELS=offならflow label処理だけを停止し、ISUTOOLS=offなら全計測を停止します。 public clientが送ったX-Isutools-Session / X-Isutools-Scenarioは信用しません。 ISUTOOLS_FLOW_SOURCE=proxyは従来のtrusted response header方式、offはflow集計停止です。 dashboardは、定義済みstepのconversion/drop-off/retry/p95/4xx/5xxファネル、循環を保持する 有向User Flowグラフ、遷移ヒートマップを同じsnapshotへ保存します。run間diffではconversionと 遷移量の変化も比較できます。設定例と正確な意味はFlow Visualizationです。 全ISUCON回とproxyの一覧は互換性表、設定断片は proxy例を参照してください。

実測ストーリー

private-isu: score 0から541,650へ

同一環境で1日dogfoodingし、score 0の初期runから541,650、fail 0まで改善しました。 一般的な性能保証ではなく、この環境・workload・変更履歴に限定した結果です。

  1. 各変更をreset → benchmark → saveでrevisionとscoreへ結び付ける。
  2. SQL/HTTP累計時間から、繰り返し読む投稿・ユーザー経路を優先する。
  3. diffで消えたコストと新しい退行を確認し、correctnessを通った変更だけ残す。

run一覧には途中の失敗やrollbackも残ります。

private-isuの実測run一覧

画像の比較runではscore 140,914 → 541,650。diffでは、支配的だった2つの posts JOIN users queryの累計352.2s109.6sが消えた一方、新しく増えたqueryも赤で残るため、 scoreだけでなく「何を減らし、何が増えたか」を確認できます。

private-isuの実測SQL diff

改善手順と全記録

ISUCON13: 空だったflowを実測データへ

matsuu/wsl-isuconのISUCON13 Go初期実装へ疑似sessionとscenarioを導入しました。 ON/OFF smoke、header spoof防止、公式ベンチまで確認しました。画像のrunはpass=true、 score 11,928、proxy log 11,701行、User Flow / Scenario Stories各上位20件です。 HTTP互換性のreview修正後も、現行binaryでpass=true、score 11,983を再確認しています。

Scenario Storiesでは、例えば49 sessionが POST /api/icon → GET /api/tag → POST /api/livestream/reservationを通ったことが分かります。

ISUCON13 Scenario Stories実測

User Flowでは、reaction取得から投稿への遷移647回など、単独endpoint集計だけでは見えない 高頻度loopを確認できます。

ISUCON13 User Flow実測

これは観測経路の改善実証であり、性能改善の主張ではありません。10 block ABBAでも2%以下という 厳格な性能gateを通過できなかったため、その結果も含めて 実機検証記録に残しています。

2026-08-15にはaccess log、slow log / pt-query-digest、runtime profile / trace、pprof、PGOを 同じ実機で通し直しました。PGOはA-B-B-Aで改善せずrollbackしたため、機能成立と性能採用を分けた specialist-tool実測記録として公開しています。 さらに固定revisionからfresh private-isuを別volumeで構築し、pass=true, score=0の統合run、 781件のaccess log、2,032件のslow-query event、matching binaryによるpprofまで再確認しました。 score 0は性能成果ではなく、初期構成の機能成立だけを示します。

対応範囲

領域 対応
Database / KV MySQL / MariaDB / PostgreSQL / SQLite (database/sql)、Redis command collector
HTTP Go net/http、Gorilla mux、Martini、Goji v2、Echo v3/v4/v5、httprouter、Gin、chi v5
Proxy log nginx/OpenResty、Apache/OpenLiteSpeed、H2O、Envoy、Caddy、HAProxy、Traefik、lighttpd、Varnish、ATS、IIS、Squid
Runtime CPU、mutex、block、heap、allocs、goroutine、threadcreate、対応時goroutineleak、trace
Host Linux procfs / sysfs / cgroup v2、network、DB pool
Output Live dashboard、JSON、自己完結HTML、ファネル/Flowグラフ/ヒートマップ、run間diff、multi-host hub

主な設定

環境変数 用途
ISUTOOLS=off 全計測を停止
ISUTOOLS_ADDR 管理server。既定127.0.0.1:19191
ISUTOOLS_DATA_DIR snapshot / profileの永続保存先
ISUTOOLS_ACCESS_LOG proxy access log
ISUTOOLS_ACCESS_LOG_FORMAT 明示decoder (isutools-ltsv / isutools-json-v1 / caddy-json / traefik-json / iis-w3c)
ISUTOOLS_FLOW_LABELS User Flow / Scenario Storiesをon / off / auto
ISUTOOLS_FLOW_SOURCE flow集計元。既定automiddleware / proxy / off
ISUTOOLS_FLOW_VIZ ファネル/グラフ/ヒートマップをon / off / auto。既定auto
ISUTOOLS_FUNNEL_CONFIG bounded YAML/JSONファネル定義。未設定時もgraph-onlyで動作
ISUTOOLS_FLOW_MAX_NODES / ISUTOOLS_FLOW_MAX_EDGES 可視化上限。既定16/48、hard cap 32/128
ISUTOOLS_PPROF_SECONDS benchmark区間のCPU profile秒数
ISUTOOLS_TRACE_SECONDS 1〜30秒の短いexecution trace。既定off、managed profileと排他
ISUTOOLS_TIMELINE boundedなrun時系列をopt-in
CPU profileがないとき(cpu-busy

cpu-busyはCPU使用率が高いという意味ではありません。同じGoプロセスで、前のrunまたは 手動/pprof/profileがprocess-wide CPU profilerを使っているため、新しい採取を開始できない状態です。 別の採取が終わるのを待ち、POST /resetの応答で X-Isutools-CPU-Profile-State: capturingを確認してから、ベンチ、POST /saveisutools-pprof解析の順で1回だけ再計測してください。

全設定、API、endpoint、EXPLAIN権限、複数台構成はREADMEへ重複させず、次へ集約しています。

開発

go test ./...
go test -race ./...
go vet ./...

adapterは独立Go moduleです。CIではrootと全framework adapterを個別に検証します。

License

MIT

Documentation

Overview

Package isutools is an all-in-one profiling module for ISUCON-style tuning: wrap your SQL driver, download sorted reports.

Minimal integration (1 line):

db, _ := sqlx.Open(isutools.SQLDriverName("mysql"), dsn)

SQLDriverName also starts a small admin server (default 127.0.0.1:19191, override with ISUTOOLS_ADDR, disable with ISUTOOLS_ADDR=off) serving the report UI, snapshot export, and POST /reset — the control channel for bench scripts. It intentionally runs on its own port so the application router and reverse proxy never expose it.

ISUTOOLS=off disables everything: SQLDriverName then returns the raw driver name, so the application runs unproxied with zero overhead. The on/off decision is made once at startup; it is not dynamic.

Index

Constants

View Source
const (
	// ValidityValid means every collector contributed a complete interval.
	ValidityValid = runctl.ValidityValid
	// ValidityPartial means optional sections are missing but the interval is
	// usable.
	ValidityPartial = runctl.ValidityPartial
	// ValidityInvalid means the interval cannot be trusted and must not be
	// compared with other runs.
	ValidityInvalid = runctl.ValidityInvalid
)

Validity values, re-exported for the same reason as the types above.

View Source
const (
	EnvPeer      = "ISUTOOLS_PEER"
	EnvPeerToken = "ISUTOOLS_PEER_TOKEN"
)

Variables

View Source
var ErrInitializeBusy = runctl.ErrInitializeBusy

ErrInitializeBusy reports that SerializeInitialize could not acquire the process-wide initialize guard in time.

View Source
var ErrPeerListenerNotLoopback = errors.New("isutools: peer listener must use a literal loopback address")

Functions

func AddCount added in v0.7.0

func AddCount(name string, delta int64)

AddCount increments a named user counter by delta. No-op when off.

func Count added in v0.7.0

func Count(name string)

Count increments a named user counter by 1 (e.g. cache hit/miss). Shown in the report's Counters section, reset per generation. No-op when off.

func HTTP added in v0.2.0

func HTTP(next http.Handler) http.Handler

HTTP instruments inbound HTTP requests. When ISUTOOLS=off it returns next unchanged, avoiding request-path overhead. Path normalization rules can be injected via ISUTOOLS_PATH_RULES ("regex=replacement;..." — split on the last '=' of each pair).

func Handler

func Handler() http.Handler

Handler serves the report UI: GET / (dashboard with snapshot history), GET /snapshot.html (download), GET /json, GET /files/<name>, POST /reset, POST /collect, POST /finish, POST /abort, POST /save. /reset opens a measurement run and /finish or /save closes it; /collect stays a non-terminal flush of the buffered access log. Snapshot history persists to ISUTOOLS_DATA_DIR when set. The DB schema is inspected through the first DSN the application opened, using the raw driver so inspection queries never appear in the SQL statistics.

Every handler shares the process-wide measurement core, so two calls observe one run lifecycle and one process baseline rather than two unrelated ones.

func MeasureRedis added in v1.6.0

func MeasureRedis(command string, fn func() error) error

MeasureRedis runs fn and records its duration under the sanitized command. The original error is returned unchanged.

func ObserveRedis added in v1.6.0

func ObserveRedis(command string, duration time.Duration, err error)

ObserveRedis records one Redis-compatible command latency. Only the first command token is retained; keys, values, arguments, errors, and DSNs are discarded. It works with go-redis, redigo, rueidis, and historical clients.

func Off

func Off() bool

Off reports the immutable process-start decision for ISUTOOLS. Accepted hard-off spellings are off, 0, false, no, and disabled (case-insensitive).

func PeerHandler added in v1.5.0

func PeerHandler(options PeerOptions) (http.Handler, error)

PeerHandler exposes the singleton run controller to a loopback-only peer listener. It intentionally does not create a second measurement lifecycle.

func ProfileRegion added in v1.4.0

func ProfileRegion(ctx context.Context, region string, fn func(context.Context))

ProfileRegion is the region counterpart to ProfileScenario.

func ProfileScenario added in v1.4.0

func ProfileScenario(ctx context.Context, scenario string, fn func(context.Context))

ProfileScenario binds a safe logical scenario to CPU samples taken while fn runs. The value is never written directly into the pprof string table; the active capture stores it behind an opaque tuple ID. Invalid values and an inactive profiler fail open and still invoke fn.

func RegisterDBInspector added in v1.2.0

func RegisterDBInspector(targetID string, purpose sqlstats.Purpose, driverName, dsn string) error

RegisterDBInspector attaches a second credential to an existing target: a stats user for SHOW STATUS and performance_schema, or a least-privilege EXPLAIN user. The purpose is explicit and never falls back to the application credential, because an implicit downgrade to a credential holding DML rights would defeat the point of a restricted inspector.

For PurposeExplain it is the only registration path once a process has more than one target: with two databases registered, ISUTOOLS_EXPLAIN_DSN cannot say which one it belongs to, so it is refused and recorded in health rather than applied to a guess. A single-target process may use that variable (plus ISUTOOLS_EXPLAIN_DRIVER, default "mysql") instead of calling this function. Either way, EXPLAIN capture itself still requires ISUTOOLS_EXPLAIN=1.

It is re-exported from sqlstats so an application configures isutools through one package.

func RegisterDBTarget added in v1.2.0

func RegisterDBTarget(id, driverName, dsn string) error

RegisterDBTarget declares a logical database under a stable ID, so every collector that reports per-database numbers joins on the same key. Prefer it over an auto-derived ID whenever another API needs to name the target: derived IDs end in a hash and cannot be spelled out by hand.

It is re-exported from sqlstats so an application configures isutools through one package.

func RegisterSQL

func RegisterSQL(names ...string) error

RegisterSQL wraps the named drivers ("mysql", "pgx", ...) and registers measuring variants under "<name>:isutools". Prefer SQLDriverName, which also resolves the on/off decision. No-op when disabled.

func SQLDriverName

func SQLDriverName(name string) string

SQLDriverName registers a measuring wrapper for the named driver and returns the driver name the application should open. When disabled — or if registration fails — it returns the raw name unchanged, so measurement can never break application startup (fail-open). On success it also starts the admin server once.

func SerializeInitialize added in v1.2.0

func SerializeInitialize(ctx context.Context, fn func(context.Context) error) error

SerializeInitialize runs fn as the only initialize in this process.

ResetNow fixes the boundary but cannot stop a second initialize from rebuilding the database into a run that has already started; only serializing the whole handler can. Wrap the entire initialize body — schema rebuild, fixture load, and the ResetNow call at its end — in this function.

The context handed to fn carries a guard marker, so a run opened inside it is distinguishable from one opened outside. Waiting for the guard is abandoned after runctl.InitializeGuardBudget with ErrInitializeBusy: hanging forever on a stuck initialize would be worse than reporting it.

The guard is process-local by construction. It cannot serialize initialize across processes or hosts.

Unlike the rest of this package it keeps working when ISUTOOLS=off. An application that serializes its initialize through this function must not silently lose that serialization because a measurement flag flipped, and the cost of the guard is one channel send.

func ServePeer added in v1.5.0

func ServePeer(ctx context.Context, addr string, options PeerOptions) error

ServePeer serves PeerHandler on a literal loopback listener until ctx ends.

func UnwatchDBPool added in v1.2.0

func UnwatchDBPool(targetID string) error

UnwatchDBPool stops reporting a pool and takes a final farewell sample at the moment of the call, so a pool retired mid-run still reports the part of the run it was present for. Call it before closing the *sql.DB: it also drops this package's last reference to the handle.

func WatchDBPool added in v1.2.0

func WatchDBPool(targetID string, db *sql.DB) error

WatchDBPool reports one *sql.DB's connection pool under an already registered TargetID, so pool waits can be lined up with the SQL statistics of the same database.

The pool joins the NEXT run, not the one in flight: giving it a baseline taken after the run started would report a fraction of the interval as if it were the whole of it.

The ID must already exist in the registry, compared byte for byte. Watch never creates a target, because a typo that silently created a second one would split a single database across two rows of every report. Obtain the ID from RegisterDBTarget, or look it up with sqlstats.TargetIDForDSN.

Types

type GlobalConfig added in v1.5.0

type GlobalConfig struct {
	Off     bool
	Code    string
	Message string
}

GlobalConfig is the immutable process-wide enablement decision.

type PeerOptions added in v1.5.0

type PeerOptions struct {
	Token     string
	Role      string
	MaxBytes  int64
	AccessLog string
}

type StartResult added in v1.2.0

type StartResult = runctl.StartResult

StartResult is the immutable record of an opening boundary returned by ResetNow. It is an alias rather than a distinct type because the run lifecycle lives in an internal package that applications cannot import: without the alias a caller could read the value but never name its type.

func ResetNow added in v1.2.0

func ResetNow(ctx context.Context) (StartResult, error)

ResetNow opens a new measurement run immediately, preempting one already in flight so that the last initialize deterministically wins.

It is the initialize contract, and both halves of it matter:

  • Call it BEFORE sending the initialize response. The benchmarker starts loading the moment it sees the response, and a boundary taken after that silently drops the opening seconds of the run.
  • Treat a failure as a failure. If it returns an error, or a Validity of ValidityInvalid, the handler should answer 500 rather than measure a run it already knows is contaminated: an authoritative-looking wrong number is worse than a missing one.

Taking the boundary is not by itself enough. It serializes only the instant of the switch, so a second initialize rebuilding the database afterwards still pollutes this run. Wrap the whole handler in SerializeInitialize; a run opened with Reason "initialize" outside that guard is recorded as degraded health rather than silently trusted.

When measurement is disabled (ISUTOOLS=off) it reports a zero StartResult and no error, so an initialize handler needs no build tags or branches.

func ResetNowOpts added in v1.2.0

func ResetNowOpts(ctx context.Context, o runctl.StartRunOptions) (StartResult, error)

ResetNowOpts is ResetNow with explicit options, for callers that need a non-preempting start or a different trigger. Note that the zero options value does NOT preempt, so a start that collides with a run already in flight reports runctl.ErrRunActive instead of winning.

func ResetNowWithNonce added in v1.2.0

func ResetNowWithNonce(ctx context.Context, nonce string) (StartResult, error)

ResetNowWithNonce is ResetNow with a caller-supplied idempotency key. Repeating a call with the same nonce replays the original StartResult instead of opening a second run, which is what makes a retried initialize request safe.

type Validity added in v1.2.0

type Validity = runctl.Validity

Validity is a run's data-quality verdict, orthogonal to its state. A run can be perfectly finished and completely untrustworthy, so an initialize handler must inspect this and not only the error.

Directories

Path Synopsis
Package accesslog parses and aggregates explicitly configured proxy logs.
Package accesslog parses and aggregates explicitly configured proxy logs.
adapters
chiv5 module
echov4 module
Package advisor detects well-known ISUCON-critical settings that are NOT configured (prepared-statement round trips, nginx gzip/keepalive, kernel limits, GOMAXPROCS vs CPU quota, MySQL sizing) and reports them so the dashboard always shows what standard lever has not been pulled yet.
Package advisor detects well-known ISUCON-critical settings that are NOT configured (prepared-statement round trips, nginx gzip/keepalive, kernel limits, GOMAXPROCS vs CPU quota, MySQL sizing) and reports them so the dashboard always shows what standard lever has not been pulled yet.
Package buildinfo resolves the git revision and dirty state of the running binary: from Go's embedded VCS stamps when available, otherwise from ldflags-injected variables or environment variables.
Package buildinfo resolves the git revision and dirty state of the running binary: from Go's embedded VCS stamps when available, otherwise from ldflags-injected variables or environment variables.
cmd
isutools command
isutools-agent command
Command isutools-agent serves a standalone, loopback-only multi-host peer.
Command isutools-agent serves a standalone, loopback-only multi-host peer.
isutools-hub command
Command isutools-hub coordinates loopback peers reached through SSH tunnels.
Command isutools-hub coordinates loopback peers reached through SSH tunnels.
isutools-pgo command
isutools-pprof command
isutools-trajectory command
Command isutools-trajectory turns adapter-produced NDJSON into a portable interactive trajectory report.
Command isutools-trajectory turns adapter-produced NDJSON into a portable interactive trajectory report.
Package counters is the generic user-defined counter API: one line in application code (isutools.Count("cache_hit")) makes cache hit/miss and similar custom events visible per benchmark generation.
Package counters is the generic user-defined counter API: one line in application code (isutools.Count("cache_hit")) makes cache hit/miss and similar custom events visible per benchmark generation.
Package dbcap publishes credential-free, per-target database capabilities.
Package dbcap publishes credential-free, per-target database capabilities.
Package dbinspect captures the database schema state (tables, row counts, indexes) so every benchmark snapshot records what indexes existed BEFORE the run.
Package dbinspect captures the database schema state (tables, row counts, indexes) so every benchmark snapshot records what indexes existed BEFORE the run.
Package dbpool reports database/sql connection-pool statistics for one measurement run.
Package dbpool reports database/sql connection-pool statistics for one measurement run.
Package flowstats records bounded, pseudonymous user-flow transitions and explicit scenario journeys directly at the application middleware boundary.
Package flowstats records bounded, pseudonymous user-flow transitions and explicit scenario journeys directly at the application middleware boundary.
Package flowviz builds bounded, privacy-preserving funnel and transition visualizations from pseudonymous sessions and registered route templates.
Package flowviz builds bounded, privacy-preserving funnel and transition visualizations from pseudonymous sessions and registered route templates.
Package hoststats measures host resources over one measurement run and records the identity of the host the agent is actually looking at.
Package hoststats measures host resources over one measurement run and records the identity of the host the agent is actually looking at.
Package httpstats provides bounded, in-memory HTTP request measurements.
Package httpstats provides bounded, in-memory HTTP request measurements.
internal
accessinspect
Package accessinspect provides bounded, offline analysis for normalized access logs.
Package accessinspect provides bounded, offline analysis for normalized access logs.
agentconfig
Package agentconfig loads the standalone peer's secret-bearing files.
Package agentconfig loads the standalone peer's secret-bearing files.
agg
Package agg is the shared aggregation core: a concurrency-safe, bounded key→latency table with log2-bucket histograms for approximate percentiles.
Package agg is the shared aggregation core: a concurrency-safe, bounded key→latency table with log2-bucket histograms for approximate percentiles.
analysisartifact
Package analysisartifact defines the bounded, analyzer-neutral envelope used to attach post-run evidence to an immutable isutools snapshot.
Package analysisartifact defines the bounded, analyzer-neutral envelope used to attach post-run evidence to an immutable isutools snapshot.
generation
Package generation provides atomic collector generation swaps.
Package generation provides atomic collector generation swaps.
health
Package health records collector degradation without making failures fatal to the instrumented application.
Package health records collector degradation without making failures fatal to the instrumented application.
httpwriter
Package httpwriter preserves optional net/http response-writer capabilities across instrumentation wrappers without advertising capabilities that the underlying writer does not provide.
Package httpwriter preserves optional net/http response-writer capabilities across instrumentation wrappers without advertising capabilities that the underlying writer does not provide.
hubconfig
Package hubconfig loads the secret-bearing multi-host peer list.
Package hubconfig loads the secret-bearing multi-host peer list.
pgoworkflow
Package pgoworkflow builds evidence-bound, opt-in Go PGO candidates.
Package pgoworkflow builds evidence-bound, opt-in Go PGO candidates.
profilehandoff
Package profilehandoff generates deterministic, non-executing recipes for standard Go profiling tools.
Package profilehandoff generates deterministic, non-executing recipes for standard Go profiling tools.
profileowner
Package profileowner serializes process-wide runtime diagnostic facilities.
Package profileowner serializes process-wide runtime diagnostic facilities.
runctl
Package runctl owns the measurement run lifecycle: a single process-wide Controller decides when a run starts, when its boundaries are frozen, when its immutable snapshot may be published, and when it is aborted.
Package runctl owns the measurement run lifecycle: a single process-wide Controller decides when a run starts, when its boundaries are frozen, when its immutable snapshot may be published, and when it is aborted.
slowlog
Package slowlog parses bounded MySQL slow-query logs and can invoke a pinned pt-query-digest binary after a run.
Package slowlog parses bounded MySQL slow-query logs and can invoke a pinned pt-query-digest binary after a run.
sysinfo
Package sysinfo resolves static host facts (CPU model, core count, total memory, OS) shown in every report so measurements are always attributable to the hardware they ran on.
Package sysinfo resolves static host facts (CPU model, core count, total memory, OS) shown in every report so measurements are always attributable to the hardware they ran on.
timeline
Package timeline records bounded, run-aligned measurements and derives transparent correlation signals.
Package timeline records bounded, run-aligned measurements and derives transparent correlation signals.
tracecapture
Package tracecapture owns bounded, run-aligned runtime execution traces.
Package tracecapture owns bounded, run-aligned runtime execution traces.
Package multihost implements the evidence-bounded hub/peer protocol.
Package multihost implements the evidence-bounded hub/peer protocol.
Package netstats reports network observations for a benchmark run: a TCP socket summary observed at each boundary and per-interface throughput, packet, error and drop counters accumulated between them.
Package netstats reports network observations for a benchmark run: a TCP socket summary observed at each boundary and per-interface throughput, packet, error and drop counters accumulated between them.
Package procstats measures per-process CPU and RSS over a reset-to-snapshot interval using Linux procfs.
Package procstats measures per-process CPU and RSS over a reset-to-snapshot interval using Linux procfs.
Package queryplan runs EXPLAIN against the statements that dominated a benchmark run and publishes the resulting plans.
Package queryplan runs EXPLAIN against the statements that dominated a benchmark run and publishes the resulting plans.
Package redisstats records Redis-compatible command latency without ever retaining keys, values, arguments, or connection strings.
Package redisstats records Redis-compatible command latency without ever retaining keys, values, arguments, or connection strings.
Package sessionlabel provides a framework-neutral trusted edge adapter for pseudonymising an application session before nginx writes access logs.
Package sessionlabel provides a framework-neutral trusted edge adapter for pseudonymising an application session before nginx writes access logs.
Package sqlrows measures per-digest row efficiency — rows examined against rows sent — over a benchmark run, by sampling performance_schema.events_statements_summary_by_digest at both run boundaries and reporting the difference.
Package sqlrows measures per-digest row efficiency — rows examined against rows sent — over a benchmark run, by sampling performance_schema.events_statements_summary_by_digest at both run boundaries and reporting the difference.
Package sqlstats wraps database/sql drivers with a measuring proxy and aggregates every query into an in-memory table.
Package sqlstats wraps database/sql drivers with a measuring proxy and aggregates every query into an in-memory table.
Package trajectoryviz renders bounded, application-agnostic agent/job trajectories as a self-contained HTML animation.
Package trajectoryviz renders bounded, application-agnostic agent/job trajectories as a self-contained HTML animation.
Package web renders isutools measurements: a live report, a self-contained downloadable snapshot.html, machine-readable JSON, and a reset endpoint.
Package web renders isutools measurements: a live report, a self-contained downloadable snapshot.html, machine-readable JSON, and a reset endpoint.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL