Documentation
¶
Overview ¶
Package querybench is the docker-gated distributed-query benchmark harness that drives row vs vec mode comparisons across scenarios and cardinalities.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AllocationStats ¶
type AllocationStats struct {
MetricSource string `json:"metric_source"`
MallocsDelta uint64 `json:"mallocs_delta"`
TotalAllocDelta uint64 `json:"total_alloc_delta"`
MallocsPerQuery float64 `json:"mallocs_per_query"`
AllocBytesPerQuery float64 `json:"alloc_bytes_per_query"`
}
AllocationStats records allocation counters for the timed read phase.
type Config ¶
type Config struct {
ReportDir string
DockerImage string
CPULimit string
MemoryLimit string
Engine string
Matrix string
Mode string
Scenario Scenario
SpanDist string
Cardinality int
SpansPerTrace int
TraceIDBatch int
ShardNum int
DataNodes int
SpanBytes int
QueryMemoryMiB int
QueryWorkers int
QueryIterations int
ByIDIterations int
WarmupIterations int
Writers int
SmallExactRows int
FilterSelectivity float64
RunBench bool
InContainer bool
Profile bool
Merge bool
Soak bool
SoakHeapGrowthMaxPct int
}
Config drives a single test-binary invocation. The shell orchestrator (run-docker.sh -> orchestrate.sh) owns the (mode × scenario × cardinality) matrix; each invocation runs either:
- single-shot: one combo selected by Mode + Scenario + Cardinality, writes a shard JSON under ReportDir/shards/;
- merge: reads every shard, computes correctness, writes the unified report under ReportDir/.
Direct go test invocations without the right env vars surface a hard configuration error.
func LoadConfig ¶
func LoadConfig() Config
LoadConfig reads benchmark settings from environment variables.
func (Config) IsSingleShot ¶
IsSingleShot reports whether the caller selected a single (mode, scenario, cardinality) combo. Returns true when any of the three singular env vars is set so Validate can flag a partially-set selection as a hard error.
func (Config) ValidateSoak ¶
ValidateSoak enforces the DQB_SOAK contract: must run inside the container (DQB_IN_CONTAINER=1) and must target the trace engine.
type ConfigView ¶
type ConfigView struct {
ReportDir string `json:"report_dir"`
Engine string `json:"engine"`
Cardinalities []int `json:"cardinalities"`
Scenarios []Scenario `json:"scenarios"`
QueryWorkers int `json:"query_workers"`
QueryIterations int `json:"query_iterations"`
WarmupIterations int `json:"warmup_iterations"`
Writers int `json:"writers"`
Profile bool `json:"profile"`
}
ConfigView is a JSON-friendly copy of Config.
type Environment ¶
type Environment struct {
GoVersion string `json:"go_version"`
GOOS string `json:"goos"`
GOARCH string `json:"goarch"`
DockerImage string `json:"docker_image,omitempty"`
CPULimit string `json:"cpu_limit,omitempty"`
MemoryLimit string `json:"memory_limit,omitempty"`
Cgroup string `json:"cgroup,omitempty"`
ContainerID string `json:"container_id,omitempty"`
ResourceNote string `json:"resource_note,omitempty"`
NumCPU int `json:"num_cpu"`
}
Environment records reproducibility metadata.
type LatencyStats ¶
type LatencyStats struct {
P50Ms float64 `json:"p50_ms"`
P90Ms float64 `json:"p90_ms"`
P95Ms float64 `json:"p95_ms"`
P99Ms float64 `json:"p99_ms"`
MaxMs float64 `json:"max_ms"`
MeanMs float64 `json:"mean_ms"`
}
LatencyStats contains latency percentiles in milliseconds.
type Report ¶
type Report struct {
GeneratedAt time.Time `json:"generated_at"`
Environment Environment `json:"environment"`
Results []Result `json:"results"`
Config ConfigView `json:"config"`
}
Report is the machine-readable benchmark output.
type ResourceStats ¶
type ResourceStats struct {
MetricSource string `json:"metric_source"`
CPUSecondsDelta float64 `json:"cpu_seconds_delta,omitempty"`
RSSBytes uint64 `json:"rss_bytes,omitempty"`
HeapAllocBytes uint64 `json:"heap_alloc_bytes,omitempty"`
HeapSysBytes uint64 `json:"heap_sys_bytes,omitempty"`
NumGC uint32 `json:"num_gc,omitempty"`
}
ResourceStats records process-level resource deltas for the in-process cluster harness.
type Result ¶
type Result struct {
Profiles map[string]string `json:"profiles,omitempty"`
Scenario Scenario `json:"scenario"`
SampleDataPointText string `json:"sample_data_point_text,omitempty"`
SampleTraceText string `json:"sample_trace_text,omitempty"`
Error string `json:"error,omitempty"`
Engine string `json:"engine"`
SpanDist string `json:"span_dist,omitempty"`
Mode string `json:"mode"`
Correctness string `json:"correctness"`
Allocations AllocationStats `json:"allocations"`
Resources ResourceStats `json:"resources"`
Latency LatencyStats `json:"latency"`
PointsEach int `json:"points_each"`
QPS float64 `json:"qps"`
FilterSelectivity float64 `json:"filter_selectivity,omitempty"`
MeanSpansPerTrace float64 `json:"mean_spans_per_trace,omitempty"`
QueryWorkers int `json:"query_workers"`
QueryIterations int `json:"query_iterations"`
ResponseRows int `json:"response_rows"`
ResponseTraces int `json:"response_traces,omitempty"`
ResponseSpans int `json:"response_spans,omitempty"`
Entities int `json:"entities"`
TracesTotal int `json:"traces_total,omitempty"`
SpansPerTrace int `json:"spans_per_trace,omitempty"`
ServiceCardinality int `json:"service_cardinality,omitempty"`
EndpointCardinality int `json:"endpoint_cardinality,omitempty"`
TraceIDBatch int `json:"trace_id_batch,omitempty"`
ShardNum int `json:"shard_num,omitempty"`
DataNodes int `json:"data_nodes,omitempty"`
SpanBytes int `json:"span_bytes,omitempty"`
QueryMemoryMiB int `json:"query_memory_mib,omitempty"`
SegmentCount int `json:"segment_count,omitempty"`
VecQueryCountDelta int64 `json:"vec_query_count_delta,omitempty"`
ApproxResultHash uint64 `json:"approx_result_hash,omitempty"`
Cardinality int `json:"cardinality"`
}
Result records one mode/scenario/cardinality benchmark outcome.
type Scenario ¶
type Scenario string
Scenario identifies a distributed query benchmark shape.
const ( // ScenarioScanAll benchmarks the measure scan-all fixture. ScenarioScanAll Scenario = "scan_all" // ScenarioTopWithFilter benchmarks the measure Top-N-with-filter fixture. ScenarioTopWithFilter Scenario = "top_with_filter" // ScenarioTraceByID benchmarks distributed trace-id lookup. ScenarioTraceByID Scenario = "trace_by_id" // ScenarioTraceTagFilter benchmarks distributed ordered trace tag filters. ScenarioTraceTagFilter Scenario = "trace_tag_filter" )