Storage Benchmark Kit
SBM is SBK’s distributed measurement aggregator. SBK clients using GrpcLogger send SBP/gRPC latency records to SBM, which merges them into cluster-wide periodic and total statistics.
SBP 4.0 uses one ordered client-streaming RPC per SBK process and packed
primitive latency/count fields. GrpcLogger accumulates exact frequencies in
a primitive map, submits immutable batches through a bounded sender queue,
obeys gRPC flow control, and waits for the final stream acknowledgment during
shutdown. SBP 4.0 intentionally removes the earlier unary latency RPC and
protobuf map field, so SBK and SBM must use the same SBP major version.
SBM explicitly configures and advertises its inbound record limit
(maxRecordSizeMB, 16 MiB by default); SBK sends no more than the smaller
client/server limit.
SBM does not execute storage operations and does not launch remote processes. Use SBK for load generation and SBK-GEM for SSH orchestration.
flowchart LR
A[SBK client A / GrpcLogger] --> G[SBM gRPC service]
B[SBK client B / GrpcLogger] --> G
G --> Q[Concurrent ingestion queues]
Q --> R[Aggregate recorder]
R --> O[Prometheus, Local Web Console, or result output]
The default gRPC port is 9717. Container configuration also exposes the configured metrics port. Keep the gRPC service on a trusted benchmark network unless an external security layer is provided.
./gradlew :sbm:check
./gradlew :sbm:installDist
The launcher is generated under sbm/build/install/sbm/bin/sbm.
Display authoritative options:
./sbm/build/install/sbm/bin/sbm -help
Start with defaults:
./sbm/build/install/sbm/bin/sbm
Start the dependency-free SBK Local Web Console instead of Prometheus:
./sbm/build/install/sbm/bin/sbm -out SbmWebLogger -class file -action r
The Local Web Console uses plain HTTP and listens on all interfaces at port 9720 by default. Open
http://127.0.0.1:9720 locally or http://<sbm-host>:9720 remotely. It displays aggregate SBM connection,
workload, throughput, request-pressure, timeout, and latency-percentile data. It permits one active WebLogger benchmark,
keeps completed graphs while a browser remains connected, and exits after one minute with neither an active publisher
nor browser activity.
An existing idle web console is reused; an active SBK, SBM, or SBK-GEM web console owner causes SBM to exit with an
ownership error. The web console does not start SSH or enable TLS; expose it only on a trusted benchmark network.
See the WebLogger guide for web console options, lifecycle, browser leases, security, and a complete distributed example.
Then point one or more installed SBK clients at it:
./build/install/sbk/bin/sbk \
-class file -file /tmp/sbk.bin \
-writers 1 -size 4096 -seconds 30 \
-out GrpcLogger -sbm <sbm-host> -sbmport 9717
Use a hostname or address reachable from every SBK client. Firewalls, containers, and NAT must permit the callback path.
| Class | Responsibility |
|---|---|
io.sbm.main.SbmMain |
Executable entry point |
io.sbm.api.impl.Sbm |
Logger discovery, arguments, and benchmark construction |
SbmBenchmark |
gRPC server and aggregate-recorder lifecycle |
SbmGrpcService |
SBP registration, ordered stream validation, and latency-record endpoints |
SbmLatencyBenchmark |
Concurrent queue ingestion and window dispatch |
SbmTotalWindowLatencyPeriodicRecorder |
Periodic and total aggregate windows |
SbmPrometheusLogger |
Aggregated output and metrics |
SbmWebLogger |
Aggregated output and local live web console publication |
Protocol sources are under sbk-api/src/main/proto; generated Java/gRPC sources are build products.
The module’s Jib configuration builds an sbm image and declares its service/metrics ports. Repository monitoring assets are under grafana/ and container guidance under dockers/.