{
  "startedUtc": "2026-10-07T20:51:06Z",
  "command": "run-all",
  "commandLine": "~/gvb-work/v8-run/bin/GenericVectorBuilder.Bench.dll run-all --pipeline eshoponweb --queries golden --seed 801 --out ~/ForClaude/GenericVectorBuilder/bench-results --repo ~/ForClaude/GenericVectorBuilder",
  "machine": {
    "host": "bench-host",
    "cpu": "Intel(R) Xeon(R) CPU E5-1620 v3 @ 3.50GHz",
    "logicalCpus": 8,
    "ramGiB": 62.7,
    "gpu": "NVIDIA GeForce RTX 3060, 12288 MiB",
    "os": "Ubuntu 24.04.5 LTS, kernel 6.8.0-142-generic",
    "dotNet": ".NET 10.0.12",
    "loadAverage": "0.38 0.64 1.22"
  },
  "pipeline": "eshoponweb",
  "collection": "gvbbench_eshoponweb",
  "rows": 524,
  "dimension": 1024,
  "source": "Read READ-ONLY from GenericVectorBuilder.dbo.gvb_eshoponweb in ChunkId order, vectors as native SqlVector\u003Cfloat\u003E, 0.2 s.",
  "queries": "golden: 20 labelled questions from ~/ForClaude/evalkit/questions_golden.json, embedded with qwen3-emb-0.6b (cached in ~/gvb-data/bench-cache/golden-eshoponweb-68df42ca69efa079.json, no embedding calls)",
  "queryCount": 20,
  "queriesFileSha256": "e3a917ec8c5e687d2a2d6b83bc8ffd7eb901f0ffac8d8b277995b86898e9a712",
  "top": 10,
  "concurrency": [
    1,
    8
  ],
  "secondsPerLevel": 20,
  "truthSeconds": 0.0212327,
  "truthNdcg": 0.5181699774768911,
  "runSeed": 801,
  "targetOrder": [
    "oracle",
    "mongodb",
    "redis",
    "typesense",
    "clickhouse",
    "sql",
    "opensearch",
    "milvus",
    "sql-diskann",
    "duckdb",
    "qdrant-hnsw",
    "weaviate",
    "pgvector",
    "vespa",
    "elasticsearch",
    "mariadb",
    "chroma",
    "sqlitevec",
    "qdrant"
  ],
  "notes": [
    "Load average at start: 0.38 0.64 1.22 on 8 logical CPUs (1/5/15 min). It counts this benchmark\u0027s own earlier work and the engines it started, so it is recorded here and never judged; each timed pass is judged by the outside load machine control measures (conditions.passes).",
    "Order: targets ran one at a time in a random order from seed 801 (runSeed; --seed 801 repeats it, targetOrder lists it). Inside each target the timed passes also ran in a random order from the same seed and the target\u0027s name (passOrder): default@1 is one searcher for 20 s (every search\u0027s latency gives p50/p95/p99, the completed searches give QPS@1, its first answer to each query gives recall and nDCG), default@N is N searchers for 20 s (QPS@N), exact is the engine\u0027s exact mode, one searcher for 60 s cycling the queries.",
    "Preparation, untimed, before any timed pass: a rehearsal of every pass type at its own concurrency for 30 s each, through the same code the passes use.",
    "Warm-up and settle check, untimed, right before every timed pass: the pass\u0027s own search at the pass\u0027s own number of searchers for at least 15 s and at least 20 searches (at most 120 s), read in windows of at least 2 s and 100 searches; then a 3 s trial of the same pass. The trial\u0027s figure (p50 with one searcher, QPS with several) must lie within 10% of the warm-up\u0027s settled figure (the median of its last 3 windows, which must agree within 5%); if not, the warm-up is extended once (at least 30 s, until its windows agree, at most 120 s), where an extension\u0027s windows agree when its level test passes: the older and the newer half of its latest windows, 5 to 10 windows a half, each half read as the pass reads it (the p50 of all its searches with one searcher, its searches per second with several), agree within 5%, judged on the windows that stopped it (an extension whose cap runs out with fewer than 10 windows is judged by its last 3 instead); then a second trial is taken, which must lie inside the range of the newer half\u0027s windows or within 10% of the newer half\u0027s figure, and the warm-up runs again before the pass. After the pass its own figure is held against the settled figure, within 10%. In the level test, the second trial and the hold, two one-searcher p50s no more than 0.1 ms apart agree whatever their percentage (below what this box resolves at one searcher). Each target\u0027s notes give every check, and a pass that still disagrees, or whose own figure did not hold, flags its target as unsettled. With machine control on, the check for a quiet box is made when the warm-up is announced, before it starts (a wait between the warm-up and the timed pass let the engine go cold), so by the time the clock opens that check is as old as the warm-up and the trial (about 18 s, more after an extension); each pass\u0027s conditions record that lead (quietCheckLeadSeconds). Failed untimed searches are counted per target (warmupErrors) and are not in the timed error counts.",
    "Load rows/s counts only time inside each target\u0027s upsert calls: one writer, batches of 1000, rows already in memory, the collection dropped and created fresh first. Engines that build or finish their index after the writes do it in a separate timed index step (the load\u0027s index seconds), and the run waits for it before searching.",
    "Index proof: each engine\u0027s own report of its index (indexState) is read after the load and again after the last pass. A target whose index was not ready after the load was still measured and carries a WARNING; an engine that reports nothing counts as not ready.",
    "Search settings: each searched target records the settings its own index description states (searchSettings: the build parameters and the effort per query, such as m, ef_construction and ef_search), read after the load; consolidating never averages runs whose settings differ.",
    "Durability: each target\u0027s crash-safety setting as configured here (durability). Engines that do not force writes to disk on every commit load faster for that reason.",
    "Engine record: right after each engine was bound, its settings (engineSettings: the container\u0027s limits and what the engine itself reports, each entry saying how it was obtained), its image against the id pinned in deploy/bench/image-pins.json (image; another id ends that target with an error) and the size of its data folder (dataFolder: at the start, after any reset, and at the end) were recorded. In run-all, ClickHouse\u0027s system log tables are truncated before its load, and the reset is written into its dataFolder.",
    "Latency is client-side wall time around each search (network and driver included), every search of the default@1 window, one searcher, the queries cycled; a window with fewer than 200 searches, a p50 above 1.25 x its mean, or a mean above its p99 is flagged.",
    "QPS: N searchers back to back for 20 s per level; completed searches divided by the window\u0027s elapsed time.",
    "Recall@10: share of the exact top 10 (brute force in memory) that the engine returned. A hit whose exact similarity ties the 10th best (within 1e-5) also counts, because duplicate rows embed to identical vectors.",
    "Routes: a container engine (the benchmark\u0027s own SQL Server and Qdrant containers included) is reached at its container\u0027s own address on its Docker network, never through the published localhost port (docker-proxy); the native comparison targets (sql-native, qdrant-native) are native services reached directly over loopback. Each target\u0027s addresses and the connections the client held open after its passes are in its notes and in conditions.connections.",
    "RAM of compose engines, the benchmark\u0027s own SQL Server and Qdrant containers (sql, sql-diskann, qdrant, qdrant-hnsw) included, is docker stats of the engine\u0027s containers; for the native comparison targets (sql-native, qdrant-native) it is the whole native process, including every other database or collection it serves. Disk is the table\u0027s reserved pages (SQL), the collection folder (Qdrant), or for other engines what the load added to the engine\u0027s data folder (engines that keep data in memory until a snapshot show almost nothing); when the folder was smaller after the load than before it, no figure is given.",
    "Engines: run-all starts an engine that is down and stops it afterwards only if it was not running when the run began; an engine that was already running is left running.",
    "WARNING: the engine did not report a ready index after the load for: elasticsearch. They were measured anyway; their numbers may come from a scan or a half-built index (see each target\u0027s index state).",
    "Machine control on: governor performance on every CPU during the run (before: schedutil; at the end: performance; after putting it back: schedutil). CPU clock pinned for the run: turbo off (intel_pstate/no_turbo 0 -\u003E 1), so every CPU\u0027s clock is held at its ceiling of 3500 MHz whatever the engine runs; the uncore (L3 and memory) clock is held at 3000 MHz (min 3000 MHz, max 3000 MHz (MSR 0x620 = 0x1e1e); was min 1200 MHz, max 3000 MHz (MSR 0x620 = 0xc1e)) (before: turbo on (intel_pstate/no_turbo 0), ceiling 3600 MHz on CPUs 0-7, floor 1200 MHz on CPUs 0-7; while pinned: turbo off (intel_pstate/no_turbo 1), ceiling 3500 MHz on CPUs 0-7, floor 1200 MHz on CPUs 0-7; at the end: turbo off (intel_pstate/no_turbo 1), ceiling 3500 MHz on CPUs 0-7, floor 1200 MHz on CPUs 0-7; after putting it back: turbo on (intel_pstate/no_turbo 0), ceiling 3600 MHz on CPUs 0-7, floor 1200 MHz on CPUs 0-7). Uncore limit at the end: min 3000 MHz, max 3000 MHz (MSR 0x620 = 0x1e1e); after putting it back: min 1200 MHz, max 3000 MHz (MSR 0x620 = 0xc1e). Each target\u0027s clock note gives every pass\u0027s median MHz on the engine CPUs and on the client CPUs (the median of each CPU\u0027s median); a pass whose median on either is more than 100 bp (1%) off the pinned 3500 MHz, or that has no reading on one, is flagged (conditions.clock.rule). Figures from runs made with turbo on are not comparable with these in absolute terms. engine CPUs 2-3,6-7 (cores 2,6 and 3,7), client CPUs 0-1,4-5 (cores 0,4 and 1,5); the client process was pinned; each engine was pinned to the engine CPUs for its turn and put back after (conditions.engines); an engine run-all started (and stopped) was asked to be created on them, and its notes say whether the host did so or it was moved there after the start. Busy box: right before each pass\u0027s warm-up the run waits, up to 10 min, while processes outside the benchmark (everything but this client and the engine under test\u0027s cgroups) use more than 0.3 CPUs on average over the last 60 s or the last 5 s, neither window reaching back past the start of the target or of its engine (so the engine\u0027s own start-up is not outside work); if the box does not clear the pass runs anyway, flagged \u0027busy box\u0027, as is a pass whose own outside load is above the limit. Outside load counts busy = user \u002B nice \u002B system \u002B irq \u002B softirq \u002B steal (guest time is already in user); CONFIG_IRQ_TIME_ACCOUNTING is not set, so task and cgroup run time include the interrupt and softirq time that hit them and it is added; CONFIG_PARAVIRT_TIME_ACCOUNTING is not set, so steal is added (/boot/config-6.8.0-142-generic) (conditions.cpuAccounting); each pass also records this client\u0027s own CPU time per search and the engine\u0027s (conditions.passes[].clientCpuMsPerSearch and engineCpuMsPerSearch; how in conditions.engineCpu.rule). CPU clocks were sampled every 250 ms; each pass\u0027s min/median/max per CPU is in conditions.passes. CPU idle states, recorded and left as found: driver intel_idle, governor menu, intel_idle max_cstate 9; POLL on, C1 on, C1E on, C3 OFF on CPUs 0-7 (default disabled), C6 on (conditions.cpuIdle). How each target was reached: conditions.connections. Client build Release, .NET 10.0.12.",
    "duckdb is embedded: it ran inside the client process on the client CPUs 0-1,4-5, sharing them with the client.",
    "sqlitevec is embedded: it ran inside the client process on the client CPUs 0-1,4-5, sharing them with the client."
  ],
  "targets": [
    {
      "name": "oracle",
      "engine": "Oracle AI Database Free 23.26 (23ai line, VECTOR FLOAT32)",
      "index": "HNSW in-memory neighbor graph NEIGHBORS=16 EFCONSTRUCTION=128, EFSEARCH=100 per query, cosine; exact mode = FETCH EXACT FIRST (full scan); Oracle Free caps itself at 2 CPUs (cpu_count 2 in V$PARAMETER, edition FREE in V$INSTANCE, 8 host CPUs in V$OSSTAT NUM_CPUS; the 2 CPU thread limit is Oracle\u0027s documented Free edition limit)",
      "hosting": "compose",
      "searchSettings": {
        "EFCONSTRUCTION": "128",
        "EFSEARCH": "100",
        "NEIGHBORS": "16"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.3010564,
        "rowsPerSecond": 1740.537653409793,
        "countMatchSeconds": 0.0568835,
        "indexSeconds": 3.3309166,
        "indexNote": "HNSW graph holds 524 of 524 rows, change log waiting: 0 inserts and 0 deletes, USER_INDEXES status VALID, plan of the default search: VECTOR INDEX HNSW SCAN \u003E TABLE ACCESS BY INDEX ROWID, index used by 0 queries so far; Oracle Free caps itself at 2 CPUs (cpu_count 2 in V$PARAMETER, edition FREE in V$INSTANCE, 8 host CPUs in V$OSSTAT NUM_CPUS; the 2 CPU thread limit is Oracle\u0027s documented Free edition limit); graph rebuilt in 2.1 s"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 21198,
        "p50Ms": 0.9191,
        "p95Ms": 1.100615,
        "p99Ms": 1.7936,
        "qps": {
          "8": 2831.8183668715483,
          "1": 1059.8820297001864
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 23791,
        "exactP50Ms": 2.4529,
        "exactP95Ms": 2.9649,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "8": 0.6398,
          "1": 0.8739
        }
      },
      "ram": {
        "bytes": 2296733761,
        "text": "2.14 GiB (docker stats)"
      },
      "disk": {
        "bytes": 0,
        "text": "0 B added by this load (6.9 GiB (whole engine data folder), 6.9 GiB before)"
      },
      "passOrder": [
        "exact",
        "default@8",
        "default@1"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "HNSW graph holds 524 of 524 rows, change log waiting: 0 inserts and 0 deletes, USER_INDEXES status VALID, plan of the default search: VECTOR INDEX HNSW SCAN \u003E TABLE ACCESS BY INDEX ROWID, index used by 0 queries so far; Oracle Free caps itself at 2 CPUs (cpu_count 2 in V$PARAMETER, edition FREE in V$INSTANCE, 8 host CPUs in V$OSSTAT NUM_CPUS; the 2 CPU thread limit is Oracle\u0027s documented Free edition limit)"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "HNSW graph holds 524 of 524 rows, change log waiting: 0 inserts and 0 deletes, USER_INDEXES status VALID, plan of the default search: VECTOR INDEX HNSW SCAN \u003E TABLE ACCESS BY INDEX ROWID, index used by 411317 queries so far; Oracle Free caps itself at 2 CPUs (cpu_count 2 in V$PARAMETER, edition FREE in V$INSTANCE, 8 host CPUs in V$OSSTAT NUM_CPUS; the 2 CPU thread limit is Oracle\u0027s documented Free edition limit)"
        }
      },
      "durability": "By these settings a committed row should survive a crash or power loss. The sink uses a plain COMMIT and commit_logging, commit_wait and commit_write are unset in the database, so every commit waits for its redo to be written. Measured 2026-10-04: 50 separate client commits raised V$SYSSTAT \u0027redo synch writes\u0027 by 55 (the 50 commits plus the CREATE and DROP of the probe table), and the log writer and the datafile writer hold their files open with O_DSYNC (open flags 02110002, filesystemio_options none). The database runs NOARCHIVELOG (V$DATABASE.LOG_MODE), so redo serves crash recovery only and there is no point-in-time restore. The HNSW graph lives in the 768 MB vector memory pool (oracle-init/01-vector-memory.sh) and is not the durable copy; the table is. Not tested by cutting power; whether the disk\u0027s own write cache reaches the media was not checked. CPU: Oracle Free caps itself at 2 CPUs (cpu_count 2 in V$PARAMETER, edition FREE in V$INSTANCE, 8 host CPUs in V$OSSTAT NUM_CPUS; the 2 CPU thread limit is Oracle\u0027s documented Free edition limit).",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "6442450944",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "cpu_count",
          "value": "2",
          "how": "read: docker exec gvb-oracle sqlplus / as sysdba, V$PARAMETER and V$INSTANCE at the instance"
        },
        {
          "key": "sga_target",
          "value": "1610612736",
          "how": "read: docker exec gvb-oracle sqlplus / as sysdba, V$PARAMETER and V$INSTANCE at the instance"
        },
        {
          "key": "oracle_version",
          "value": "23.26.3.0.0",
          "how": "read: docker exec gvb-oracle sqlplus / as sysdba, V$PARAMETER and V$INSTANCE at the instance"
        }
      ],
      "image": {
        "ref": "gvenzl/oracle-free:23-slim-faststart",
        "id": "sha256:f5ff19033860d662c821cb04eb10483fa94f14f78eae252d054291ea07028093",
        "pinnedId": "sha256:f5ff19033860d662c821cb04eb10483fa94f14f78eae252d054291ea07028093",
        "lastTagTimeUtc": "2026-10-03T14:17:05.132133694Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/oracle",
        "bytesAtStart": 7407951739,
        "bytesAtEnd": 7407951739
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started oracle.compose.yaml with every container created on CPUs 2-3,6-7: gvb-oracle cpuset 2-3,6-7, gvb-oracle-seed cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [oracle-init/01-vector-memory.sh 6452e4e1953e; oracle.compose.yaml 2a7fd367012f]. This run created the engine from these files.",
        "Index after the load: ready, 524 of 524 indexed (HNSW graph holds 524 of 524 rows, change log waiting: 0 inserts and 0 deletes, USER_INDEXES status VALID, plan of the default search: VECTOR INDEX HNSW SCAN \u003E TABLE ACCESS BY INDEX ROWID, index used by 0 queries so far; Oracle Free caps itself at 2 CPUs (cpu_count 2 in V$PARAMETER, edition FREE in V$INSTANCE, 8 host CPUs in V$OSSTAT NUM_CPUS; the 2 CPU thread limit is Oracle\u0027s documented Free edition limit)). Durability: By these settings a committed row should survive a crash or power loss. The sink uses a plain COMMIT and commit_logging, commit_wait and commit_write are unset in the database, so every commit waits for its redo to be written. Measured 2026-10-04: 50 separate client commits raised V$SYSSTAT \u0027redo synch writes\u0027 by 55 (the 50 commits plus the CREATE and DROP of the probe table), and the log writer and the datafile writer hold their files open with O_DSYNC (open flags 02110002, filesystemio_options none). The database runs NOARCHIVELOG (V$DATABASE.LOG_MODE), so redo serves crash recovery only and there is no point-in-time restore. The HNSW graph lives in the 768 MB vector memory pool (oracle-init/01-vector-memory.sh) and is not the durable copy; the table is. Not tested by cutting power; whether the disk\u0027s own write cache reaches the media was not checked. CPU: Oracle Free caps itself at 2 CPUs (measured 2026-10-04: cpu_count 2 in V$PARAMETER, edition FREE in V$INSTANCE, 8 host CPUs in V$OSSTAT NUM_CPUS; the 2 CPU thread limit is Oracle\u0027s documented Free edition limit; this sink reads the live value when the index state is read)..",
        "Outside load when searching began: 0.14 CPUs on average over the last 6 s and 0.13 over the last few seconds (limit 0.3), a quiet box. The load average 0.70 0.70 1.23 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: exact 11,745 searches in 30.0 s, default@8 90,104 searches in 30.0 s, default@1 31,946 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. exact: warm-up 15.0 s and 5,949 searches (0 failed) at 1 searcher; p50 of the last windows 2.443, 2.431, 2.440 ms (windows of at least 2 s and 100 searches); trial of 1,191 searches in 3.0 s at 1 searcher: p50 2.439 ms against the settled p50 2.440 ms, 0% apart (limit 10%); the timed pass p50 2.453 ms, 1% from the settled p50 2.440 ms (limit 10% or 0.1 ms; 0.013 ms); default@8: warm-up 15.0 s and 45,447 searches (0 failed) at 8 searchers; QPS of the last windows 3,296, 2,514, 3,300 (windows of at least 2 s and 100 searches) (its last 3 windows differed by more than 5%); trial of 8,167 searches in 3.2 s at 8 searchers: 2,529 QPS against the settled 3,296 QPS, 30% apart (limit 10%), so the warm-up was EXTENDED once (30.5 s and 87,064 searches (0 failed) at 8 searchers; QPS of its older 7 windows 2,860 (windows 3,450, 2,398, 3,228, 2,720, 2,724, 3,115, 2,384) and of its newer 7 2,861 (windows 3,456, 2,442, 3,136, 2,798, 2,664, 3,130, 2,400), 0.1% apart (limit 5%) (windows of at least 2 s and 100 searches)); second trial of 9,488 searches in 3.0 s at 8 searchers: 3,161 QPS against the settled 2,861 QPS, 9% apart (limit 10%), inside its newer windows\u0027 range 2,400 to 3,456 QPS; settled after the extension; the timed pass 2,832 QPS, 1% from the settled 2,861 QPS (limit 10%); default@1: warm-up 15.0 s and 16,056 searches (0 failed) at 1 searcher; p50 of the last windows 0.907, 0.912, 0.932 ms (windows of at least 2 s and 100 searches); trial of 3,108 searches in 3.0 s at 1 searcher: p50 0.940 ms against the settled p50 0.912 ms, 3% apart (limit 10%); the timed pass p50 0.919 ms, 1% from the settled p50 0.912 ms (limit 10% or 0.1 ms; 0.007 ms).",
        "Pass exact after rehearsal: 2026-10-07T20:53:13.915Z to 2026-10-07T20:54:13.917Z (60.0 s), 23,791 searches, 0 failed, p50 2.453 ms, mean 2.520 ms, p99 4.059 ms, 396.5 QPS (1000/QPS 2.522 ms).",
        "Pass default@8 after exact: 2026-10-07T20:55:20.704Z to 2026-10-07T20:55:40.812Z (20.1 s), 56,940 searches, 0 failed, p50 1.609 ms, mean 2.822 ms, p99 3.517 ms, 2831.8 QPS (1000/QPS 0.353 ms).",
        "Pass default@1 after default@8: 2026-10-07T20:55:58.833Z to 2026-10-07T20:56:18.833Z (20.0 s), 21,198 searches, 0 failed, p50 0.919 ms, mean 0.942 ms, p99 1.794 ms, 1059.9 QPS (1000/QPS 0.944 ms).",
        "Passes in the order run: exact, default@8, default@1; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 352,064 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (HNSW graph holds 524 of 524 rows, change log waiting: 0 inserts and 0 deletes, USER_INDEXES status VALID, plan of the default search: VECTOR INDEX HNSW SCAN \u003E TABLE ACCESS BY INDEX ROWID, index used by 411317 queries so far; Oracle Free caps itself at 2 CPUs (cpu_count 2 in V$PARAMETER, edition FREE in V$INSTANCE, 8 host CPUs in V$OSSTAT NUM_CPUS; the 2 CPU thread limit is Oracle\u0027s documented Free edition limit)).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-oracle (b39d96d10dfb) on network gvb-oracle_default at container-ip:1521, not through docker-proxy localhost:1521. Open after the passes: container-ip:1521 x14 (this target), localhost:1433 x2 (not this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-oracle: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-oracle: 85 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): exact 3492/3492 MHz, average 3492.4/3492.3, performance, outside load 0.15 before the warm-up, 0.15 during, client CPU 0.924 ms per search, engine CPU 2.152 ms per search; default@8 3492/3492 MHz, average 2975.8/3180.9, performance, outside load 0.15 before the warm-up, 0.16 during, client CPU 0.640 ms per search, engine CPU 0.716 ms per search; default@1 3492/3492 MHz, average 3491.6/3492.2, performance, outside load 0.16 before the warm-up, 0.17 during, client CPU 0.874 ms per search, engine CPU 0.577 ms per search."
      ]
    },
    {
      "name": "mongodb",
      "engine": "MongoDB 8.0.32 Atlas Local (mongod \u002B mongot Vector Search)",
      "index": "vectorSearch index, HNSW maxEdges=16 numEdgeCandidates=128, float32 binData, cosine, numCandidates=20x hits (min 100); exact mode = $vectorSearch exact:true",
      "hosting": "compose",
      "searchSettings": {
        "maxEdges": "16",
        "numCandidates": "20x",
        "numEdgeCandidates": "128"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.1725198,
        "rowsPerSecond": 3037.3325264694254,
        "countMatchSeconds": 1.7680683,
        "indexSeconds": 10.2017491,
        "indexNote": "index status READY, queryable True; mongot holds 524 of 524 documents in 3 segment(s) (264 \u002B 246 \u002B 14 documents), 3 searched through the HNSW graph (Approximate); segment layout unchanged for 10.2 s over 11 readings; wait took 10.2 s"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 14171,
        "p50Ms": 1.382,
        "p95Ms": 1.60845,
        "p99Ms": 1.958119999999999,
        "qps": {
          "1": 708.5293676248148,
          "8": 2130.3711985092223
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 47789,
        "exactP50Ms": 1.2312,
        "exactP95Ms": 1.40686,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "1": 0.3077,
          "8": 0.2843
        }
      },
      "ram": {
        "bytes": 728550604,
        "text": "694.8 MiB (docker stats)"
      },
      "disk": {
        "text": "not measured: the folder was 51.98 KiB smaller after the load than before it, so the load\u0027s own growth cannot be told (1.38 GiB (whole engine data folder), 1.38 GiB before)"
      },
      "passOrder": [
        "default@1",
        "default@8",
        "exact"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "index status READY, queryable True; mongot holds 524 of 524 documents in 3 segment(s) (264 \u002B 246 \u002B 14 documents), 3 searched through the HNSW graph (Approximate)"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "index status READY, queryable True; mongot holds 524 of 524 documents in 3 segment(s) (264 \u002B 246 \u002B 14 documents), 3 searched through the HNSW graph (Approximate)"
        }
      },
      "durability": "Acknowledged writes are journaled before the acknowledgement. The sink sets no write concern, so the server default applies: getDefaultRWConcern gives w majority and the one-member replica set (--replSet gvbmongo in the image) has writeConcernMajorityJournalDefault true, with WiredTiger journaling on (journalCommitInterval 100 ms is only the interval for unacknowledged work). Measured 2026-10-04: 30 acknowledged single-document inserts raised WiredTiger \u0027log sync operations\u0027 by 30 and strace showed fdatasync on /data/db/journal/WiredTigerLog files. A crash loses no acknowledged write. mongot\u0027s search index is not part of that promise: it follows the collection asynchronously and is rebuilt from it.",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "8589934592",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        }
      ],
      "image": {
        "ref": "mongodb/mongodb-atlas-local:8.0.32",
        "id": "sha256:1985314b0ded756ba965e0f400d17406b7a89bec659d4763a490f42f006e4fbd",
        "pinnedId": "sha256:1985314b0ded756ba965e0f400d17406b7a89bec659d4763a490f42f006e4fbd",
        "lastTagTimeUtc": "2026-10-03T14:11:20.531944474Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/mongodb",
        "bytesAtStart": 1477232613,
        "bytesAtEnd": 1477179385
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started mongodb.compose.yaml with every container created on CPUs 2-3,6-7: gvb-mongodb cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [mongodb.compose.yaml 4ee6f6411f1f]. This run created the engine from these files.",
        "Index after the load: ready, 524 of 524 indexed (index status READY, queryable True; mongot holds 524 of 524 documents in 3 segment(s) (264 \u002B 246 \u002B 14 documents), 3 searched through the HNSW graph (Approximate)). Durability: Acknowledged writes are journaled before the acknowledgement. The sink sets no write concern, so the server default applies: getDefaultRWConcern gives w majority and the one-member replica set (--replSet gvbmongo in the image) has writeConcernMajorityJournalDefault true, with WiredTiger journaling on (journalCommitInterval 100 ms is only the interval for unacknowledged work). Measured 2026-10-04: 30 acknowledged single-document inserts raised WiredTiger \u0027log sync operations\u0027 by 30 and strace showed fdatasync on /data/db/journal/WiredTigerLog files. A crash loses no acknowledged write. mongot\u0027s search index is not part of that promise: it follows the collection asynchronously and is rebuilt from it..",
        "Outside load when searching began: 0.15 CPUs on average over the last 13 s and 0.15 over the last few seconds (limit 0.3), a quiet box. The load average 3.18 2.88 2.05 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@1 17,769 searches in 30.0 s, default@8 59,132 searches in 30.0 s, exact 23,494 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@1: warm-up 15.0 s and 10,658 searches (0 failed) at 1 searcher; p50 of the last windows 1.375, 1.376, 1.386 ms (windows of at least 2 s and 100 searches); trial of 2,110 searches in 3.0 s at 1 searcher: p50 1.392 ms against the settled p50 1.376 ms, 1% apart (limit 10%); the timed pass p50 1.382 ms, 0% from the settled p50 1.376 ms (limit 10% or 0.1 ms; 0.006 ms); default@8: warm-up 15.0 s and 31,815 searches (0 failed) at 8 searchers; QPS of the last windows 2,110, 2,124, 2,139 (windows of at least 2 s and 100 searches); trial of 6,398 searches in 3.0 s at 8 searchers: 2,131 QPS against the settled 2,124 QPS, 0% apart (limit 10%); the timed pass 2,130 QPS, 0% from the settled 2,124 QPS (limit 10%); exact: warm-up 15.0 s and 11,909 searches (0 failed) at 1 searcher; p50 of the last windows 1.242, 1.231, 1.232 ms (windows of at least 2 s and 100 searches); trial of 2,389 searches in 3.0 s at 1 searcher: p50 1.235 ms against the settled p50 1.232 ms, 0% apart (limit 10%); the timed pass p50 1.231 ms, 0% from the settled p50 1.232 ms (limit 10% or 0.1 ms; 0.001 ms).",
        "Pass default@1 after rehearsal: 2026-10-07T20:58:32.748Z to 2026-10-07T20:58:52.749Z (20.0 s), 14,171 searches, 0 failed, p50 1.382 ms, mean 1.409 ms, p99 1.958 ms, 708.5 QPS (1000/QPS 1.411 ms).",
        "Pass default@8 after default@1: 2026-10-07T20:59:10.769Z to 2026-10-07T20:59:30.772Z (20.0 s), 42,614 searches, 0 failed, p50 3.637 ms, mean 3.752 ms, p99 6.623 ms, 2130.4 QPS (1000/QPS 0.469 ms).",
        "Pass exact after default@8: 2026-10-07T20:59:48.787Z to 2026-10-07T21:00:48.788Z (60.0 s), 47,789 searches, 0 failed, p50 1.231 ms, mean 1.253 ms, p99 1.771 ms, 796.5 QPS (1000/QPS 1.256 ms).",
        "Passes in the order run: default@1, default@8, exact; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 165,674 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (index status READY, queryable True; mongot holds 524 of 524 documents in 3 segment(s) (264 \u002B 246 \u002B 14 documents), 3 searched through the HNSW graph (Approximate)).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-mongodb (2473496c702a) on network gvb-mongodb_default at container-ip:27017, not through docker-proxy localhost:27017. Open after the passes: container-ip:27017 x10 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-mongodb: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-mongodb: 214 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@1 3492/3492 MHz, average 3492.3/3492.3, performance, outside load 0.21 before the warm-up, 0.25 during, client CPU 0.308 ms per search, engine CPU 1.322 ms per search; default@8 3492/3492 MHz, average 3492.0/3492.2, performance, outside load 0.25 before the warm-up, 0.15 during, client CPU 0.284 ms per search, engine CPU 1.781 ms per search; exact 3492/3492 MHz, average 3492.3/3492.3, performance, outside load 0.19 before the warm-up, 0.24 during, client CPU 0.297 ms per search, engine CPU 1.162 ms per search."
      ]
    },
    {
      "name": "redis",
      "engine": "Redis 8.10.2 (query engine, HASH \u002B vector index)",
      "index": "HNSW TYPE FLOAT32 M=16 EF_CONSTRUCTION=128, EF_RUNTIME=100 per query, cosine; exact mode = FLAT index built on first exact query",
      "hosting": "compose",
      "searchSettings": {
        "EF_CONSTRUCTION": "128",
        "EF_RUNTIME": "100",
        "M": "16"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.0466457,
        "rowsPerSecond": 11233.618532897995,
        "countMatchSeconds": 1.0205892,
        "indexSeconds": 0.0251162,
        "indexNote": "HNSW index finished after 0.0 s of waiting: FT.INFO indexing 0, percent_indexed 1, hash_indexing_failures 0, flat_buffer_size 0, num_docs 524, hashes counted with SCAN under gvb_gvbbench_eshoponweb: 524"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 52356,
        "p50Ms": 0.3671,
        "p95Ms": 0.4781,
        "p99Ms": 0.7144699999999983,
        "qps": {
          "8": 5236.9692461509585,
          "1": 2617.7536134059706
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 162993,
        "exactP50Ms": 0.3676,
        "exactP95Ms": 0.4597399999999994,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "8": 0.3582,
          "1": 0.5442
        }
      },
      "ram": {
        "bytes": 265814016,
        "text": "253.5 MiB (docker stats)"
      },
      "disk": {
        "bytes": 2547239,
        "text": "2.43 MiB added by this load (96.65 MiB (whole engine data folder), 94.22 MiB before)"
      },
      "passOrder": [
        "default@8",
        "exact",
        "default@1"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "FT.INFO indexing 0, percent_indexed 1, hash_indexing_failures 0, flat_buffer_size 0, num_docs 524, hashes counted with SCAN under gvb_gvbbench_eshoponweb: 524"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "FT.INFO indexing 0, percent_indexed 1, hash_indexing_failures 0, flat_buffer_size 0, num_docs 524, hashes counted with SCAN under gvb_gvbbench_eshoponweb: 524"
        }
      },
      "durability": "save \u0022300 1\u0022 and appendonly no (redis.compose.yaml): an RDB snapshot is written every 5 minutes if at least one key changed, and on a clean stop; there is no append-only log, so a crash loses every write since the last snapshot (up to 5 minutes plus the time a snapshot takes; measured with docker kill, which is SIGKILL, right after a 2,000-vector load: none of the 2,000 hashes were there after the restart, and the restart loaded an older snapshot that still held keys of a collection that had been dropped since)",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "12884901888",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "search-workers",
          "value": "8",
          "how": "read: docker exec gvb-redis redis-cli CONFIG GET search-workers"
        },
        {
          "key": "save",
          "value": "300 1",
          "how": "read: docker exec gvb-redis redis-cli CONFIG GET save"
        },
        {
          "key": "appendonly",
          "value": "no",
          "how": "read: docker exec gvb-redis redis-cli CONFIG GET appendonly"
        },
        {
          "key": "maxmemory",
          "value": "0",
          "how": "read: docker exec gvb-redis redis-cli CONFIG GET maxmemory"
        }
      ],
      "image": {
        "ref": "redis:8.10.2",
        "id": "sha256:6f81e8915c60b065a524e6967e0ad1c639ba6efa84d669f823683ea04d9150ee",
        "pinnedId": "sha256:6f81e8915c60b065a524e6967e0ad1c639ba6efa84d669f823683ea04d9150ee",
        "lastTagTimeUtc": "2026-10-03T14:09:34.185138197Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/redis",
        "bytesAtStart": 98801504,
        "bytesAtEnd": 101348743
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started redis.compose.yaml with every container created on CPUs 2-3,6-7: gvb-redis cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [redis.compose.yaml 7448634e0d92]. This run created the engine from these files.",
        "Index after the load: ready, 524 of 524 indexed (FT.INFO indexing 0, percent_indexed 1, hash_indexing_failures 0, flat_buffer_size 0, num_docs 524, hashes counted with SCAN under gvb_gvbbench_eshoponweb: 524). Durability: save \u0022300 1\u0022 and appendonly no (redis.compose.yaml): an RDB snapshot is written every 5 minutes if at least one key changed, and on a clean stop; there is no append-only log, so a crash loses every write since the last snapshot (up to 5 minutes plus the time a snapshot takes; measured with docker kill, which is SIGKILL, right after a 2,000-vector load: none of the 2,000 hashes were there after the restart, and the restart loaded an older snapshot that still held keys of a collection that had been dropped since).",
        "Outside load when searching began: 0.22 CPUs on average over the last 2 s and 0.22 over the last few seconds (limit 0.3), a quiet box. The load average 2.10 2.85 2.34 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@8 155,188 searches in 30.0 s, exact 79,668 searches in 30.0 s, default@1 78,024 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@8: warm-up 15.0 s and 77,729 searches (0 failed) at 8 searchers; QPS of the last windows 5,222, 5,162, 5,294 (windows of at least 2 s and 100 searches); trial of 15,779 searches in 3.0 s at 8 searchers: 5,257 QPS against the settled 5,222 QPS, 1% apart (limit 10%); the timed pass 5,237 QPS, 0% from the settled 5,222 QPS (limit 10%); exact: warm-up 15.0 s and 40,812 searches (0 failed) at 1 searcher; p50 of the last windows 0.345, 0.376, 0.382 ms (windows of at least 2 s and 100 searches) (its last 3 windows differed by more than 5%); trial of 7,986 searches in 3.0 s at 1 searcher: p50 0.382 ms against the settled p50 0.376 ms, 2% apart (limit 10%), so the warm-up was EXTENDED once (30.0 s and 80,812 searches (0 failed) at 1 searcher; p50 of its older 6 windows 0.381 ms (windows 0.376, 0.387, 0.391, 0.386, 0.368, 0.367) and of its newer 6 0.372 ms (windows 0.382, 0.372, 0.388, 0.386, 0.347, 0.339), 2.4% apart (limit 5% or 0.1 ms; 0.009 ms) (windows of at least 2 s and 100 searches)); second trial of 8,281 searches in 3.0 s at 1 searcher: p50 0.362 ms against the settled p50 0.372 ms, 3% apart (limit 10%), inside its newer windows\u0027 range 0.339 to 0.388 ms; settled after the extension; the timed pass p50 0.368 ms, 1% from the settled p50 0.372 ms (limit 10% or 0.1 ms; 0.004 ms); default@1: warm-up 15.0 s and 38,938 searches (0 failed) at 1 searcher; p50 of the last windows 0.365, 0.392, 0.396 ms (windows of at least 2 s and 100 searches) (its last 3 windows differed by more than 5%); trial of 7,597 searches in 3.0 s at 1 searcher: p50 0.400 ms against the settled p50 0.392 ms, 2% apart (limit 10%), so the warm-up was EXTENDED once (30.0 s and 77,273 searches (0 failed) at 1 searcher; p50 of its older 6 windows 0.387 ms (windows 0.355, 0.384, 0.407, 0.394, 0.392, 0.379) and of its newer 6 0.379 ms (windows 0.364, 0.404, 0.373, 0.361, 0.365, 0.386), 2.1% apart (limit 5% or 0.1 ms; 0.008 ms) (windows of at least 2 s and 100 searches)); second trial of 7,694 searches in 3.0 s at 1 searcher: p50 0.383 ms against the settled p50 0.379 ms, 1% apart (limit 10%), inside its newer windows\u0027 range 0.361 to 0.404 ms; settled after the extension; the timed pass p50 0.367 ms, 3% from the settled p50 0.379 ms (limit 10% or 0.1 ms; 0.012 ms).",
        "Pass default@8 after rehearsal: 2026-10-07T21:04:01.959Z to 2026-10-07T21:04:21.960Z (20.0 s), 104,747 searches, 0 failed, p50 1.506 ms, mean 1.526 ms, p99 2.171 ms, 5237.0 QPS (1000/QPS 0.191 ms).",
        "Pass exact after default@8: 2026-10-07T21:05:28.012Z to 2026-10-07T21:06:28.012Z (60.0 s), 162,993 searches, 0 failed, p50 0.368 ms, mean 0.366 ms, p99 0.720 ms, 2716.5 QPS (1000/QPS 0.368 ms).",
        "Pass default@1 after exact: 2026-10-07T21:07:34.180Z to 2026-10-07T21:07:54.180Z (20.0 s), 52,356 searches, 0 failed, p50 0.367 ms, mean 0.380 ms, p99 0.714 ms, 2617.8 QPS (1000/QPS 0.382 ms).",
        "Passes in the order run: default@8, exact, default@1; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 756,339 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (FT.INFO indexing 0, percent_indexed 1, hash_indexing_failures 0, flat_buffer_size 0, num_docs 524, hashes counted with SCAN under gvb_gvbbench_eshoponweb: 524).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-redis (27d5986e11b5) on network gvb-redis_default at container-ip:6379, not through docker-proxy localhost:6379. Open after the passes: container-ip:6379 x1 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-redis: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-redis: 16 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@8 3492/3492 MHz, average 3492.2/3492.0, performance, outside load 0.13 before the warm-up, 0.12 during, client CPU 0.358 ms per search, engine CPU 0.232 ms per search; exact 3492/3492 MHz, average 3492.3/3492.0, performance, outside load 0.12 before the warm-up, 0.16 during, client CPU 0.557 ms per search, engine CPU 0.238 ms per search; default@1 3492/3492 MHz, average 3492.1/3492.0, performance, outside load 0.14 before the warm-up, 0.13 during, client CPU 0.544 ms per search, engine CPU 0.258 ms per search."
      ]
    },
    {
      "name": "typesense",
      "engine": "Typesense 30.2 (vector search)",
      "index": "HNSW float32 (hnswlib), m=16, ef_construction=128, cosine; search k=top, ef=100; exact mode = filter ordinal:\u003E=0 with flat_search_cutoff; index held in memory",
      "hosting": "compose",
      "searchSettings": {
        "ef": "100",
        "ef_construction": "128",
        "k": "top",
        "m": "16"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.5898995,
        "rowsPerSecond": 888.2869031080718,
        "countMatchSeconds": 0.0020825,
        "indexSeconds": 0.0199163,
        "indexNote": "nothing to build, Typesense inserts into the HNSW graph while writing; ready after 0.0 s: HNSW graph returns 524 of 524 vectors, no writes queued: num_documents 524, pending_write_batches 0, health ok, unfiltered vector query with k above the count returned 524; the graph is built in memory during each write, so there is no later build step"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 4717,
        "p50Ms": 4.1765,
        "p95Ms": 4.570819999999999,
        "p99Ms": 5.786828,
        "qps": {
          "8": 572.7028445385686,
          "1": 235.8028347169999
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 10524,
        "exactP50Ms": 5.6401,
        "exactP95Ms": 6.0307900000000005,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "8": 0.5945,
          "1": 0.5322
        }
      },
      "ram": {
        "bytes": 122263961,
        "text": "116.6 MiB (docker stats)"
      },
      "disk": {
        "bytes": 1945481,
        "text": "1.86 MiB added by this load (287.64 MiB (whole engine data folder), 285.79 MiB before)"
      },
      "passOrder": [
        "exact",
        "default@8",
        "default@1"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "HNSW graph returns 524 of 524 vectors, no writes queued: num_documents 524, pending_write_batches 0, health ok, unfiltered vector query with k above the count returned 524; the graph is built in memory during each write, so there is no later build step"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "HNSW graph returns 524 of 524 vectors, no writes queued: num_documents 524, pending_write_batches 0, health ok, unfiltered vector query with k above the count returned 524; the graph is built in memory during each write, so there is no later build step"
        }
      },
      "durability": "Every acknowledged write is appended to Typesense\u0027s raft log and fsynced before the answer: braft raft_sync=true with raft_sync_policy=0 (sync immediately), read from the running container\u0027s brpc /flags page on 2026-10-04. A restart replays the log from the last snapshot (typesense.compose.yaml sets TYPESENSE_SNAPSHOT_INTERVAL_SECONDS=300) and rebuilds the in-memory HNSW graph, so by those settings a crash loses no acknowledged write, but the restart is slow after a big load. This is read from the settings, not shown by pulling power. One node and no replicas, so a lost disk loses the data.",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "6442450944",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        }
      ],
      "image": {
        "ref": "typesense/typesense:30.2",
        "id": "sha256:610f2d34b1f93d00762869da2c67736775e5798d19a2c8b91b014b8a0cc1e110",
        "pinnedId": "sha256:610f2d34b1f93d00762869da2c67736775e5798d19a2c8b91b014b8a0cc1e110",
        "lastTagTimeUtc": "2026-10-03T14:12:37.929033132Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/typesense",
        "bytesAtStart": 741572783,
        "bytesAtEnd": 301613799
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started typesense.compose.yaml with every container created on CPUs 2-3,6-7: gvb-typesense cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [typesense.compose.yaml 96a165f62566]. This run created the engine from these files.",
        "Index after the load: ready, 524 of 524 indexed (HNSW graph returns 524 of 524 vectors, no writes queued: num_documents 524, pending_write_batches 0, health ok, unfiltered vector query with k above the count returned 524; the graph is built in memory during each write, so there is no later build step). Durability: Every acknowledged write is appended to Typesense\u0027s raft log and fsynced before the answer: braft raft_sync=true with raft_sync_policy=0 (sync immediately), read from the running container\u0027s brpc /flags page on 2026-10-04. A restart replays the log from the last snapshot (typesense.compose.yaml sets TYPESENSE_SNAPSHOT_INTERVAL_SECONDS=300) and rebuilds the in-memory HNSW graph, so by those settings a crash loses no acknowledged write, but the restart is slow after a big load. This is read from the settings, not shown by pulling power. One node and no replicas, so a lost disk loses the data..",
        "Outside load when searching began: 0.16 CPUs on average over the last 7 s and 0.17 over the last few seconds (limit 0.3), a quiet box. The load average 3.06 2.74 2.45 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: exact 5,257 searches in 30.0 s, default@8 17,188 searches in 30.0 s, default@1 7,080 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. exact: warm-up 15.0 s and 2,633 searches (0 failed) at 1 searcher; p50 of the last windows 5.656, 5.635, 5.639 ms (windows of at least 2 s and 100 searches); trial of 526 searches in 3.0 s at 1 searcher: p50 5.645 ms against the settled p50 5.639 ms, 0% apart (limit 10%); the timed pass p50 5.640 ms, 0% from the settled p50 5.639 ms (limit 10% or 0.1 ms; 0.001 ms); default@8: warm-up 15.0 s and 8,560 searches (0 failed) at 8 searchers; QPS of the last windows 573, 571, 572 (windows of at least 2 s and 100 searches); trial of 1,717 searches in 3.0 s at 8 searchers: 571 QPS against the settled 572 QPS, 0% apart (limit 10%); the timed pass 573 QPS, 0% from the settled 572 QPS (limit 10%); default@1: warm-up 15.0 s and 3,551 searches (0 failed) at 1 searcher; p50 of the last windows 4.185, 4.160, 4.175 ms (windows of at least 2 s and 100 searches); trial of 705 searches in 3.0 s at 1 searcher: p50 4.169 ms against the settled p50 4.175 ms, 0% apart (limit 10%); the timed pass p50 4.177 ms, 0% from the settled p50 4.175 ms (limit 10% or 0.1 ms; 0.002 ms).",
        "Pass exact after rehearsal: 2026-10-07T21:09:57.783Z to 2026-10-07T21:10:57.787Z (60.0 s), 10,524 searches, 0 failed, p50 5.640 ms, mean 5.700 ms, p99 6.610 ms, 175.4 QPS (1000/QPS 5.702 ms).",
        "Pass default@8 after exact: 2026-10-07T21:11:15.808Z to 2026-10-07T21:11:35.818Z (20.0 s), 11,460 searches, 0 failed, p50 13.460 ms, mean 13.964 ms, p99 26.026 ms, 572.7 QPS (1000/QPS 1.746 ms).",
        "Pass default@1 after default@8: 2026-10-07T21:11:53.827Z to 2026-10-07T21:12:13.831Z (20.0 s), 4,717 searches, 0 failed, p50 4.177 ms, mean 4.239 ms, p99 5.787 ms, 235.8 QPS (1000/QPS 4.241 ms).",
        "Passes in the order run: exact, default@8, default@1; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 47,217 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (HNSW graph returns 524 of 524 vectors, no writes queued: num_documents 524, pending_write_batches 0, health ok, unfiltered vector query with k above the count returned 524; the graph is built in memory during each write, so there is no later build step).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-typesense (de8745b25e16) on network engines_default at container-ip:8108, not through docker-proxy localhost:8108. Open after the passes: container-ip:8108 x8 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-typesense: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-typesense: 303 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): exact 3492/3492 MHz, average 3493.0/3493.4, performance, outside load 0.07 before the warm-up, 0.15 during, client CPU 0.540 ms per search, engine CPU 5.333 ms per search; default@8 3492/3492 MHz, average 3492.0/3492.5, performance, outside load 0.15 before the warm-up, -0.03 during, client CPU 0.595 ms per search, engine CPU 6.733 ms per search; default@1 3492/3492 MHz, average 3492.5/3492.5, performance, outside load 0.04 before the warm-up, 0.17 during, client CPU 0.532 ms per search, engine CPU 3.875 ms per search."
      ]
    },
    {
      "name": "clickhouse",
      "engine": "ClickHouse 26.3.39.7 (MergeTree \u002B vector_similarity index; image-default system logging, each log table with a TTL of 1 hour)",
      "index": "vector_similarity HNSW cosineDistance, quantization bf16, M=16 ef_construction=128, hnsw_candidate_list_size_for_search=256, rescoring off; exact mode = full scan with skip indexes off",
      "hosting": "compose",
      "searchSettings": {
        "M": "16",
        "ef_construction": "128",
        "hnsw_candidate_list_size_for_search": "256"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.166978,
        "rowsPerSecond": 3138.137958293907,
        "countMatchSeconds": 0.0026977,
        "indexSeconds": 6.1815417,
        "indexNote": "1 data part(s), index files on 1 of them, 524 of 524 live rows in indexed parts; 0 merge(s) running, 0 unfinished mutation(s); plan of the default search uses the Skip index vec_idx on 1 of 1 parts; wait took 6.2 s"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 4002,
        "p50Ms": 4.839700000000001,
        "p95Ms": 5.670165,
        "p99Ms": 7.5495659999999996,
        "qps": {
          "8": 336.45273919969844,
          "1": 200.08712439354525
        },
        "recall": 0.9949999999999999,
        "recallHits": 199,
        "ndcg": 0.5276466892383727,
        "errors": 0,
        "exactQueries": 8736,
        "exactP50Ms": 6.63,
        "exactP95Ms": 9.283225,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "8": 1.0634,
          "1": 0.8546
        }
      },
      "ram": {
        "bytes": 1022571315,
        "text": "975.2 MiB (docker stats)"
      },
      "disk": {
        "bytes": 5685109857,
        "text": "5.29 GiB added by this load (5.31 GiB (whole engine data folder), 14.01 MiB before)"
      },
      "passOrder": [
        "default@8",
        "default@1",
        "exact"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "1 data part(s), index files on 1 of them, 524 of 524 live rows in indexed parts; 0 merge(s) running, 0 unfinished mutation(s); plan of the default search uses the Skip index vec_idx on 1 of 1 parts"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "1 data part(s), index files on 1 of them, 524 of 524 live rows in indexed parts; 0 merge(s) running, 0 unfinished mutation(s); plan of the default search uses the Skip index vec_idx on 1 of 1 parts"
        }
      },
      "durability": "Acknowledged inserts are not fsynced. The sink creates plain MergeTree tables, so the MergeTree settings are the defaults: fsync_after_insert 0 and fsync_part_directory 0 (system.merge_tree_settings), and async_insert 1 with wait_for_async_insert 1 is the server default for the gvb login (system.settings), so an insert is acknowledged once its part is written, not once it is on disk. Measured 2026-10-04 with strace over 30 acknowledged single-row inserts (30 Ok rows in system.asynchronous_insert_log): zero fsync, fdatasync or sync_file_range calls, while the control, a table created with fsync_after_insert=1, made 61 fdatasync calls for 5 inserts. A host power loss or kernel crash can lose acknowledged rows that are still in the OS page cache; a ClickHouse process crash alone should not (inferred, not tested).",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "8589934592",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "max_threads",
          "value": "\\\u0027auto(4)\\\u0027",
          "how": "read: ClickHouse system.settings, name max_threads, over HTTP"
        }
      ],
      "image": {
        "ref": "clickhouse/clickhouse-server:26.3.39.7",
        "id": "sha256:3a91276f066905da0edbbd622d3fc2a2df632c87ea7fe32ef4e74fdf8c9567b0",
        "pinnedId": "sha256:3a91276f066905da0edbbd622d3fc2a2df632c87ea7fe32ef4e74fdf8c9567b0",
        "lastTagTimeUtc": "2026-10-03T14:12:01.743437616Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/clickhouse",
        "bytesAtStart": 4559215474,
        "reset": "truncated 9 MergeTree log tables in database system (asynchronous_insert_log, asynchronous_metric_log, background_schedule_pool_log, metric_log, part_log, processors_profile_log, query_log, text_log, trace_log); ClickHouse\u0027s own active bytes of those tables 2.09 GiB before and 0 B after; data folder 4.25 GiB before and 14.01 MiB after (the folder was steady); not truncated, name does not end in _log: none",
        "bytesAfterReset": 14691380,
        "bytesAtEnd": 5699801237
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started clickhouse.compose.yaml with every container created on CPUs 2-3,6-7: gvb-clickhouse cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [clickhouse-config/gvb-system-logs.xml 02cc53f0f171; clickhouse.compose.yaml 560e0ae487c6]. This run created the engine from these files.",
        "Index after the load: ready, 524 of 524 indexed (1 data part(s), index files on 1 of them, 524 of 524 live rows in indexed parts; 0 merge(s) running, 0 unfinished mutation(s); plan of the default search uses the Skip index vec_idx on 1 of 1 parts). Durability: Acknowledged inserts are not fsynced. The sink creates plain MergeTree tables, so the MergeTree settings are the defaults: fsync_after_insert 0 and fsync_part_directory 0 (system.merge_tree_settings), and async_insert 1 with wait_for_async_insert 1 is the server default for the gvb login (system.settings), so an insert is acknowledged once its part is written, not once it is on disk. Measured 2026-10-04 with strace over 30 acknowledged single-row inserts (30 Ok rows in system.asynchronous_insert_log): zero fsync, fdatasync or sync_file_range calls, while the control, a table created with fsync_after_insert=1, made 61 fdatasync calls for 5 inserts. A host power loss or kernel crash can lose acknowledged rows that are still in the OS page cache; a ClickHouse process crash alone should not (inferred, not tested)..",
        "Outside load when searching began: 0.16 CPUs on average over the last 28 s and 0.14 over the last few seconds (limit 0.3), a quiet box. The load average 5.54 3.71 2.85 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@8 13,117 searches in 30.0 s, default@1 5,823 searches in 30.0 s, exact 4,373 searches in 30.0 s.",
        "WARNING: latency had NOT settled when timing began for default@8 (each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it). default@8: warm-up 15.0 s and 6,523 searches (0 failed) at 8 searchers; QPS of the last windows 453, 468, 442 (windows of at least 2 s and 100 searches) (its last 3 windows differed by more than 5%); trial of 1,267 searches in 3.0 s at 8 searchers: 421 QPS against the settled 453 QPS, 8% apart (limit 10%), so the warm-up was EXTENDED once (50.1 s and 20,780 searches (0 failed) at 8 searchers; QPS of its older 10 windows 408 (windows 472, 462, 437, 371, 441, 464, 414, 410, 340, 266) and of its newer 10 418 (windows 295, 431, 418, 408, 444, 472, 407, 408, 432, 470), 2.6% apart (limit 5%) (windows of at least 2 s and 100 searches)); second trial of 1,222 searches in 3.0 s at 8 searchers: 404 QPS against the settled 418 QPS, 3% apart (limit 10%), inside its newer windows\u0027 range 295 to 472 QPS; settled after the extension; the timed pass 336 QPS, 24% from the settled 418 QPS (limit 10%), NOT HELD: the engine was still changing when it was timed; default@1: warm-up 15.0 s and 2,629 searches (0 failed) at 1 searcher; p50 of the last windows 5.090, 5.332, 4.942 ms (windows of at least 2 s and 100 searches) (its last 3 windows differed by more than 5%); trial of 519 searches in 3.0 s at 1 searcher: p50 5.081 ms against the settled p50 5.090 ms, 0% apart (limit 10%), so the warm-up was EXTENDED once (30.0 s and 5,755 searches (0 failed) at 1 searcher; p50 of its older 6 windows 4.954 ms (windows 5.366, 5.484, 5.357, 4.829, 4.829, 4.833) and of its newer 6 4.847 ms (windows 4.865, 4.832, 4.843, 4.842, 4.856, 4.840), 2.2% apart (limit 5% or 0.1 ms; 0.106 ms) (windows of at least 2 s and 100 searches)); second trial of 559 searches in 3.0 s at 1 searcher: p50 5.137 ms against the settled p50 4.847 ms, 6% apart (limit 10%), outside its newer windows\u0027 range 4.832 to 4.865 ms; settled after the extension; the timed pass p50 4.840 ms, 0% from the settled p50 4.847 ms (limit 10% or 0.1 ms; 0.008 ms); exact: warm-up 15.0 s and 2,155 searches (0 failed) at 1 searcher; p50 of the last windows 6.947, 6.647, 6.588 ms (windows of at least 2 s and 100 searches) (its last 3 windows differed by more than 5%); trial of 423 searches in 3.0 s at 1 searcher: p50 6.698 ms against the settled p50 6.647 ms, 1% apart (limit 10%), so the warm-up was EXTENDED once (30.0 s and 4,405 searches (0 failed) at 1 searcher; p50 of its older 6 windows 6.629 ms (windows 6.597, 6.601, 6.706, 6.648, 6.614, 6.629) and of its newer 6 6.631 ms (windows 6.650, 6.572, 6.606, 6.609, 6.724, 6.645), 0.0% apart (limit 5% or 0.1 ms; 0.002 ms) (windows of at least 2 s and 100 searches)); second trial of 442 searches in 3.0 s at 1 searcher: p50 6.621 ms against the settled p50 6.631 ms, 0% apart (limit 10%), inside its newer windows\u0027 range 6.572 to 6.724 ms; settled after the extension; the timed pass p50 6.630 ms, 0% from the settled p50 6.631 ms (limit 10% or 0.1 ms; 0.001 ms). Its numbers may still include warm-up or a change the engine was still going through; rerun before quoting them.",
        "Pass default@8 after rehearsal: 2026-10-07T21:15:46.926Z to 2026-10-07T21:16:06.941Z (20.0 s), 6,734 searches, 0 failed, p50 22.993 ms, mean 23.769 ms, p99 45.121 ms, 336.5 QPS (1000/QPS 2.972 ms).",
        "Pass default@1 after default@8: 2026-10-07T21:17:12.956Z to 2026-10-07T21:17:32.957Z (20.0 s), 4,002 searches, 0 failed, p50 4.840 ms, mean 4.994 ms, p99 7.550 ms, 200.1 QPS (1000/QPS 4.998 ms).",
        "Pass exact after default@1: 2026-10-07T21:18:38.981Z to 2026-10-07T21:19:38.984Z (60.0 s), 8,736 searches, 0 failed, p50 6.630 ms, mean 6.864 ms, p99 10.318 ms, 145.6 QPS (1000/QPS 6.868 ms).",
        "Passes in the order run: default@8, default@1, exact; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 81,558 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (1 data part(s), index files on 1 of them, 524 of 524 live rows in indexed parts; 0 merge(s) running, 0 unfinished mutation(s); plan of the default search uses the Skip index vec_idx on 1 of 1 parts).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-clickhouse (f42c0fc767ee) on network gvb-clickhouse_default at container-ip:8123, not through docker-proxy localhost:8123. Open after the passes: container-ip:8123 x1 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-clickhouse: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-clickhouse: 714 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@8 3492/3492 MHz, average 3492.0/3492.4, performance, outside load 0.14 before the warm-up, 0.17 during, client CPU 1.063 ms per search, engine CPU 11.758 ms per search; default@1 3492/3492 MHz, average 3492.0/3492.5, performance, outside load 0.18 before the warm-up, 0.17 during, client CPU 0.855 ms per search, engine CPU 6.571 ms per search; exact 3492/3492 MHz, average 3492.0/3492.7, performance, outside load 0.17 before the warm-up, 0.18 during, client CPU 0.883 ms per search, engine CPU 9.087 ms per search."
      ]
    },
    {
      "name": "sql",
      "engine": "Microsoft SQL Server 2025 (RTM-CU9) (KB5122048) - 17.0.5005.3 (X64), Enterprise Developer Edition (64-bit), in container gvb-mssql (image mcr.microsoft.com/mssql/server:2025-CU9-ubuntu-24.04@sha256:2b5b581621126574f3d1f75e78d3eebe8d05aedb59ad0cfdf9aa42cb0634d726; cpuset 2-3,6-7 from its creation; SQL Server counts 4 CPU(s) and runs 4 visible scheduler(s), affinity AUTO)",
      "index": "exact VECTOR_DISTANCE cosine, no vector index (full scan)",
      "hosting": "compose",
      "searchSettings": {
        "description": "exact VECTOR_DISTANCE cosine, no vector index (full scan)"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.9289185,
        "rowsPerSecond": 564.0968502618906,
        "countMatchSeconds": 0.0042179
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 4969,
        "p50Ms": 3.9423,
        "p95Ms": 4.489279999999999,
        "p99Ms": 5.156427999999997,
        "qps": {
          "1": 248.42576606652023,
          "8": 580.3678815779276
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 0,
        "clientCpuMsPerSearch": {
          "1": 1.2194,
          "8": 1.2288
        }
      },
      "ram": {
        "bytes": 556584140,
        "text": "530.8 MiB (docker stats)"
      },
      "disk": {
        "bytes": 5398528,
        "text": "5.15 MiB (table and its indexes, reserved pages)"
      },
      "passOrder": [
        "default@1",
        "default@8"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 0,
          "totalVectors": 524,
          "detail": "no index used, exact scan by design: dbo.gvb_gvbbench_eshoponweb in GvbBench holds 524 rows; sys.vector_indexes lists no index on the table; indexes: PK_gvb_gvbbench_eshoponweb CLUSTERED, IX_gvb_gvbbench_eshoponweb_DocKey NONCLUSTERED; a real search under SET STATISTICS XML ON ran: Clustered Index Scan of GvbBench.gvb_gvbbench_eshoponweb through PK_gvb_gvbbench_eshoponweb (IndexKind Clustered), 524 rows read, no vector index operator, 10 hits"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 0,
          "totalVectors": 524,
          "detail": "no index used, exact scan by design: dbo.gvb_gvbbench_eshoponweb in GvbBench holds 524 rows; sys.vector_indexes lists no index on the table; indexes: PK_gvb_gvbbench_eshoponweb CLUSTERED, IX_gvb_gvbbench_eshoponweb_DocKey NONCLUSTERED; a real search under SET STATISTICS XML ON ran: Clustered Index Scan of GvbBench.gvb_gvbbench_eshoponweb through PK_gvb_gvbbench_eshoponweb (IndexKind Clustered), 524 rows read, no vector index operator, 10 hits"
        }
      },
      "durability": "A commit returns after its transaction-log records are written to disk (SQL Server write-ahead logging; delayed durability is DISABLED); a database created here copies the model database: recovery model FULL, page_verify CHECKSUM; no global trace flags are enabled; mssql.conf of container gvb-mssql (/var/opt/mssql/mssql.conf, on the host at ~/gvb-data/engines/mssql/mssql.conf) does not exist, so it sets: nothing; it has no [control] or [traceflag] entry, so SQL Server\u0027s own Linux defaults for flushing writes apply (Microsoft\u0027s Linux performance guide names trace flag 3982 as that default; read from the guide, not tested here). Not tested by cutting power; whether the disk\u0027s own write cache reaches the media was not checked. Container settings from its environment (names only): MSSQL_AGENT_ENABLED, MSSQL_MEMORY_LIMIT_MB, MSSQL_PID, MSSQL_RPC_PORT, MSSQL_SA_PASSWORD.",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "8589934592",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        }
      ],
      "image": {
        "ref": "mcr.microsoft.com/mssql/server:2025-CU9-ubuntu-24.04@sha256:2b5b581621126574f3d1f75e78d3eebe8d05aedb59ad0cfdf9aa42cb0634d726",
        "id": "sha256:2b5b581621126574f3d1f75e78d3eebe8d05aedb59ad0cfdf9aa42cb0634d726",
        "pinnedId": "sha256:2b5b581621126574f3d1f75e78d3eebe8d05aedb59ad0cfdf9aa42cb0634d726",
        "lastTagTimeUtc": "2026-10-04T22:02:11.293843649Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/mssql",
        "bytesAtStart": 110158310,
        "bytesAtEnd": 463305753
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started mssql.compose.yaml with every container created on CPUs 2-3,6-7: gvb-mssql cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [mssql.compose.yaml b7359663cc15]. This run created the engine from these files.",
        "Index after the load: ready, 0 of 524 indexed (no index used, exact scan by design: dbo.gvb_gvbbench_eshoponweb in GvbBench holds 524 rows; sys.vector_indexes lists no index on the table; indexes: PK_gvb_gvbbench_eshoponweb CLUSTERED, IX_gvb_gvbbench_eshoponweb_DocKey NONCLUSTERED; a real search under SET STATISTICS XML ON ran: Clustered Index Scan of GvbBench.gvb_gvbbench_eshoponweb through PK_gvb_gvbbench_eshoponweb (IndexKind Clustered), 524 rows read, no vector index operator, 10 hits). Durability: A commit returns after its transaction-log records are written to disk (SQL Server write-ahead logging; delayed durability is DISABLED); a database created here copies the model database: recovery model FULL, page_verify CHECKSUM; no global trace flags are enabled; mssql.conf of container gvb-mssql (/var/opt/mssql/mssql.conf, on the host at ~/gvb-data/engines/mssql/mssql.conf) does not exist, so it sets: nothing; it has no [control] or [traceflag] entry, so SQL Server\u0027s own Linux defaults for flushing writes apply (Microsoft\u0027s Linux performance guide names trace flag 3982 as that default; read from the guide, not tested here). Not tested by cutting power; whether the disk\u0027s own write cache reaches the media was not checked. Container settings from its environment (names only): MSSQL_AGENT_ENABLED, MSSQL_MEMORY_LIMIT_MB, MSSQL_PID, MSSQL_RPC_PORT, MSSQL_SA_PASSWORD..",
        "WARNING: processes outside the benchmark used 0.39 CPUs on average over the last 3 s and 0.39 over the last few seconds when searching began (limit 0.3): the box was busy as the untimed rehearsal started. Each timed pass still waits for a quiet box before its warm-up, and one that ran busy is flagged \u0027busy box\u0027 on its own. The load average 2.09 3.87 3.48 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@1 7,505 searches in 30.0 s, default@8 18,023 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@1: warm-up 15.0 s and 3,721 searches (0 failed) at 1 searcher; p50 of the last windows 3.929, 3.945, 3.939 ms (windows of at least 2 s and 100 searches); trial of 740 searches in 3.0 s at 1 searcher: p50 3.950 ms against the settled p50 3.939 ms, 0% apart (limit 10%); the timed pass p50 3.942 ms, 0% from the settled p50 3.939 ms (limit 10% or 0.1 ms; 0.003 ms); default@8: warm-up 15.0 s and 9,166 searches (0 failed) at 8 searchers; QPS of the last windows 602, 625, 620 (windows of at least 2 s and 100 searches); trial of 1,876 searches in 3.0 s at 8 searchers: 623 QPS against the settled 620 QPS, 1% apart (limit 10%); the timed pass 580 QPS, 7% from the settled 620 QPS (limit 10%).",
        "Pass default@1 after rehearsal: 2026-10-07T21:21:14.994Z to 2026-10-07T21:21:34.995Z (20.0 s), 4,969 searches, 0 failed, p50 3.942 ms, mean 4.022 ms, p99 5.156 ms, 248.4 QPS (1000/QPS 4.025 ms).",
        "Pass default@8 after default@1: 2026-10-07T21:21:53.018Z to 2026-10-07T21:22:13.029Z (20.0 s), 11,614 searches, 0 failed, p50 12.462 ms, mean 13.778 ms, p99 20.032 ms, 580.4 QPS (1000/QPS 1.723 ms).",
        "Passes in the order run: default@1, default@8; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 41,031 sent, 0 failed (warmupErrors). Index after the searches: ready, 0 of 524 indexed (no index used, exact scan by design: dbo.gvb_gvbbench_eshoponweb in GvbBench holds 524 rows; sys.vector_indexes lists no index on the table; indexes: PK_gvb_gvbbench_eshoponweb CLUSTERED, IX_gvb_gvbbench_eshoponweb_DocKey NONCLUSTERED; a real search under SET STATISTICS XML ON ran: Clustered Index Scan of GvbBench.gvb_gvbbench_eshoponweb through PK_gvb_gvbbench_eshoponweb (IndexKind Clustered), 524 rows read, no vector index operator, 10 hits).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-mssql (658134ec50ab) on network gvb-mssql_default at container-ip:1433, not through docker-proxy localhost:14330. Open after the passes: container-ip:1433 x9 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-mssql: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-mssql: 85 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@1 3492/3492 MHz, average 3493.0/3492.6, performance, outside load 0.15 before the warm-up, 0.15 during, client CPU 1.219 ms per search, engine CPU 3.908 ms per search; default@8 3492/3492 MHz, average 3492.0/3492.4, performance, outside load 0.16 before the warm-up, 0.22 during, client CPU 1.229 ms per search, engine CPU 5.730 ms per search."
      ]
    },
    {
      "name": "opensearch",
      "engine": "OpenSearch 3.9.0 (k-NN plugin, faiss)",
      "index": "faiss HNSW float32, no compression, m=16, ef_construction=128, cosinesimil; search k=top, ef_search=100; 1 shard, 0 replicas; graph built at any segment size (approximate_threshold=0); force-merged to one segment after the load",
      "hosting": "compose",
      "searchSettings": {
        "approximate_threshold": "0",
        "ef_construction": "128",
        "ef_search": "100",
        "k": "top",
        "m": "16"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 1.6966226,
        "rowsPerSecond": 308.8488860162537,
        "countMatchSeconds": 0.1491915,
        "indexSeconds": 0.8868912,
        "indexNote": "force-merged to one segment, graph ready after 0.9 s: every segment searched through its HNSW graph, covering 524 of 524 vectors: 1 segment(s), 0 merge(s) running, profiled probe search: ann_search_count 1 (segments tried through a graph), exact_search_count 0 (of those, scanned instead), approximate_threshold 0; force-merged to one segment on purpose, so one graph answers every search"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 9877,
        "p50Ms": 1.9826,
        "p95Ms": 2.257419999999998,
        "p99Ms": 2.8146839999999993,
        "qps": {
          "8": 1516.024009357268,
          "1": 493.83209611735526
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 23045,
        "exactP50Ms": 2.5525,
        "exactP95Ms": 2.8889799999999997,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "8": 0.5054,
          "1": 0.4646
        }
      },
      "ram": {
        "bytes": 2739115393,
        "text": "2.55 GiB (docker stats)"
      },
      "disk": {
        "bytes": 10118731,
        "text": "9.65 MiB added by this load (13.26 MiB (whole engine data folder), 3.61 MiB before)"
      },
      "passOrder": [
        "default@8",
        "default@1",
        "exact"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "every segment searched through its HNSW graph, covering 524 of 524 vectors: 1 segment(s), 0 merge(s) running, profiled probe search: ann_search_count 1 (segments tried through a graph), exact_search_count 0 (of those, scanned instead), approximate_threshold 0; force-merged to one segment on purpose, so one graph answers every search"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "every segment searched through its HNSW graph, covering 524 of 524 vectors: 1 segment(s), 0 merge(s) running, profiled probe search: ann_search_count 1 (segments tried through a graph), exact_search_count 0 (of those, scanned instead), approximate_threshold 0; force-merged to one segment on purpose, so one graph answers every search"
        }
      },
      "durability": "Every acknowledged bulk request is fsynced to the translog before the answer: index.translog.durability=request, the OpenSearch default, which neither this sink nor opensearch.compose.yaml overrides (OpenSearchReadinessTests reads it back from the live index). By that setting a process crash or power loss loses no acknowledged write; this is read from the setting, not shown by pulling power. One node and no replicas, so a lost disk loses the data.",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "6442450944",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "heap_init_in_bytes",
          "value": "2147483648",
          "how": "read: GET /_nodes/jvm (nodes.\u003Cid\u003E.jvm.mem.heap_init_in_bytes and heap_max_in_bytes)"
        },
        {
          "key": "heap_max_in_bytes",
          "value": "2147483648",
          "how": "read: GET /_nodes/jvm (nodes.\u003Cid\u003E.jvm.mem.heap_init_in_bytes and heap_max_in_bytes)"
        }
      ],
      "image": {
        "ref": "opensearchproject/opensearch:3.9.0",
        "id": "sha256:adfa61f85025d06b4aeb562e7e74fde7e31c437039c93c3862c17e9acebd6c7c",
        "pinnedId": "sha256:adfa61f85025d06b4aeb562e7e74fde7e31c437039c93c3862c17e9acebd6c7c",
        "lastTagTimeUtc": "2026-10-03T14:09:29.512875356Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/opensearch",
        "bytesAtStart": 3785789,
        "bytesAtEnd": 13904520
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started opensearch.compose.yaml with every container created on CPUs 2-3,6-7: gvb-opensearch cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [opensearch.compose.yaml 028b44c40129]. This run created the engine from these files.",
        "Index after the load: ready, 524 of 524 indexed (every segment searched through its HNSW graph, covering 524 of 524 vectors: 1 segment(s), 0 merge(s) running, profiled probe search: ann_search_count 1 (segments tried through a graph), exact_search_count 0 (of those, scanned instead), approximate_threshold 0; force-merged to one segment on purpose, so one graph answers every search). Durability: Every acknowledged bulk request is fsynced to the translog before the answer: index.translog.durability=request, the OpenSearch default, which neither this sink nor opensearch.compose.yaml overrides (OpenSearchReadinessTests reads it back from the live index). By that setting a process crash or power loss loses no acknowledged write; this is read from the setting, not shown by pulling power. One node and no replicas, so a lost disk loses the data..",
        "Outside load when searching began: 0.11 CPUs on average over the last 3 s and 0.11 over the last few seconds (limit 0.3), a quiet box. The load average 3.74 3.72 3.48 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@8 27,824 searches in 30.0 s, default@1 14,834 searches in 30.0 s, exact 11,196 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@8: warm-up 15.0 s and 21,792 searches (0 failed) at 8 searchers; QPS of the last windows 1,466, 1,456, 1,523 (windows of at least 2 s and 100 searches); trial of 4,557 searches in 3.0 s at 8 searchers: 1,517 QPS against the settled 1,466 QPS, 3% apart (limit 10%); the timed pass 1,516 QPS, 3% from the settled 1,466 QPS (limit 10%); default@1: warm-up 15.0 s and 7,273 searches (0 failed) at 1 searcher; p50 of the last windows 2.018, 1.997, 1.999 ms (windows of at least 2 s and 100 searches); trial of 1,472 searches in 3.0 s at 1 searcher: p50 1.991 ms against the settled p50 1.999 ms, 0% apart (limit 10%); the timed pass p50 1.983 ms, 1% from the settled p50 1.999 ms (limit 10% or 0.1 ms; 0.016 ms); exact: warm-up 15.0 s and 5,755 searches (0 failed) at 1 searcher; p50 of the last windows 2.551, 2.551, 2.549 ms (windows of at least 2 s and 100 searches); trial of 1,159 searches in 3.0 s at 1 searcher: p50 2.549 ms against the settled p50 2.551 ms, 0% apart (limit 10%); the timed pass p50 2.553 ms, 0% from the settled p50 2.551 ms (limit 10% or 0.1 ms; 0.002 ms).",
        "Pass default@8 after rehearsal: 2026-10-07T21:24:33.262Z to 2026-10-07T21:24:53.267Z (20.0 s), 30,327 searches, 0 failed, p50 5.068 ms, mean 5.274 ms, p99 10.389 ms, 1516.0 QPS (1000/QPS 0.660 ms).",
        "Pass default@1 after default@8: 2026-10-07T21:25:11.278Z to 2026-10-07T21:25:31.278Z (20.0 s), 9,877 searches, 0 failed, p50 1.983 ms, mean 2.023 ms, p99 2.815 ms, 493.8 QPS (1000/QPS 2.025 ms).",
        "Pass exact after default@1: 2026-10-07T21:25:49.289Z to 2026-10-07T21:26:49.291Z (60.0 s), 23,045 searches, 0 failed, p50 2.553 ms, mean 2.602 ms, p99 3.519 ms, 384.1 QPS (1000/QPS 2.604 ms).",
        "Passes in the order run: default@8, default@1, exact; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 95,862 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (every segment searched through its HNSW graph, covering 524 of 524 vectors: 1 segment(s), 0 merge(s) running, profiled probe search: ann_search_count 1 (segments tried through a graph), exact_search_count 0 (of those, scanned instead), approximate_threshold 0; force-merged to one segment on purpose, so one graph answers every search).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-opensearch (c2aa02f803d1) on network engines_default at container-ip:9200, not through docker-proxy localhost:9201. Open after the passes: container-ip:9200 x1 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-opensearch: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-opensearch: 57 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@8 3492/3492 MHz, average 3492.0/3492.2, performance, outside load 0.15 before the warm-up, 0.12 during, client CPU 0.505 ms per search, engine CPU 2.550 ms per search; default@1 3492/3492 MHz, average 3492.1/3493.1, performance, outside load 0.12 before the warm-up, 0.14 during, client CPU 0.465 ms per search, engine CPU 1.738 ms per search; exact 3492/3492 MHz, average 3492.2/3493.0, performance, outside load 0.14 before the warm-up, 0.15 during, client CPU 0.465 ms per search, engine CPU 2.330 ms per search."
      ]
    },
    {
      "name": "milvus",
      "engine": "Milvus 2.6.25 (standalone, embedded etcd, local storage, REST API v2)",
      "index": "HNSW M=16 efConstruction=128, ef=100, metric COSINE, Strong consistency searches; approximate only (no exact mode)",
      "hosting": "compose",
      "searchSettings": {
        "M": "16",
        "ef": "100",
        "efConstruction": "128"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.4488158,
        "rowsPerSecond": 1167.5168298442256,
        "countMatchSeconds": 1.6889615,
        "indexSeconds": 138.5347141,
        "indexNote": "index Finished, type HNSW (COSINE, {\u0022M\u0022:16,\u0022efConstruction\u0022:128}), indexedRows 524 of 524 sealed rows, pendingRows 0; stored rows 524; LoadStateLoaded; query node: 1 sealed segment(s) with the index loaded covering 524 rows against 524 stored rows, 0 sealed without it, 0 rows in growing segments; datacoord: 1 live segment(s), 1 flushed and indexed covering 524 rows, 0 delete-log (L0) segment(s) waiting for a compaction, 3 segment(s) compacted away so far; flush, index build and load took 14.6 s, then compaction: 1 job(s) accepted by Milvus, layout ready and unchanged for 75 s, 123.8 s for the whole step; search ledger started, later state reads count the searches against the query node\u0027s own counters"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 8461,
        "p50Ms": 2.2509,
        "p95Ms": 2.8001,
        "p99Ms": 3.6955799999999934,
        "qps": {
          "1": 423.0361730626834,
          "8": 1270.1146668039612
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 0,
        "clientCpuMsPerSearch": {
          "1": 0.5459,
          "8": 0.6299
        }
      },
      "ram": {
        "bytes": 196503142,
        "text": "187.4 MiB (docker stats)"
      },
      "disk": {
        "bytes": 11391322,
        "text": "10.86 MiB added by this load (228.87 MiB (whole engine data folder), 218 MiB before)"
      },
      "passOrder": [
        "default@1",
        "default@8"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "index Finished, type HNSW (COSINE, {\u0022M\u0022:16,\u0022efConstruction\u0022:128}), indexedRows 524 of 524 sealed rows, pendingRows 0; stored rows 524; LoadStateLoaded; query node: 1 sealed segment(s) with the index loaded covering 524 rows against 524 stored rows, 0 sealed without it, 0 rows in growing segments; datacoord: 1 live segment(s), 1 flushed and indexed covering 524 rows, 0 delete-log (L0) segment(s) waiting for a compaction, 3 segment(s) compacted away so far; search ledger since the index finished: the sink sent 0 searches (searchParams.params.ef=100, Strong consistency), the query node counted 0 search requests for this collection, segment searches Sealed \u002B0 and Growing \u002B0, the same sealed segments with the same loaded index builds at both readings, segments compacted away \u002B0"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "index Finished, type HNSW (COSINE, {\u0022M\u0022:16,\u0022efConstruction\u0022:128}), indexedRows 524 of 524 sealed rows, pendingRows 0; stored rows 524; LoadStateLoaded; query node: 1 sealed segment(s) with the index loaded covering 524 rows against 524 stored rows, 0 sealed without it, 0 rows in growing segments; datacoord: 1 live segment(s), 1 flushed and indexed covering 524 rows, 0 delete-log (L0) segment(s) waiting for a compaction, 3 segment(s) compacted away so far; search ledger since the index finished: the sink sent 115194 searches (searchParams.params.ef=100, Strong consistency), the query node counted 115194 search requests for this collection, segment searches Sealed \u002B113262 and Growing \u002B0, the same sealed segments with the same loaded index builds at both readings, segments compacted away \u002B0"
        }
      },
      "durability": "Writes are not fsynced. Standalone uses the default message queue rocksmq (RocksDB, /var/lib/milvus/rdb_data, mq.type default) and flushed segments go to local-disk object storage (COMMON_STORAGETYPE=local in milvus.compose.yaml). Measured 2026-10-04 with strace over 30 acknowledged single-row upserts and one flush: fdatasync ran only on the embedded etcd files (member/wal, member/snap/db), never on rdb_data or the segment files. A host power loss or kernel crash can lose acknowledged rows that are still in the OS page cache; a Milvus process crash alone should not (inferred, not tested). Metadata in embedded etcd is fdatasynced on every commit.",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "8589934592",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        }
      ],
      "image": {
        "ref": "milvusdb/milvus:v2.6.25",
        "id": "sha256:29f7668e64df1c6d5cdadbfbee99f38c72e4001054f149a298725acae57230ad",
        "pinnedId": "sha256:29f7668e64df1c6d5cdadbfbee99f38c72e4001054f149a298725acae57230ad",
        "lastTagTimeUtc": "2026-10-03T14:05:28.412151323Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/milvus",
        "bytesAtStart": 228593016,
        "bytesAtEnd": 239984338
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started milvus.compose.yaml with every container created on CPUs 2-3,6-7: gvb-milvus cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [milvus.compose.yaml eaefecdc3671]. This run created the engine from these files.",
        "Index after the load: ready, 524 of 524 indexed (index Finished, type HNSW (COSINE, {\u0022M\u0022:16,\u0022efConstruction\u0022:128}), indexedRows 524 of 524 sealed rows, pendingRows 0; stored rows 524; LoadStateLoaded; query node: 1 sealed segment(s) with the index loaded covering 524 rows against 524 stored rows, 0 sealed without it, 0 rows in growing segments; datacoord: 1 live segment(s), 1 flushed and indexed covering 524 rows, 0 delete-log (L0) segment(s) waiting for a compaction, 3 segment(s) compacted away so far; search ledger since the index finished: the sink sent 0 searches (searchParams.params.ef=100, Strong consistency), the query node counted 0 search requests for this collection, segment searches Sealed \u002B0 and Growing \u002B0, the same sealed segments with the same loaded index builds at both readings, segments compacted away \u002B0). Durability: Writes are not fsynced. Standalone uses the default message queue rocksmq (RocksDB, /var/lib/milvus/rdb_data, mq.type default) and flushed segments go to local-disk object storage (COMMON_STORAGETYPE=local in milvus.compose.yaml). Measured 2026-10-04 with strace over 30 acknowledged single-row upserts and one flush: fdatasync ran only on the embedded etcd files (member/wal, member/snap/db), never on rdb_data or the segment files. A host power loss or kernel crash can lose acknowledged rows that are still in the OS page cache; a Milvus process crash alone should not (inferred, not tested). Metadata in embedded etcd is fdatasynced on every commit..",
        "Outside load when searching began: 0.14 CPUs on average over the last 60 s and 0.12 over the last few seconds (limit 0.3), a quiet box. The load average 0.20 1.99 2.90 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@1 12,716 searches in 30.0 s, default@8 38,181 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@1: warm-up 15.0 s and 6,315 searches (0 failed) at 1 searcher; p50 of the last windows 2.251, 2.241, 2.250 ms (windows of at least 2 s and 100 searches); trial of 1,266 searches in 3.0 s at 1 searcher: p50 2.252 ms against the settled p50 2.250 ms, 0% apart (limit 10%); the timed pass p50 2.251 ms, 0% from the settled p50 2.250 ms (limit 10% or 0.1 ms; 0.001 ms); default@8: warm-up 15.0 s and 18,997 searches (0 failed) at 8 searchers; QPS of the last windows 1,251, 1,278, 1,281 (windows of at least 2 s and 100 searches); trial of 3,851 searches in 3.0 s at 8 searchers: 1,282 QPS against the settled 1,278 QPS, 0% apart (limit 10%); the timed pass 1,270 QPS, 1% from the settled 1,278 QPS (limit 10%).",
        "Pass default@1 after rehearsal: 2026-10-07T21:30:38.245Z to 2026-10-07T21:30:58.246Z (20.0 s), 8,461 searches, 0 failed, p50 2.251 ms, mean 2.361 ms, p99 3.696 ms, 423.0 QPS (1000/QPS 2.364 ms).",
        "Pass default@8 after default@1: 2026-10-07T21:31:16.263Z to 2026-10-07T21:31:36.266Z (20.0 s), 25,407 searches, 0 failed, p50 5.750 ms, mean 6.296 ms, p99 14.586 ms, 1270.1 QPS (1000/QPS 0.787 ms).",
        "Passes in the order run: default@1, default@8; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 81,326 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (index Finished, type HNSW (COSINE, {\u0022M\u0022:16,\u0022efConstruction\u0022:128}), indexedRows 524 of 524 sealed rows, pendingRows 0; stored rows 524; LoadStateLoaded; query node: 1 sealed segment(s) with the index loaded covering 524 rows against 524 stored rows, 0 sealed without it, 0 rows in growing segments; datacoord: 1 live segment(s), 1 flushed and indexed covering 524 rows, 0 delete-log (L0) segment(s) waiting for a compaction, 3 segment(s) compacted away so far; search ledger since the index finished: the sink sent 115194 searches (searchParams.params.ef=100, Strong consistency), the query node counted 115194 search requests for this collection, segment searches Sealed \u002B113262 and Growing \u002B0, the same sealed segments with the same loaded index builds at both readings, segments compacted away \u002B0).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-milvus (45580d3aa0e2) on network gvb-milvus_default at container-ip:19530, not through docker-proxy localhost:19530; container gvb-milvus (45580d3aa0e2) on network gvb-milvus_default at container-ip:9091, not through docker-proxy localhost:9091. Open after the passes: container-ip:19530 x8 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-milvus: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-milvus: 24 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@1 3492/3492 MHz, average 3492.0/3492.4, performance, outside load 0.14 before the warm-up, 0.11 during, client CPU 0.546 ms per search, engine CPU 2.759 ms per search; default@8 3492/3492 MHz, average 3492.0/3492.1, performance, outside load 0.14 before the warm-up, 0.17 during, client CPU 0.630 ms per search, engine CPU 2.945 ms per search."
      ]
    },
    {
      "name": "sql-diskann",
      "engine": "Microsoft SQL Server 2025 (RTM-CU9) (KB5122048) - 17.0.5005.3 (X64), Enterprise Developer Edition (64-bit), in container gvb-mssql (image mcr.microsoft.com/mssql/server:2025-CU9-ubuntu-24.04@sha256:2b5b581621126574f3d1f75e78d3eebe8d05aedb59ad0cfdf9aa42cb0634d726; cpuset 2-3,6-7 from its creation; SQL Server counts 4 CPU(s) and runs 4 visible scheduler(s), affinity AUTO)",
      "index": "DiskANN (preview) via VECTOR_SEARCH, cosine, build {\u0022StartId\u0022:\u0022306\u0022, \u0022L\u0022:\u002248\u0022, \u0022M\u0022:\u00228\u0022, \u0022R\u0022:\u002248\u0022}; the exact mode scans the same table",
      "hosting": "compose",
      "searchSettings": {
        "L": "48",
        "M": "8",
        "R": "48",
        "StartId": "306"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.8617103,
        "rowsPerSecond": 608.0929983081321,
        "countMatchSeconds": 0.0037314,
        "indexSeconds": 3.8831299,
        "indexNote": "copied 524 rows to dbo.gvb_gvbbench_eshoponweb_ann (INT key) and built DiskANN, parameters {\u0022StartId\u0022:\u0022306\u0022, \u0022L\u0022:\u002248\u0022, \u0022M\u0022:\u00228\u0022, \u0022R\u0022:\u002248\u0022}, graph covers 524 rows"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 5501,
        "p50Ms": 3.5827,
        "p95Ms": 4.0882,
        "p99Ms": 5.1625,
        "qps": {
          "1": 275.02814076337216,
          "8": 695.2673289383315
        },
        "recall": 0.9650000000000002,
        "recallHits": 193,
        "ndcg": 0.5256995680516536,
        "errors": 0,
        "exactQueries": 16227,
        "exactP50Ms": 3.6157,
        "exactP95Ms": 4.15931,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "1": 1.0328,
          "8": 1.1035
        }
      },
      "ram": {
        "bytes": 555535564,
        "text": "529.8 MiB (docker stats)"
      },
      "disk": {
        "bytes": 4734976,
        "text": "4.52 MiB (table and its indexes, reserved pages)"
      },
      "passOrder": [
        "exact",
        "default@1",
        "default@8"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "DiskANN index built and used. sys.vector_indexes: vix_gvb_gvbbench_eshoponweb on dbo.gvb_gvbbench_eshoponweb_ann in GvbBenchDiskAnn, DiskANN, COSINE, enabled, build {\u0022StartId\u0022:\u0022306\u0022, \u0022L\u0022:\u002248\u0022, \u0022M\u0022:\u00228\u0022, \u0022R\u0022:\u002248\u0022}; graph table rows 524 of 524 table rows. Real VECTOR_SEARCH plan: Vector Index Seek on index vix_gvb_gvbbench_eshoponweb of GvbBenchDiskAnn.gvb_gvbbench_eshoponweb_ann (IndexKind DiskANN), 10 rows returned, 10 hits. The exact mode searches the SAME table (dbo.gvb_gvbbench_eshoponweb_ann, database GvbBenchDiskAnn) and its real plan is: Clustered Index Scan of GvbBenchDiskAnn.gvb_gvbbench_eshoponweb_ann through PK_gvb_gvbbench_eshoponweb_ann (IndexKind Clustered), 524 rows read, no vector index operator, 10 hits"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "DiskANN index built and used. sys.vector_indexes: vix_gvb_gvbbench_eshoponweb on dbo.gvb_gvbbench_eshoponweb_ann in GvbBenchDiskAnn, DiskANN, COSINE, enabled, build {\u0022StartId\u0022:\u0022306\u0022, \u0022L\u0022:\u002248\u0022, \u0022M\u0022:\u00228\u0022, \u0022R\u0022:\u002248\u0022}; graph table rows 524 of 524 table rows. Real VECTOR_SEARCH plan: Vector Index Seek on index vix_gvb_gvbbench_eshoponweb of GvbBenchDiskAnn.gvb_gvbbench_eshoponweb_ann (IndexKind DiskANN), 10 rows returned, 10 hits. The exact mode searches the SAME table (dbo.gvb_gvbbench_eshoponweb_ann, database GvbBenchDiskAnn) and its real plan is: Clustered Index Scan of GvbBenchDiskAnn.gvb_gvbbench_eshoponweb_ann through PK_gvb_gvbbench_eshoponweb_ann (IndexKind Clustered), 524 rows read, no vector index operator, 10 hits"
        }
      },
      "durability": "A commit returns after its transaction-log records are written to disk (SQL Server write-ahead logging; delayed durability is DISABLED); a database created here copies the model database: recovery model FULL, page_verify CHECKSUM; no global trace flags are enabled; mssql.conf of container gvb-mssql (/var/opt/mssql/mssql.conf, on the host at ~/gvb-data/engines/mssql/mssql.conf) does not exist, so it sets: nothing; it has no [control] or [traceflag] entry, so SQL Server\u0027s own Linux defaults for flushing writes apply (Microsoft\u0027s Linux performance guide names trace flag 3982 as that default; read from the guide, not tested here). Not tested by cutting power; whether the disk\u0027s own write cache reaches the media was not checked. Container settings from its environment (names only): MSSQL_AGENT_ENABLED, MSSQL_MEMORY_LIMIT_MB, MSSQL_PID, MSSQL_RPC_PORT, MSSQL_SA_PASSWORD.",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "8589934592",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        }
      ],
      "image": {
        "ref": "mcr.microsoft.com/mssql/server:2025-CU9-ubuntu-24.04@sha256:2b5b581621126574f3d1f75e78d3eebe8d05aedb59ad0cfdf9aa42cb0634d726",
        "id": "sha256:2b5b581621126574f3d1f75e78d3eebe8d05aedb59ad0cfdf9aa42cb0634d726",
        "pinnedId": "sha256:2b5b581621126574f3d1f75e78d3eebe8d05aedb59ad0cfdf9aa42cb0634d726",
        "lastTagTimeUtc": "2026-10-04T22:02:11.293843649Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/mssql",
        "bytesAtStart": 110154214,
        "bytesAtEnd": 530457714
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started mssql.compose.yaml with every container created on CPUs 2-3,6-7: gvb-mssql cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [mssql.compose.yaml b7359663cc15]. This run created the engine from these files.",
        "Index after the load: ready, 524 of 524 indexed (DiskANN index built and used. sys.vector_indexes: vix_gvb_gvbbench_eshoponweb on dbo.gvb_gvbbench_eshoponweb_ann in GvbBenchDiskAnn, DiskANN, COSINE, enabled, build {\u0022StartId\u0022:\u0022306\u0022, \u0022L\u0022:\u002248\u0022, \u0022M\u0022:\u00228\u0022, \u0022R\u0022:\u002248\u0022}; graph table rows 524 of 524 table rows. Real VECTOR_SEARCH plan: Vector Index Seek on index vix_gvb_gvbbench_eshoponweb of GvbBenchDiskAnn.gvb_gvbbench_eshoponweb_ann (IndexKind DiskANN), 10 rows returned, 10 hits. The exact mode searches the SAME table (dbo.gvb_gvbbench_eshoponweb_ann, database GvbBenchDiskAnn) and its real plan is: Clustered Index Scan of GvbBenchDiskAnn.gvb_gvbbench_eshoponweb_ann through PK_gvb_gvbbench_eshoponweb_ann (IndexKind Clustered), 524 rows read, no vector index operator, 10 hits). Durability: A commit returns after its transaction-log records are written to disk (SQL Server write-ahead logging; delayed durability is DISABLED); a database created here copies the model database: recovery model FULL, page_verify CHECKSUM; no global trace flags are enabled; mssql.conf of container gvb-mssql (/var/opt/mssql/mssql.conf, on the host at ~/gvb-data/engines/mssql/mssql.conf) does not exist, so it sets: nothing; it has no [control] or [traceflag] entry, so SQL Server\u0027s own Linux defaults for flushing writes apply (Microsoft\u0027s Linux performance guide names trace flag 3982 as that default; read from the guide, not tested here). Not tested by cutting power; whether the disk\u0027s own write cache reaches the media was not checked. Container settings from its environment (names only): MSSQL_AGENT_ENABLED, MSSQL_MEMORY_LIMIT_MB, MSSQL_PID, MSSQL_RPC_PORT, MSSQL_SA_PASSWORD..",
        "Outside load when searching began: 0.17 CPUs on average over the last 6 s and 0.18 over the last few seconds (limit 0.3), a quiet box. The load average 4.46 3.02 3.14 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: exact 7,942 searches in 30.0 s, default@1 8,123 searches in 30.0 s, default@8 20,371 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. exact: warm-up 15.0 s and 4,010 searches (0 failed) at 1 searcher; p50 of the last windows 3.666, 3.663, 3.676 ms (windows of at least 2 s and 100 searches); trial of 795 searches in 3.0 s at 1 searcher: p50 3.679 ms against the settled p50 3.666 ms, 0% apart (limit 10%); the timed pass p50 3.616 ms, 1% from the settled p50 3.666 ms (limit 10% or 0.1 ms; 0.050 ms); default@1: warm-up 15.0 s and 4,140 searches (0 failed) at 1 searcher; p50 of the last windows 3.574, 3.572, 3.575 ms (windows of at least 2 s and 100 searches); trial of 831 searches in 3.0 s at 1 searcher: p50 3.581 ms against the settled p50 3.574 ms, 0% apart (limit 10%); the timed pass p50 3.583 ms, 0% from the settled p50 3.574 ms (limit 10% or 0.1 ms; 0.008 ms); default@8: warm-up 15.0 s and 10,347 searches (0 failed) at 8 searchers; QPS of the last windows 683, 702, 680 (windows of at least 2 s and 100 searches); trial of 2,088 searches in 3.1 s at 8 searchers: 678 QPS against the settled 683 QPS, 1% apart (limit 10%); the timed pass 695 QPS, 2% from the settled 683 QPS (limit 10%).",
        "Pass exact after rehearsal: 2026-10-07T21:33:42.070Z to 2026-10-07T21:34:42.071Z (60.0 s), 16,227 searches, 0 failed, p50 3.616 ms, mean 3.694 ms, p99 5.179 ms, 270.4 QPS (1000/QPS 3.698 ms).",
        "Pass default@1 after exact: 2026-10-07T21:35:00.087Z to 2026-10-07T21:35:20.088Z (20.0 s), 5,501 searches, 0 failed, p50 3.583 ms, mean 3.634 ms, p99 5.163 ms, 275.0 QPS (1000/QPS 3.636 ms).",
        "Pass default@8 after default@1: 2026-10-07T21:35:38.179Z to 2026-10-07T21:35:58.185Z (20.0 s), 13,909 searches, 0 failed, p50 11.326 ms, mean 11.502 ms, p99 18.644 ms, 695.3 QPS (1000/QPS 1.438 ms).",
        "Passes in the order run: exact, default@1, default@8; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 58,647 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (DiskANN index built and used. sys.vector_indexes: vix_gvb_gvbbench_eshoponweb on dbo.gvb_gvbbench_eshoponweb_ann in GvbBenchDiskAnn, DiskANN, COSINE, enabled, build {\u0022StartId\u0022:\u0022306\u0022, \u0022L\u0022:\u002248\u0022, \u0022M\u0022:\u00228\u0022, \u0022R\u0022:\u002248\u0022}; graph table rows 524 of 524 table rows. Real VECTOR_SEARCH plan: Vector Index Seek on index vix_gvb_gvbbench_eshoponweb of GvbBenchDiskAnn.gvb_gvbbench_eshoponweb_ann (IndexKind DiskANN), 10 rows returned, 10 hits. The exact mode searches the SAME table (dbo.gvb_gvbbench_eshoponweb_ann, database GvbBenchDiskAnn) and its real plan is: Clustered Index Scan of GvbBenchDiskAnn.gvb_gvbbench_eshoponweb_ann through PK_gvb_gvbbench_eshoponweb_ann (IndexKind Clustered), 524 rows read, no vector index operator, 10 hits).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-mssql (e6296fcd9a0a) on network gvb-mssql_default at container-ip:1433, not through docker-proxy localhost:14330. Open after the passes: container-ip:1433 x10 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-mssql: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-mssql: 86 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): exact 3492/3492 MHz, average 3492.9/3492.5, performance, outside load 0.13 before the warm-up, 0.14 during, client CPU 1.145 ms per search, engine CPU 3.564 ms per search; default@1 3492/3492 MHz, average 3493.1/3492.5, performance, outside load 0.14 before the warm-up, 0.14 during, client CPU 1.033 ms per search, engine CPU 3.499 ms per search; default@8 3492/3492 MHz, average 3492.0/3492.2, performance, outside load 0.14 before the warm-up, 0.13 during, client CPU 1.104 ms per search, engine CPU 5.639 ms per search."
      ]
    },
    {
      "name": "duckdb",
      "engine": "DuckDB 1.5.6 \u002B vss b833341 (HNSW, embedded, in process)",
      "index": "HNSW (vss extension) FLOAT[n] metric=cosine m=16 ef_construction=128, ef_search=100 per connection, persistent (hnsw_enable_experimental_persistence=true, checkpoint_threshold=256MB); exact mode = array_cosine_similarity sequential scan; score = 1 - cosine distance; searches run concurrently, one connection per searcher (opened as searchers arrive, at most 32), writes run one at a time and never overlap a search",
      "hosting": "embedded",
      "searchSettings": {
        "checkpoint_threshold": "256MB",
        "ef_construction": "128",
        "ef_search": "100",
        "hnsw_enable_experimental_persistence": "true",
        "m": "16",
        "metric": "cosine"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.3493073,
        "rowsPerSecond": 1500.11179268226,
        "countMatchSeconds": 0.002618,
        "indexSeconds": 0.0141377,
        "indexNote": "HNSW is maintained inside every transaction, nothing to build; confirmed in 0.01 s: duckdb_indexes() lists gvb_gvbbench_eshoponweb_hnsw, pragma_hnsw_index_info() counts 524 vectors of 524 rows, EXPLAIN of the default search shows HNSW_INDEX_SCAN on it = True"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 5433,
        "p50Ms": 3.641,
        "p95Ms": 4.011479999999999,
        "p99Ms": 5.223384,
        "qps": {
          "1": 271.6474967683173,
          "8": 580.9027810920543
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 14132,
        "exactP50Ms": 4.1627,
        "exactP95Ms": 4.938434999999999,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "1": 4.9834,
          "8": 6.8275
        }
      },
      "ram": {
        "text": "in this process, not measured"
      },
      "disk": {
        "bytes": 3040286,
        "text": "2.9 MiB added by this load (1.26 GiB (engine data folder), 1.26 GiB before)"
      },
      "passOrder": [
        "default@1",
        "exact",
        "default@8"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "duckdb_indexes() lists gvb_gvbbench_eshoponweb_hnsw, pragma_hnsw_index_info() counts 524 vectors of 524 rows, EXPLAIN of the default search shows HNSW_INDEX_SCAN on it = True"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "duckdb_indexes() lists gvb_gvbbench_eshoponweb_hnsw, pragma_hnsw_index_info() counts 524 vectors of 524 rows, EXPLAIN of the default search shows HNSW_INDEX_SCAN on it = True"
        }
      },
      "durability": "DuckDB\u0027s write-ahead log is fsynced at every commit and no DuckDbSink setting changes that (checkpoint_threshold=256MB only spaces out the checkpoints that write the database file; measured with strace: 42 WAL fsyncs for 40 single-record commits plus 2 setup statements), so an operating-system crash or power cut loses no committed row; measured with kill -9 right after the last commit and a reopen: all 50, 300 and 2,000 rows and an HNSW index that counted the same number were recovered from the log; not tested and documented by DuckDB: the HNSW index is file-backed only through hnsw_enable_experimental_persistence = true, which this sink turns on, and WAL recovery for such custom indexes is not complete, so a crash during a checkpoint or a later commit can damage the index while the rows survive",
      "engineSettings": [
        {
          "key": "duckdb_version",
          "value": "v1.5.6",
          "how": "read: SELECT version() on an in-memory DuckDB connection"
        },
        {
          "key": "threads",
          "value": "8",
          "how": "read: SELECT current_setting(\u0027threads\u0027) on an in-memory DuckDB connection; DuckDB\u0027s own thread count, not a CPU cap (it counts all CPUs and ignores affinity)"
        },
        {
          "key": "hnsw_ef_search",
          "value": "100",
          "how": "set: src/GenericVectorBuilder.Engines/Sinks/DuckDbSink.cs#SET hnsw_ef_search"
        },
        {
          "key": "hnsw_enable_experimental_persistence",
          "value": "true",
          "how": "set: src/GenericVectorBuilder.Engines/Sinks/DuckDbSink.cs#SET hnsw_enable_experimental_persistence = true"
        },
        {
          "key": "memory_limit",
          "value": "7.4 GiB",
          "how": "read: SELECT current_setting(\u0027memory_limit\u0027) on a second connection to the bench file opened with the sink\u0027s own connection string"
        },
        {
          "key": "checkpoint_threshold",
          "value": "244.1 MiB",
          "how": "read: SELECT current_setting(\u0027checkpoint_threshold\u0027) on a second connection to the bench file opened with the sink\u0027s own connection string"
        }
      ],
      "dataFolder": {
        "path": "~/gvb-data/engines/duckdb",
        "bytesAtStart": 1353078962,
        "bytesAtEnd": 1356119248,
        "benchFileBytes": 3040286
      },
      "notes": [
        "Index after the load: ready, 524 of 524 indexed (duckdb_indexes() lists gvb_gvbbench_eshoponweb_hnsw, pragma_hnsw_index_info() counts 524 vectors of 524 rows, EXPLAIN of the default search shows HNSW_INDEX_SCAN on it = True). Durability: DuckDB\u0027s write-ahead log is fsynced at every commit and no DuckDbSink setting changes that (checkpoint_threshold=256MB only spaces out the checkpoints that write the database file; measured with strace: 42 WAL fsyncs for 40 single-record commits plus 2 setup statements), so an operating-system crash or power cut loses no committed row; measured with kill -9 right after the last commit and a reopen: all 50, 300 and 2,000 rows and an HNSW index that counted the same number were recovered from the log; not tested and documented by DuckDB: the HNSW index is file-backed only through hnsw_enable_experimental_persistence = true, which this sink turns on, and WAL recovery for such custom indexes is not complete, so a crash during a checkpoint or a later commit can damage the index while the rows survive.",
        "Outside load when searching began: 0.12 CPUs on average over the last 1 s and 0.12 over the last few seconds (limit 0.3), a quiet box. The load average 3.17 2.74 2.97 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@1 8,303 searches in 30.0 s, exact 7,093 searches in 30.0 s, default@8 17,517 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@1: warm-up 15.0 s and 4,099 searches (0 failed) at 1 searcher; p50 of the last windows 3.616, 3.626, 3.644 ms (windows of at least 2 s and 100 searches); trial of 822 searches in 3.0 s at 1 searcher: p50 3.611 ms against the settled p50 3.626 ms, 0% apart (limit 10%); the timed pass p50 3.641 ms, 0% from the settled p50 3.626 ms (limit 10% or 0.1 ms; 0.015 ms); exact: warm-up 15.0 s and 3,508 searches (0 failed) at 1 searcher; p50 of the last windows 4.142, 4.170, 4.197 ms (windows of at least 2 s and 100 searches); trial of 710 searches in 3.0 s at 1 searcher: p50 4.156 ms against the settled p50 4.170 ms, 0% apart (limit 10%); the timed pass p50 4.163 ms, 0% from the settled p50 4.170 ms (limit 10% or 0.1 ms; 0.007 ms); default@8: warm-up 15.0 s and 8,675 searches (0 failed) at 8 searchers; QPS of the last windows 578, 584, 576 (windows of at least 2 s and 100 searches); trial of 1,750 searches in 3.0 s at 8 searchers: 582 QPS against the settled 578 QPS, 1% apart (limit 10%); the timed pass 581 QPS, 0% from the settled 578 QPS (limit 10%).",
        "Pass default@1 after rehearsal: 2026-10-07T21:37:48.614Z to 2026-10-07T21:38:08.614Z (20.0 s), 5,433 searches, 0 failed, p50 3.641 ms, mean 3.679 ms, p99 5.223 ms, 271.6 QPS (1000/QPS 3.681 ms).",
        "Pass exact after default@1: 2026-10-07T21:38:26.623Z to 2026-10-07T21:39:26.627Z (60.0 s), 14,132 searches, 0 failed, p50 4.163 ms, mean 4.242 ms, p99 5.831 ms, 235.5 QPS (1000/QPS 4.246 ms).",
        "Pass default@8 after exact: 2026-10-07T21:39:44.651Z to 2026-10-07T21:40:04.661Z (20.0 s), 11,624 searches, 0 failed, p50 13.099 ms, mean 13.762 ms, p99 27.957 ms, 580.9 QPS (1000/QPS 1.721 ms).",
        "Passes in the order run: default@1, exact, default@8; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 52,477 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (duckdb_indexes() lists gvb_gvbbench_eshoponweb_hnsw, pragma_hnsw_index_info() counts 524 vectors of 524 rows, EXPLAIN of the default search shows HNSW_INDEX_SCAN on it = True).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: in this process (embedded), no network: no network address. No open connection seen (no open TCP connection was found).",
        "CPU pinning: none: an embedded engine runs inside the benchmark client process, so it shares the client CPUs, CPUs 0-1,4-5.",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@1 3494/3492 MHz, average 3495.6/3492.2, performance, outside load 0.14 before the warm-up, 0.12 during, client CPU 4.983 ms per search; exact 3493/3492 MHz, average 3495.2/3492.2, performance, outside load 0.13 before the warm-up, 0.15 during, client CPU 6.229 ms per search; default@8 3493/3492 MHz, average 3494.6/3492.0, performance, outside load 0.15 before the warm-up, 0.13 during, client CPU 6.828 ms per search."
      ]
    },
    {
      "name": "qdrant-hnsw",
      "engine": "Qdrant 1.17.0 in container gvb-qdrant (image qdrant/qdrant:v1.17.0@sha256:f1c7272cdac52b38c1a0e89313922d940ba50afd90d593a1605dbbc214e66ffb; cpuset 2-3,6-7 from its creation; 3 search thread(s))",
      "index": "HNSW m=16 ef_construct=100, hnsw_ef=server default, cosine; indexing_threshold_kb 1 and full_scan_threshold_kb 10 (server defaults are 10,000 each) so a small collection builds and walks its graph",
      "hosting": "compose",
      "searchSettings": {
        "ef_construct": "100",
        "hnsw_ef": "server",
        "m": "16"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.0968227,
        "rowsPerSecond": 5411.954014915924,
        "countMatchSeconds": 0.0070417,
        "indexSeconds": 2.0290854,
        "indexNote": "indexing_threshold_kb 1, full_scan_threshold_kb 10; status Green, 524 of 524 vectors in HNSW segments (2 segments), waited 2.0 s"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 21483,
        "p50Ms": 0.92,
        "p95Ms": 1.0242,
        "p99Ms": 1.4834720000000001,
        "qps": {
          "8": 3477.195519374346,
          "1": 1074.129532461759
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 66071,
        "exactP50Ms": 0.8965,
        "exactP95Ms": 1.0043,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "8": 0.5218,
          "1": 0.7326
        }
      },
      "ram": {
        "bytes": 38346424,
        "text": "36.57 MiB (docker stats)"
      },
      "disk": {
        "bytes": 172067205,
        "text": "164.1 MiB (collection folder)"
      },
      "passOrder": [
        "default@8",
        "default@1",
        "exact"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "status Green, optimizer ok, indexed_vectors_count 524 of 524 points, 2 segments, indexing_threshold_kb 1, full_scan_threshold_kb 10; every one of 1 non-empty segments has a complete HNSW graph above its full-scan threshold; no search has run yet, so the walk is proven by the segment settings only; searches counted since the collection was created: unfiltered_hnsw 0, unfiltered_plain 0, unfiltered_exact 0"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "status Green, optimizer ok, indexed_vectors_count 524 of 524 points, 2 segments, indexing_threshold_kb 1, full_scan_threshold_kb 10; every one of 1 non-empty segments has a complete HNSW graph above its full-scan threshold; 308,216 segment searches walked the graph and none scanned; searches counted since the collection was created: unfiltered_hnsw 308,216, unfiltered_plain 0, unfiltered_exact 118,919"
        }
      },
      "durability": "What was measured (strace -f on the Qdrant server process, 30 single-point REST upserts per setting, every sync call timed against the request that caused it): with wait=true each upsert had exactly one msync(MS_SYNC) of the write-ahead-log segment inside the request, before the reply (30 of 30); with wait=false the 30 upserts were acknowledged within 0.26 s with no sync call, and the first WAL msync (one call covering all 30 records) came 2.7 s after the last reply, followed by the segment-file flushes. So the log is flushed to disk under both settings, but with wait=false the flush comes after the acknowledgement: an operating-system crash or power cut in that gap loses acknowledged writes, while a crash of the Qdrant process alone should not, because the bytes are already in the kernel\u0027s page cache (inferred, not tested). Every upsert here is sent with wait=true in batches of 256 over gRPC; the strace used one point per request, so one flush per batch is inferred, not measured. Segment files are flushed every 5 s; log segments 32 MB, 0 created ahead. /qdrant/config/config.yaml in container gvb-qdrant (the image\u0027s own file; its storage keys are listed) sets: storage.collection.quantization = null, storage.collection.replication_factor = 1, storage.collection.vectors.on_disk = null, storage.collection.write_consistency_factor = 1, storage.hnsw_index.ef_construct = 100, storage.hnsw_index.full_scan_threshold_kb = 10000, storage.hnsw_index.m = 16, storage.hnsw_index.max_indexing_threads = 0, storage.hnsw_index.on_disk = false, storage.hnsw_index.payload_m = null, storage.max_collections = null, storage.node_type = Normal, storage.on_disk_payload = true, storage.optimizers.default_segment_number = 0, storage.optimizers.deleted_threshold = 0.2, storage.optimizers.flush_interval_sec = 5, storage.optimizers.indexing_threshold_kb = 10000, storage.optimizers.max_optimization_threads = null, storage.optimizers.max_segment_size_kb = null, storage.optimizers.vacuum_min_vector_number = 1000, storage.performance.max_search_threads = 0, storage.performance.optimizer_cpu_budget = 0, storage.performance.update_rate_limit = null, storage.shard_transfer_method = null, storage.snapshots_config.snapshots_storage = local, storage.snapshots_path = ./snapshots, storage.storage_path = ./storage, storage.temp_path = null, storage.update_concurrency = null, storage.wal.wal_capacity_mb = 32, storage.wal.wal_segments_ahead = 0; no QDRANT__ environment overrides in the server process. Not tested by cutting power; whether the disk\u0027s own write cache reaches the media was not checked.",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "8589934592",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "search_threads",
          "value": "3",
          "how": "read: threads named search-* of the qdrant process in container gvb-qdrant (/proc)"
        }
      ],
      "image": {
        "ref": "qdrant/qdrant:v1.17.0@sha256:f1c7272cdac52b38c1a0e89313922d940ba50afd90d593a1605dbbc214e66ffb",
        "id": "sha256:f1c7272cdac52b38c1a0e89313922d940ba50afd90d593a1605dbbc214e66ffb",
        "pinnedId": "sha256:f1c7272cdac52b38c1a0e89313922d940ba50afd90d593a1605dbbc214e66ffb",
        "lastTagTimeUtc": "2026-10-04T22:03:16.973657523Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/qdrant",
        "bytesAtStart": 357,
        "bytesAtEnd": 172067562
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started qdrant.compose.yaml with every container created on CPUs 2-3,6-7: gvb-qdrant cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [qdrant.compose.yaml eb57e55e93c1]. This run created the engine from these files.",
        "Index after the load: ready, 524 of 524 indexed (status Green, optimizer ok, indexed_vectors_count 524 of 524 points, 2 segments, indexing_threshold_kb 1, full_scan_threshold_kb 10; every one of 1 non-empty segments has a complete HNSW graph above its full-scan threshold; no search has run yet, so the walk is proven by the segment settings only; searches counted since the collection was created: unfiltered_hnsw 0, unfiltered_plain 0, unfiltered_exact 0). Durability: What was measured (strace -f on the Qdrant server process, 30 single-point REST upserts per setting, every sync call timed against the request that caused it): with wait=true each upsert had exactly one msync(MS_SYNC) of the write-ahead-log segment inside the request, before the reply (30 of 30); with wait=false the 30 upserts were acknowledged within 0.26 s with no sync call, and the first WAL msync (one call covering all 30 records) came 2.7 s after the last reply, followed by the segment-file flushes. So the log is flushed to disk under both settings, but with wait=false the flush comes after the acknowledgement: an operating-system crash or power cut in that gap loses acknowledged writes, while a crash of the Qdrant process alone should not, because the bytes are already in the kernel\u0027s page cache (inferred, not tested). Every upsert here is sent with wait=true in batches of 256 over gRPC; the strace used one point per request, so one flush per batch is inferred, not measured. Segment files are flushed every 5 s; log segments 32 MB, 0 created ahead. /qdrant/config/config.yaml in container gvb-qdrant (the image\u0027s own file; its storage keys are listed) sets: storage.collection.quantization = null, storage.collection.replication_factor = 1, storage.collection.vectors.on_disk = null, storage.collection.write_consistency_factor = 1, storage.hnsw_index.ef_construct = 100, storage.hnsw_index.full_scan_threshold_kb = 10000, storage.hnsw_index.m = 16, storage.hnsw_index.max_indexing_threads = 0, storage.hnsw_index.on_disk = false, storage.hnsw_index.payload_m = null, storage.max_collections = null, storage.node_type = Normal, storage.on_disk_payload = true, storage.optimizers.default_segment_number = 0, storage.optimizers.deleted_threshold = 0.2, storage.optimizers.flush_interval_sec = 5, storage.optimizers.indexing_threshold_kb = 10000, storage.optimizers.max_optimization_threads = null, storage.optimizers.max_segment_size_kb = null, storage.optimizers.vacuum_min_vector_number = 1000, storage.performance.max_search_threads = 0, storage.performance.optimizer_cpu_budget = 0, storage.performance.update_rate_limit = null, storage.shard_transfer_method = null, storage.snapshots_config.snapshots_storage = local, storage.snapshots_path = ./snapshots, storage.storage_path = ./storage, storage.temp_path = null, storage.update_concurrency = null, storage.wal.wal_capacity_mb = 32, storage.wal.wal_segments_ahead = 0; no QDRANT__ environment overrides in the server process. Not tested by cutting power; whether the disk\u0027s own write cache reaches the media was not checked..",
        "Outside load when searching began: 0.10 CPUs on average over the last 3 s and 0.10 over the last few seconds (limit 0.3), a quiet box. The load average 6.22 3.96 3.37 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@8 103,241 searches in 30.0 s, default@1 32,234 searches in 30.0 s, exact 33,084 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@8: warm-up 15.0 s and 51,942 searches (0 failed) at 8 searchers; QPS of the last windows 3,469, 3,496, 3,439 (windows of at least 2 s and 100 searches); trial of 10,416 searches in 3.0 s at 8 searchers: 3,470 QPS against the settled 3,469 QPS, 0% apart (limit 10%); the timed pass 3,477 QPS, 0% from the settled 3,469 QPS (limit 10%); default@1: warm-up 15.0 s and 16,137 searches (0 failed) at 1 searcher; p50 of the last windows 0.921, 0.919, 0.919 ms (windows of at least 2 s and 100 searches); trial of 3,213 searches in 3.0 s at 1 searcher: p50 0.923 ms against the settled p50 0.919 ms, 0% apart (limit 10%); the timed pass p50 0.920 ms, 0% from the settled p50 0.919 ms (limit 10% or 0.1 ms; 0.001 ms); exact: warm-up 15.0 s and 16,477 searches (0 failed) at 1 searcher; p50 of the last windows 0.902, 0.903, 0.900 ms (windows of at least 2 s and 100 searches); trial of 3,287 searches in 3.0 s at 1 searcher: p50 0.902 ms against the settled p50 0.902 ms, 0% apart (limit 10%); the timed pass p50 0.897 ms, 1% from the settled p50 0.902 ms (limit 10% or 0.1 ms; 0.005 ms).",
        "Pass default@8 after rehearsal: 2026-10-07T21:42:01.650Z to 2026-10-07T21:42:21.652Z (20.0 s), 69,550 searches, 0 failed, p50 2.216 ms, mean 2.298 ms, p99 3.972 ms, 3477.2 QPS (1000/QPS 0.288 ms).",
        "Pass default@1 after default@8: 2026-10-07T21:42:39.675Z to 2026-10-07T21:42:59.676Z (20.0 s), 21,483 searches, 0 failed, p50 0.920 ms, mean 0.929 ms, p99 1.483 ms, 1074.1 QPS (1000/QPS 0.931 ms).",
        "Pass exact after default@1: 2026-10-07T21:43:17.699Z to 2026-10-07T21:44:17.699Z (60.0 s), 66,071 searches, 0 failed, p50 0.897 ms, mean 0.906 ms, p99 1.454 ms, 1101.2 QPS (1000/QPS 0.908 ms).",
        "Passes in the order run: default@8, default@1, exact; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 270,031 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (status Green, optimizer ok, indexed_vectors_count 524 of 524 points, 2 segments, indexing_threshold_kb 1, full_scan_threshold_kb 10; every one of 1 non-empty segments has a complete HNSW graph above its full-scan threshold; 308,216 segment searches walked the graph and none scanned; searches counted since the collection was created: unfiltered_hnsw 308,216, unfiltered_plain 0, unfiltered_exact 118,919).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-qdrant (6a29c33862e5) on network gvb-qdrant_default at container-ip:6334, not through docker-proxy localhost:16334; container gvb-qdrant (6a29c33862e5) on network gvb-qdrant_default at container-ip:6333, not through docker-proxy localhost:16333. Open after the passes: container-ip:6334 x1 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-qdrant: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-qdrant: 24 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@8 3492/3492 MHz, average 3492.0/3492.0, performance, outside load 0.11 before the warm-up, 0.13 during, client CPU 0.522 ms per search, engine CPU 0.929 ms per search; default@1 3492/3492 MHz, average 3492.0/3492.0, performance, outside load 0.12 before the warm-up, 0.10 during, client CPU 0.733 ms per search, engine CPU 0.731 ms per search; exact 3492/3492 MHz, average 3492.0/3492.0, performance, outside load 0.11 before the warm-up, 0.10 during, client CPU 0.734 ms per search, engine CPU 0.710 ms per search."
      ]
    },
    {
      "name": "weaviate",
      "engine": "Weaviate 1.39.8 (single node, REST \u002B GraphQL)",
      "index": "HNSW maxConnections(M)=16 efConstruction=128, ef=-1 (dynamic: limit x 8 clamped 100..500), cosine, no quantization; approximate only (no exact mode)",
      "hosting": "compose",
      "searchSettings": {
        "ef": "-1",
        "efConstruction": "128"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.5217286,
        "rowsPerSecond": 1004.3536045369183,
        "countMatchSeconds": 0.0044696,
        "indexSeconds": 0.0179391,
        "indexNote": "HNSW is updated inside every batch, nothing to build; confirmed in 0.0 s: shard bsdpeOakdufa vectorIndexingStatus READY, vectorQueueLength 0, node status objectCount 0 (refreshed only when the memtable is flushed, so it lags a minute and does not decide readiness), schema shard bsdpeOakdufa status READY, Aggregate count 524, Aggregate nearVector with objectLimit 524 reached 524, Weaviate reports no count of vectors in the HNSW index, so indexed vectors are not reported"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 3333,
        "p50Ms": 5.3251,
        "p95Ms": 10.799240000000001,
        "p99Ms": 11.804067999999996,
        "qps": {
          "1": 166.6373072363078,
          "8": 306.1970954327405
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 0,
        "clientCpuMsPerSearch": {
          "1": 0.5723,
          "8": 0.6199
        }
      },
      "ram": {
        "bytes": 99551805,
        "text": "94.94 MiB (docker stats)"
      },
      "disk": {
        "bytes": 3102227,
        "text": "2.96 MiB added by this load (5.02 MiB (whole engine data folder), 2.06 MiB before)"
      },
      "passOrder": [
        "default@1",
        "default@8"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "totalVectors": 524,
          "detail": "shard bsdpeOakdufa vectorIndexingStatus READY, vectorQueueLength 0, node status objectCount 0 (refreshed only when the memtable is flushed, so it lags a minute and does not decide readiness), schema shard bsdpeOakdufa status READY, Aggregate count 524, Aggregate nearVector with objectLimit 524 reached 524, Weaviate reports no count of vectors in the HNSW index, so indexed vectors are not reported"
        },
        "afterSearch": {
          "ready": true,
          "totalVectors": 524,
          "detail": "shard bsdpeOakdufa vectorIndexingStatus READY, vectorQueueLength 0, node status objectCount 524 (refreshed only when the memtable is flushed, so it lags a minute and does not decide readiness), schema shard bsdpeOakdufa status READY, Aggregate count 524, Aggregate nearVector with objectLimit 524 reached 524, Weaviate reports no count of vectors in the HNSW index, so indexed vectors are not reported"
        }
      },
      "durability": "Weaviate 1.39.8 defaults, weaviate.compose.yaml sets no persistence variable: every object is appended to the LSM write-ahead log with a plain write and no fsync, and the log is fsynced only when its memtable is flushed, 60 seconds after the last write (PERSISTENCE_MEMTABLES_FLUSH_IDLE_AFTER_SECONDS default; measured with strace: 2,080 writes into the objects log during a 2,000-object load, the first fsync 60 s after the last write), so a power cut can lose the last minute of writes; the HNSW commit log is buffered inside the process (77 writes for 2,000 vectors), so a killed process loses the newest vectors from the vector index while their objects survive (measured with docker kill, which is SIGKILL, one second after the load and a restart, two runs each: 0 to 1 of 50, 264 to 267 of 300 and 1,992 to 1,997 of 2,000 stored objects were still reachable through a vector search)",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "8589934592",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "GOMEMLIMIT",
          "value": "6GiB",
          "how": "read: docker inspect Config.Env, the name GOMEMLIMIT only"
        }
      ],
      "image": {
        "ref": "semitechnologies/weaviate:1.39.8",
        "id": "sha256:f6f4a5961f99e8718a02c822ca6a0d65ed3f9c567734419a7b2144933014f13a",
        "pinnedId": "sha256:f6f4a5961f99e8718a02c822ca6a0d65ed3f9c567734419a7b2144933014f13a",
        "lastTagTimeUtc": "2026-10-03T14:05:40.948499656Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/weaviate",
        "bytesAtStart": 2162836,
        "bytesAtEnd": 5265063
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started weaviate.compose.yaml with every container created on CPUs 2-3,6-7: gvb-weaviate cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [weaviate.compose.yaml d96b7399662a]. This run created the engine from these files.",
        "Index after the load: ready, ? of 524 indexed (shard bsdpeOakdufa vectorIndexingStatus READY, vectorQueueLength 0, node status objectCount 0 (refreshed only when the memtable is flushed, so it lags a minute and does not decide readiness), schema shard bsdpeOakdufa status READY, Aggregate count 524, Aggregate nearVector with objectLimit 524 reached 524, Weaviate reports no count of vectors in the HNSW index, so indexed vectors are not reported). Durability: Weaviate 1.39.8 defaults, weaviate.compose.yaml sets no persistence variable: every object is appended to the LSM write-ahead log with a plain write and no fsync, and the log is fsynced only when its memtable is flushed, 60 seconds after the last write (PERSISTENCE_MEMTABLES_FLUSH_IDLE_AFTER_SECONDS default; measured with strace: 2,080 writes into the objects log during a 2,000-object load, the first fsync 60 s after the last write), so a power cut can lose the last minute of writes; the HNSW commit log is buffered inside the process (77 writes for 2,000 vectors), so a killed process loses the newest vectors from the vector index while their objects survive (measured with docker kill, which is SIGKILL, one second after the load and a restart, two runs each: 0 to 1 of 50, 264 to 267 of 300 and 1,992 to 1,997 of 2,000 stored objects were still reachable through a vector search).",
        "Outside load when searching began: 0.09 CPUs on average over the last 1 s and 0.09 over the last few seconds (limit 0.3), a quiet box. The load average 1.45 3.08 3.20 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@1 5,059 searches in 30.0 s, default@8 9,297 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@1: warm-up 15.0 s and 2,508 searches (0 failed) at 1 searcher; p50 of the last windows 5.347, 5.329, 5.337 ms (windows of at least 2 s and 100 searches); trial of 502 searches in 3.0 s at 1 searcher: p50 5.338 ms against the settled p50 5.337 ms, 0% apart (limit 10%); the timed pass p50 5.325 ms, 0% from the settled p50 5.337 ms (limit 10% or 0.1 ms; 0.012 ms); default@8: warm-up 15.0 s and 4,600 searches (0 failed) at 8 searchers; QPS of the last windows 306, 306, 306 (windows of at least 2 s and 100 searches); trial of 927 searches in 3.0 s at 8 searchers: 307 QPS against the settled 306 QPS, 0% apart (limit 10%); the timed pass 306 QPS, 0% from the settled 306 QPS (limit 10%).",
        "Pass default@1 after rehearsal: 2026-10-07T21:45:59.849Z to 2026-10-07T21:46:19.851Z (20.0 s), 3,333 searches, 0 failed, p50 5.325 ms, mean 5.998 ms, p99 11.804 ms, 166.6 QPS (1000/QPS 6.001 ms).",
        "Pass default@8 after default@1: 2026-10-07T21:46:37.911Z to 2026-10-07T21:46:57.924Z (20.0 s), 6,128 searches, 0 failed, p50 24.739 ms, mean 26.117 ms, p99 54.642 ms, 306.2 QPS (1000/QPS 3.266 ms).",
        "Passes in the order run: default@1, default@8; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 22,893 sent, 0 failed (warmupErrors). Index after the searches: ready, ? of 524 indexed (shard bsdpeOakdufa vectorIndexingStatus READY, vectorQueueLength 0, node status objectCount 524 (refreshed only when the memtable is flushed, so it lags a minute and does not decide readiness), schema shard bsdpeOakdufa status READY, Aggregate count 524, Aggregate nearVector with objectLimit 524 reached 524, Weaviate reports no count of vectors in the HNSW index, so indexed vectors are not reported).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-weaviate (12817952bd18) on network gvb-weaviate_default at container-ip:8080, not through docker-proxy localhost:8085. Open after the passes: container-ip:8080 x8 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-weaviate: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-weaviate: 9 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@1 3492/3493 MHz, average 3492.3/3493.1, performance, outside load 0.13 before the warm-up, 0.17 during, client CPU 0.572 ms per search, engine CPU 8.255 ms per search; default@8 3492/3492 MHz, average 3492.0/3492.7, performance, outside load 0.14 before the warm-up, 0.13 during, client CPU 0.620 ms per search, engine CPU 12.955 ms per search."
      ]
    },
    {
      "name": "pgvector",
      "engine": "PostgreSQL 17 \u002B pgvector 0.8.7",
      "index": "HNSW vector_cosine_ops m=16 ef_construction=128, hnsw.ef_search=100 per query, float32 vector(n), cosine; exact mode = same query with index scans off (sequential scan)",
      "hosting": "compose",
      "searchSettings": {
        "ef_construction": "128",
        "hnsw.ef_search": "100",
        "m": "16"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.848097,
        "rowsPerSecond": 617.8538539813253,
        "countMatchSeconds": 0.0118213,
        "indexSeconds": 0.0273605,
        "indexNote": "HNSW is maintained inside every insert, nothing to build; confirmed in 0.0 s: pg_indexes lists gvb_gvbbench_eshoponweb_hnsw (USING hnsw (embedding vector_cosine_ops) WITH (m=\u002716\u0027, ef_construction=\u0027128\u0027)), pg_index valid and ready = True, EXPLAIN of the default search uses Index Scan on it = True, that search returned 10 of 10 rows; PostgreSQL keeps no entry count for an HNSW index, so indexed vectors are not reported"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 23168,
        "p50Ms": 0.8446,
        "p95Ms": 1.0032649999999999,
        "p99Ms": 1.2742309999999988,
        "qps": {
          "1": 1158.3633204254586,
          "8": 4095.1304774444975
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 26974,
        "exactP50Ms": 2.1827,
        "exactP95Ms": 2.4013049999999994,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "1": 0.6695,
          "8": 0.5393
        }
      },
      "ram": {
        "bytes": 106535321,
        "text": "101.6 MiB (docker stats)"
      },
      "disk": {
        "bytes": 7929856,
        "text": "7.56 MiB added by this load (358.57 MiB (whole engine data folder), 351 MiB before)"
      },
      "passOrder": [
        "exact",
        "default@1",
        "default@8"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "totalVectors": 524,
          "detail": "pg_indexes lists gvb_gvbbench_eshoponweb_hnsw (USING hnsw (embedding vector_cosine_ops) WITH (m=\u002716\u0027, ef_construction=\u0027128\u0027)), pg_index valid and ready = True, EXPLAIN of the default search uses Index Scan on it = True, that search returned 10 of 10 rows; PostgreSQL keeps no entry count for an HNSW index, so indexed vectors are not reported"
        },
        "afterSearch": {
          "ready": true,
          "totalVectors": 524,
          "detail": "pg_indexes lists gvb_gvbbench_eshoponweb_hnsw (USING hnsw (embedding vector_cosine_ops) WITH (m=\u002716\u0027, ef_construction=\u0027128\u0027)), pg_index valid and ready = True, EXPLAIN of the default search uses Index Scan on it = True, that search returned 10 of 10 rows; PostgreSQL keeps no entry count for an HNSW index, so indexed vectors are not reported"
        }
      },
      "durability": "fsync on, synchronous_commit on, full_page_writes on, wal_sync_method fdatasync (PostgreSQL defaults; pgvector.compose.yaml sets only shared_buffers, maintenance_work_mem and max_wal_size): every commit is flushed to the write-ahead log before it returns and HNSW index changes are WAL-logged, so a crash loses no committed row (max_wal_size 4GB only spaces out checkpoints; measured with docker kill, which is SIGKILL, right after a 2,000-vector load and a restart: all 2,000 rows were there and the HNSW index was valid and used by the default search)",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "8589934592",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "shared_buffers",
          "value": "2GB",
          "how": "read: docker exec gvb-pgvector psql current_setting"
        },
        {
          "key": "enable_seqscan",
          "value": "off",
          "how": "set: src/GenericVectorBuilder.Engines/Sinks/PgVectorSink.cs#SET LOCAL enable_seqscan = off; SET LOCAL jit = off;"
        },
        {
          "key": "jit",
          "value": "off",
          "how": "set: src/GenericVectorBuilder.Engines/Sinks/PgVectorSink.cs#SET LOCAL enable_seqscan = off; SET LOCAL jit = off;"
        }
      ],
      "image": {
        "ref": "pgvector/pgvector:0.8.7-pg17-trixie",
        "id": "sha256:7a7e9f22015b67edb4bef5c59daeebcd7e74bfa570df6ce60ae01237c8648a84",
        "pinnedId": "sha256:7a7e9f22015b67edb4bef5c59daeebcd7e74bfa570df6ce60ae01237c8648a84",
        "lastTagTimeUtc": "2026-10-03T14:04:52.665253039Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/pgvector",
        "bytesAtStart": 368052847,
        "bytesAtEnd": 375982703
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started pgvector.compose.yaml with every container created on CPUs 2-3,6-7: gvb-pgvector cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [pgvector.compose.yaml 27549563c622]. This run created the engine from these files.",
        "Index after the load: ready, ? of 524 indexed (pg_indexes lists gvb_gvbbench_eshoponweb_hnsw (USING hnsw (embedding vector_cosine_ops) WITH (m=\u002716\u0027, ef_construction=\u0027128\u0027)), pg_index valid and ready = True, EXPLAIN of the default search uses Index Scan on it = True, that search returned 10 of 10 rows; PostgreSQL keeps no entry count for an HNSW index, so indexed vectors are not reported). Durability: fsync on, synchronous_commit on, full_page_writes on, wal_sync_method fdatasync (PostgreSQL defaults; pgvector.compose.yaml sets only shared_buffers, maintenance_work_mem and max_wal_size): every commit is flushed to the write-ahead log before it returns and HNSW index changes are WAL-logged, so a crash loses no committed row (max_wal_size 4GB only spaces out checkpoints; measured with docker kill, which is SIGKILL, right after a 2,000-vector load and a restart: all 2,000 rows were there and the HNSW index was valid and used by the default search).",
        "Outside load when searching began: 0.12 CPUs on average over the last 2 s and 0.12 over the last few seconds (limit 0.3), a quiet box. The load average 2.42 2.84 3.09 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: exact 13,848 searches in 30.0 s, default@1 38,785 searches in 30.0 s, default@8 125,531 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. exact: warm-up 15.0 s and 6,762 searches (0 failed) at 1 searcher; p50 of the last windows 2.180, 2.175, 2.183 ms (windows of at least 2 s and 100 searches); trial of 1,358 searches in 3.0 s at 1 searcher: p50 2.181 ms against the settled p50 2.180 ms, 0% apart (limit 10%); the timed pass p50 2.183 ms, 0% from the settled p50 2.180 ms (limit 10% or 0.1 ms; 0.003 ms); default@1: warm-up 15.0 s and 17,646 searches (0 failed) at 1 searcher; p50 of the last windows 0.816, 0.837, 0.831 ms (windows of at least 2 s and 100 searches); trial of 3,421 searches in 3.0 s at 1 searcher: p50 0.851 ms against the settled p50 0.831 ms, 2% apart (limit 10%); the timed pass p50 0.845 ms, 2% from the settled p50 0.831 ms (limit 10% or 0.1 ms; 0.014 ms); default@8: warm-up 15.0 s and 61,695 searches (0 failed) at 8 searchers; QPS of the last windows 4,124, 4,093, 4,150 (windows of at least 2 s and 100 searches); trial of 12,305 searches in 3.0 s at 8 searchers: 4,099 QPS against the settled 4,124 QPS, 1% apart (limit 10%); the timed pass 4,095 QPS, 1% from the settled 4,124 QPS (limit 10%).",
        "Pass exact after rehearsal: 2026-10-07T21:48:55.619Z to 2026-10-07T21:49:55.620Z (60.0 s), 26,974 searches, 0 failed, p50 2.183 ms, mean 2.222 ms, p99 3.445 ms, 449.6 QPS (1000/QPS 2.224 ms).",
        "Pass default@1 after exact: 2026-10-07T21:50:13.644Z to 2026-10-07T21:50:33.644Z (20.0 s), 23,168 searches, 0 failed, p50 0.845 ms, mean 0.861 ms, p99 1.274 ms, 1158.4 QPS (1000/QPS 0.863 ms).",
        "Pass default@8 after default@1: 2026-10-07T21:50:51.669Z to 2026-10-07T21:51:11.671Z (20.0 s), 81,909 searches, 0 failed, p50 1.901 ms, mean 1.951 ms, p99 3.566 ms, 4095.1 QPS (1000/QPS 0.244 ms).",
        "Passes in the order run: exact, default@1, default@8; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 281,351 sent, 0 failed (warmupErrors). Index after the searches: ready, ? of 524 indexed (pg_indexes lists gvb_gvbbench_eshoponweb_hnsw (USING hnsw (embedding vector_cosine_ops) WITH (m=\u002716\u0027, ef_construction=\u0027128\u0027)), pg_index valid and ready = True, EXPLAIN of the default search uses Index Scan on it = True, that search returned 10 of 10 rows; PostgreSQL keeps no entry count for an HNSW index, so indexed vectors are not reported).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-pgvector (95b597379f00) on network gvb-pgvector_default at container-ip:5432, not through docker-proxy localhost:5432. Open after the passes: container-ip:5432 x8 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-pgvector: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-pgvector: 6 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): exact 3492/3492 MHz, average 3492.8/3492.7, performance, outside load 0.13 before the warm-up, 0.13 during, client CPU 0.669 ms per search, engine CPU 2.057 ms per search; default@1 3492/3492 MHz, average 3492.6/3491.5, performance, outside load 0.13 before the warm-up, 0.14 during, client CPU 0.670 ms per search, engine CPU 0.710 ms per search; default@8 3492/3492 MHz, average 3492.0/3492.0, performance, outside load 0.14 before the warm-up, 0.11 during, client CPU 0.539 ms per search, engine CPU 0.950 ms per search."
      ]
    },
    {
      "name": "vespa",
      "engine": "Vespa 8.754.14 (tensor attribute \u002B HNSW)",
      "index": "HNSW float32 tensor, prenormalized-angular (cosine), max-links-per-node=16, neighbors-to-explore-at-insert=128; search targetHits=top, ef=100 via exploreAdditionalHits; exact mode = approximate:false; vectors held in memory",
      "hosting": "compose",
      "searchSettings": {
        "ef": "100",
        "max-links-per-node": "16",
        "neighbors-to-explore-at-insert": "128",
        "targetHits": "top"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 1.9848205,
        "rowsPerSecond": 264.0037222509542,
        "countMatchSeconds": 0.0122884,
        "indexSeconds": 0.0541528,
        "indexNote": "nothing to build, Vespa inserts into the HNSW graph while writing; ready after 0.1 s: HNSW graph returns 524 of 524 vectors: totalCount 524, coverage full True, nearestNeighbor approximate:true with targetHits above the count: has_index True, algorithm \u0022index top k\u0022, top_k_hits 524; the graph is updated while each write is applied, so there is no later build step"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 10101,
        "p50Ms": 1.9088,
        "p95Ms": 2.4135,
        "p99Ms": 2.734,
        "qps": {
          "1": 505.02499116243763,
          "8": 1570.6761108791757
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 30814,
        "exactP50Ms": 1.89,
        "exactP95Ms": 2.3134099999999993,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "1": 0.9178,
          "8": 0.8792
        }
      },
      "ram": {
        "bytes": 2971043627,
        "text": "2.77 GiB (docker stats)"
      },
      "disk": {
        "bytes": 10314598,
        "text": "9.84 MiB added by this load (2.13 GiB (whole engine data folder), 2.12 GiB before)"
      },
      "passOrder": [
        "default@1",
        "exact",
        "default@8"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "HNSW graph returns 524 of 524 vectors: totalCount 524, coverage full True, nearestNeighbor approximate:true with targetHits above the count: has_index True, algorithm \u0022index top k\u0022, top_k_hits 524; the graph is updated while each write is applied, so there is no later build step"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 524,
          "totalVectors": 524,
          "detail": "HNSW graph returns 524 of 524 vectors: totalCount 524, coverage full True, nearestNeighbor approximate:true with targetHits above the count: has_index True, algorithm \u0022index top k\u0022, top_k_hits 524; the graph is updated while each write is applied, so there is no later build step"
        }
      },
      "durability": "Vespa\u0027s transaction log server fsyncs after each commit: searchlib.translogserver usefsync=true, and an operation is searchable when it is acknowledged: proton documentdb visibilitydelay=0. Neither is overridden by this sink or by the services.xml it deploys; VespaReadinessTests reads both from the live config server. After a crash the node replays the transaction log over its last flushed data and rebuilds the in-memory HNSW graph. By those settings an acknowledged write survives a crash; this is read from the settings, not shown by pulling power. One node and min-redundancy 1, so a lost disk loses the data.",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "6442450944",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        }
      ],
      "image": {
        "ref": "vespaengine/vespa:8.754.14",
        "id": "sha256:5c30f5c41e7563498c4f925db6a837a3848f04726a3ed26aed4a7c8ab69f18fd",
        "pinnedId": "sha256:5c30f5c41e7563498c4f925db6a837a3848f04726a3ed26aed4a7c8ab69f18fd",
        "lastTagTimeUtc": "2026-10-03T14:13:52.169232039Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/vespa",
        "bytesAtStart": 2277161573,
        "bytesAtEnd": 2287476171
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started vespa.compose.yaml with every container created on CPUs 2-3,6-7: gvb-vespa cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [vespa.compose.yaml 3cfb702cc29f]. This run created the engine from these files.",
        "Index after the load: ready, 524 of 524 indexed (HNSW graph returns 524 of 524 vectors: totalCount 524, coverage full True, nearestNeighbor approximate:true with targetHits above the count: has_index True, algorithm \u0022index top k\u0022, top_k_hits 524; the graph is updated while each write is applied, so there is no later build step). Durability: Vespa\u0027s transaction log server fsyncs after each commit: searchlib.translogserver usefsync=true, and an operation is searchable when it is acknowledged: proton documentdb visibilitydelay=0. Neither is overridden by this sink or by the services.xml it deploys; VespaReadinessTests reads both from the live config server. After a crash the node replays the transaction log over its last flushed data and rebuilds the in-memory HNSW graph. By those settings an acknowledged write survives a crash; this is read from the settings, not shown by pulling power. One node and min-redundancy 1, so a lost disk loses the data..",
        "Outside load when searching began: 0.16 CPUs on average over the last 40 s and 0.15 over the last few seconds (limit 0.3), a quiet box. The load average 8.09 4.59 3.66 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@1 8,595 searches in 30.0 s, exact 12,587 searches in 30.0 s, default@8 44,862 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@1: warm-up 15.0 s and 7,190 searches (0 failed) at 1 searcher; p50 of the last windows 1.944, 1.939, 1.923 ms (windows of at least 2 s and 100 searches); trial of 1,517 searches in 3.0 s at 1 searcher: p50 1.907 ms against the settled p50 1.939 ms, 2% apart (limit 10%); the timed pass p50 1.909 ms, 2% from the settled p50 1.939 ms (limit 10% or 0.1 ms; 0.030 ms); exact: warm-up 15.0 s and 7,671 searches (0 failed) at 1 searcher; p50 of the last windows 1.898, 1.895, 1.897 ms (windows of at least 2 s and 100 searches); trial of 1,550 searches in 3.0 s at 1 searcher: p50 1.883 ms against the settled p50 1.897 ms, 1% apart (limit 10%); the timed pass p50 1.890 ms, 0% from the settled p50 1.897 ms (limit 10% or 0.1 ms; 0.007 ms); default@8: warm-up 15.0 s and 23,257 searches (0 failed) at 8 searchers; QPS of the last windows 1,488, 1,546, 1,560 (windows of at least 2 s and 100 searches); trial of 4,664 searches in 3.0 s at 8 searchers: 1,553 QPS against the settled 1,546 QPS, 0% apart (limit 10%); the timed pass 1,571 QPS, 2% from the settled 1,546 QPS (limit 10%).",
        "Pass default@1 after rehearsal: 2026-10-07T21:53:57.636Z to 2026-10-07T21:54:17.637Z (20.0 s), 10,101 searches, 0 failed, p50 1.909 ms, mean 1.977 ms, p99 2.734 ms, 505.0 QPS (1000/QPS 1.980 ms).",
        "Pass exact after default@1: 2026-10-07T21:54:35.647Z to 2026-10-07T21:55:35.648Z (60.0 s), 30,814 searches, 0 failed, p50 1.890 ms, mean 1.944 ms, p99 2.619 ms, 513.6 QPS (1000/QPS 1.947 ms).",
        "Pass default@8 after exact: 2026-10-07T21:55:53.678Z to 2026-10-07T21:56:13.683Z (20.0 s), 31,420 searches, 0 failed, p50 4.976 ms, mean 5.090 ms, p99 8.354 ms, 1570.7 QPS (1000/QPS 0.637 ms).",
        "Passes in the order run: default@1, exact, default@8; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 111,893 sent, 0 failed (warmupErrors). Index after the searches: ready, 524 of 524 indexed (HNSW graph returns 524 of 524 vectors: totalCount 524, coverage full True, nearestNeighbor approximate:true with targetHits above the count: has_index True, algorithm \u0022index top k\u0022, top_k_hits 524; the graph is updated while each write is applied, so there is no later build step).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-vespa (623ee2444ee6) on network engines_default at container-ip:8080, not through docker-proxy localhost:8090; container gvb-vespa (623ee2444ee6) on network engines_default at container-ip:19071, not through docker-proxy localhost:19071. Open after the passes: container-ip:8080 x1 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-vespa: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-vespa: 215 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@1 3492/3492 MHz, average 3492.0/3492.4, performance, outside load 0.15 before the warm-up, 0.13 during, client CPU 0.918 ms per search, engine CPU 2.307 ms per search; exact 3492/3492 MHz, average 3492.0/3492.4, performance, outside load 0.14 before the warm-up, 0.11 during, client CPU 0.913 ms per search, engine CPU 2.215 ms per search; default@8 3492/3492 MHz, average 3492.0/3492.0, performance, outside load 0.11 before the warm-up, 0.18 during, client CPU 0.879 ms per search, engine CPU 2.434 ms per search."
      ]
    },
    {
      "name": "elasticsearch",
      "engine": "Elasticsearch 9.5.3 (dense_vector)",
      "index": "HNSW float32, no quantization, m=16, ef_construction=128, cosine; search k=top, num_candidates=100; 1 shard, 0 replicas; force-merged to one segment after the load (at 1,024 dimensions a segment under 1,043 vectors gets no graph)",
      "hosting": "compose",
      "searchSettings": {
        "ef_construction": "128",
        "k": "top",
        "m": "16",
        "num_candidates": "100"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 1.1282959,
        "rowsPerSecond": 464.4171799259397,
        "countMatchSeconds": 0.1028007,
        "indexSeconds": 0.3884127,
        "indexNote": "FAILED after 0.4 s: NO HNSW GRAPH, searches scan all 524 vectors: 1 segment(s), 524 vectors, total_vex_size_bytes 0 (_stats dense_vector), index_options hnsw m=16 ef_construction=128; Lucene builds no graph for a segment this small (measured at 1,024 dimensions: 1,042 vectors none, 1,043 vectors a graph), so default search equals exact search"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 14990,
        "p50Ms": 1.3127,
        "p95Ms": 1.47311,
        "p99Ms": 1.730822,
        "qps": {
          "1": 749.4569212161684,
          "8": 2714.1035322582356
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 47265,
        "exactP50Ms": 1.2468,
        "exactP95Ms": 1.4292,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "1": 0.455,
          "8": 0.493
        }
      },
      "ram": {
        "bytes": 2791728742,
        "text": "2.6 GiB (docker stats)"
      },
      "disk": {
        "bytes": 2501146,
        "text": "2.39 MiB added by this load (2.57 MiB (whole engine data folder), 188.87 KiB before)"
      },
      "passOrder": [
        "default@1",
        "exact",
        "default@8"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": false,
          "indexedVectors": 0,
          "totalVectors": 524,
          "detail": "NO HNSW GRAPH, searches scan all 524 vectors: 1 segment(s), 524 vectors, total_vex_size_bytes 0 (_stats dense_vector), index_options hnsw m=16 ef_construction=128; Lucene builds no graph for a segment this small (measured at 1,024 dimensions: 1,042 vectors none, 1,043 vectors a graph), so default search equals exact search"
        },
        "afterSearch": {
          "ready": false,
          "indexedVectors": 0,
          "totalVectors": 524,
          "detail": "NO HNSW GRAPH, searches scan all 524 vectors: 1 segment(s), 524 vectors, total_vex_size_bytes 0 (_stats dense_vector), index_options hnsw m=16 ef_construction=128; Lucene builds no graph for a segment this small (measured at 1,024 dimensions: 1,042 vectors none, 1,043 vectors a graph), so default search equals exact search"
        }
      },
      "durability": "Every acknowledged bulk request is fsynced to the translog before the answer: index.translog.durability=request, the Elasticsearch default, which neither this sink nor elasticsearch.compose.yaml overrides (ElasticsearchReadinessTests reads it back from the live index). By that setting a process crash or power loss loses no acknowledged write; this is read from the setting, not shown by pulling power. One node and no replicas, so a lost disk loses the data.",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "6442450944",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "heap_init_in_bytes",
          "value": "2147483648",
          "how": "read: GET /_nodes/jvm (nodes.\u003Cid\u003E.jvm.mem.heap_init_in_bytes and heap_max_in_bytes)"
        },
        {
          "key": "heap_max_in_bytes",
          "value": "2147483648",
          "how": "read: GET /_nodes/jvm (nodes.\u003Cid\u003E.jvm.mem.heap_init_in_bytes and heap_max_in_bytes)"
        }
      ],
      "image": {
        "ref": "elasticsearch:9.5.3",
        "id": "sha256:e23d4758358a4e356cc2ef3259a5a6f345cacc1722c10dffe6d7150a1a78e52f",
        "pinnedId": "sha256:e23d4758358a4e356cc2ef3259a5a6f345cacc1722c10dffe6d7150a1a78e52f",
        "lastTagTimeUtc": "2026-10-03T14:07:11.337389556Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/elasticsearch",
        "bytesAtStart": 193405,
        "bytesAtEnd": 2694551
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started elasticsearch.compose.yaml with every container created on CPUs 2-3,6-7: gvb-elasticsearch cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [elasticsearch.compose.yaml 582b9a97b8de]. This run created the engine from these files.",
        "WARNING: the index step after the load FAILED (NO HNSW GRAPH, searches scan all 524 vectors: 1 segment(s), 524 vectors, total_vex_size_bytes 0 (_stats dense_vector), index_options hnsw m=16 ef_construction=128; Lucene builds no graph for a segment this small (measured at 1,024 dimensions: 1,042 vectors none, 1,043 vectors a graph), so default search equals exact search). Searched anyway; see the index state.",
        "WARNING: index not ready after the load: NOT ready, 0 of 524 indexed (NO HNSW GRAPH, searches scan all 524 vectors: 1 segment(s), 524 vectors, total_vex_size_bytes 0 (_stats dense_vector), index_options hnsw m=16 ef_construction=128; Lucene builds no graph for a segment this small (measured at 1,024 dimensions: 1,042 vectors none, 1,043 vectors a graph), so default search equals exact search). Measured anyway, so its search numbers may come from a scan or a half-built index. Durability: Every acknowledged bulk request is fsynced to the translog before the answer: index.translog.durability=request, the Elasticsearch default, which neither this sink nor elasticsearch.compose.yaml overrides (ElasticsearchReadinessTests reads it back from the live index). By that setting a process crash or power loss loses no acknowledged write; this is read from the setting, not shown by pulling power. One node and no replicas, so a lost disk loses the data..",
        "Outside load when searching began: 0.09 CPUs on average over the last 2 s and 0.09 over the last few seconds (limit 0.3), a quiet box. The load average 4.61 4.61 3.90 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@1 13,582 searches in 30.0 s, exact 22,018 searches in 30.0 s, default@8 75,937 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@1: warm-up 15.0 s and 11,106 searches (0 failed) at 1 searcher; p50 of the last windows 1.313, 1.309, 1.324 ms (windows of at least 2 s and 100 searches); trial of 2,254 searches in 3.0 s at 1 searcher: p50 1.315 ms against the settled p50 1.313 ms, 0% apart (limit 10%); the timed pass p50 1.313 ms, 0% from the settled p50 1.313 ms (limit 10% or 0.1 ms; 0.000 ms); exact: warm-up 15.0 s and 11,744 searches (0 failed) at 1 searcher; p50 of the last windows 1.245, 1.253, 1.249 ms (windows of at least 2 s and 100 searches); trial of 2,375 searches in 3.0 s at 1 searcher: p50 1.245 ms against the settled p50 1.249 ms, 0% apart (limit 10%); the timed pass p50 1.247 ms, 0% from the settled p50 1.249 ms (limit 10% or 0.1 ms; 0.002 ms); default@8: warm-up 15.0 s and 40,398 searches (0 failed) at 8 searchers; QPS of the last windows 2,650, 2,720, 2,662 (windows of at least 2 s and 100 searches); trial of 8,192 searches in 3.0 s at 8 searchers: 2,728 QPS against the settled 2,662 QPS, 2% apart (limit 10%); the timed pass 2,714 QPS, 2% from the settled 2,662 QPS (limit 10%).",
        "Pass default@1 after rehearsal: 2026-10-07T21:58:44.268Z to 2026-10-07T21:59:04.269Z (20.0 s), 14,990 searches, 0 failed, p50 1.313 ms, mean 1.332 ms, p99 1.731 ms, 749.5 QPS (1000/QPS 1.334 ms).",
        "Pass exact after default@1: 2026-10-07T21:59:22.286Z to 2026-10-07T22:00:22.287Z (60.0 s), 47,265 searches, 0 failed, p50 1.247 ms, mean 1.267 ms, p99 1.702 ms, 787.7 QPS (1000/QPS 1.269 ms).",
        "Pass default@8 after exact: 2026-10-07T22:00:40.332Z to 2026-10-07T22:01:00.334Z (20.0 s), 54,287 searches, 0 failed, p50 2.816 ms, mean 2.945 ms, p99 5.314 ms, 2714.1 QPS (1000/QPS 0.368 ms).",
        "Passes in the order run: default@1, exact, default@8; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 187,606 sent, 0 failed (warmupErrors). Index after the searches: NOT ready, 0 of 524 indexed (NO HNSW GRAPH, searches scan all 524 vectors: 1 segment(s), 524 vectors, total_vex_size_bytes 0 (_stats dense_vector), index_options hnsw m=16 ef_construction=128; Lucene builds no graph for a segment this small (measured at 1,024 dimensions: 1,042 vectors none, 1,043 vectors a graph), so default search equals exact search).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-elasticsearch (3da18534bcc9) on network engines_default at container-ip:9200, not through docker-proxy localhost:9200. Open after the passes: container-ip:9200 x8 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-elasticsearch: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-elasticsearch: 74 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@1 3492/3492 MHz, average 3492.1/3492.6, performance, outside load 0.16 before the warm-up, 0.13 during, client CPU 0.455 ms per search, engine CPU 1.045 ms per search; exact 3492/3492 MHz, average 3491.8/3489.9, performance, outside load 0.15 before the warm-up, 0.15 during, client CPU 0.455 ms per search, engine CPU 0.969 ms per search; default@8 3492/3492 MHz, average 3492.0/3492.1, performance, outside load 0.15 before the warm-up, 0.15 during, client CPU 0.493 ms per search, engine CPU 1.379 ms per search."
      ]
    },
    {
      "name": "mariadb",
      "engine": "MariaDB 11.8.9 (InnoDB \u002B VECTOR INDEX)",
      "index": "VECTOR INDEX (HNSW variant) DISTANCE=cosine, M=16 (no ef_construction setting exists), mhnsw_ef_search=100 per statement (the ef 100 most engines here use, so the search effort matches; MariaDB\u0027s own default is 20; recall@10 at ef 100 falls as the set grows (random 1024-dimension vectors, measured 2026-10-04: 0.99 at 524, 0.89 to 0.92 at 2,000; an earlier run gave about 0.09 at 100,000)), mhnsw_max_cache_size 4G; exact mode = IGNORE INDEX full scan",
      "hosting": "compose",
      "searchSettings": {
        "DISTANCE": "cosine",
        "M": "16",
        "mhnsw_ef_search": "100"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.5026459,
        "rowsPerSecond": 1042.4833864157652,
        "countMatchSeconds": 0.0049456,
        "indexSeconds": 0.5272363,
        "indexNote": "VECTOR INDEX is maintained inside every INSERT, nothing to build; confirmed after 2 poll(s) in 0.5 s (poll 1 of 2 said: not ready: a search at mhnsw_ef_search 100 returned only 397 of 524 requested rows through the index (EXPLAIN key \u0027vec_idx\u0027) (information_schema lists vec_idx as INDEX_TYPE VECTOR, EXPLAIN of the default search uses key vec_idx, the server applied mhnsw_ef_search 100 (asked for 100, read back from the server), a search at that effort returned 397 of 524 requested rows through the index; MariaDB has no per-index row count (the graph is a hidden InnoDB table), so indexed vectors are not reported)): information_schema lists vec_idx as INDEX_TYPE VECTOR, EXPLAIN of the default search uses key vec_idx, the server applied mhnsw_ef_search 100 (asked for 100, read back from the server), a search at that effort returned 521 of 524 requested rows through the index; MariaDB has no per-index row count (the graph is a hidden InnoDB table), so indexed vectors are not reported"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 30984,
        "p50Ms": 0.6348,
        "p95Ms": 0.71,
        "p99Ms": 0.8721019999999989,
        "qps": {
          "8": 5927.248491846133,
          "1": 1549.1505743509254
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 36181,
        "exactP50Ms": 1.6308,
        "exactP95Ms": 1.7435,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "8": 0.3802,
          "1": 0.4857
        }
      },
      "ram": {
        "bytes": 163682713,
        "text": "156.1 MiB (docker stats)"
      },
      "disk": {
        "bytes": 23077570,
        "text": "22.01 MiB added by this load (188.8 MiB (whole engine data folder), 166.79 MiB before)"
      },
      "passOrder": [
        "default@8",
        "default@1",
        "exact"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "totalVectors": 524,
          "detail": "information_schema lists vec_idx as INDEX_TYPE VECTOR, EXPLAIN of the default search uses key vec_idx, the server applied mhnsw_ef_search 100 (asked for 100, read back from the server), a search at that effort returned 521 of 524 requested rows through the index; MariaDB has no per-index row count (the graph is a hidden InnoDB table), so indexed vectors are not reported"
        },
        "afterSearch": {
          "ready": true,
          "totalVectors": 524,
          "detail": "information_schema lists vec_idx as INDEX_TYPE VECTOR, EXPLAIN of the default search uses key vec_idx, the server applied mhnsw_ef_search 100 (asked for 100, read back from the server), a search at that effort returned 521 of 524 requested rows through the index; MariaDB has no per-index row count (the graph is a hidden InnoDB table), so indexed vectors are not reported"
        }
      },
      "durability": "innodb_flush_log_at_trx_commit=2 (set in mariadb-bench.compose.yaml for the benchmark\u0027s own container gvbbench-mariadb, and in mariadb.compose.yaml for the daily gvb-mariadb, which has the same server settings): the InnoDB redo log is written to the operating system at every commit but fsynced about once a second, so a crash of the mariadbd process loses nothing, while an operating-system crash or power cut can lose the last second of commits; innodb_doublewrite is on (default), the binary log is off, and the vector graph is an InnoDB table under the same log (settings read from the running server with SHOW VARIABLES; the crash behaviour is InnoDB\u0027s documented behaviour for this setting and was not tested on either container)",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "8589934592",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "innodb_buffer_pool_size",
          "value": "2147483648",
          "how": "read: docker exec gvbbench-mariadb mariadb SHOW GLOBAL VARIABLES"
        },
        {
          "key": "innodb_flush_log_at_trx_commit",
          "value": "2",
          "how": "read: docker exec gvbbench-mariadb mariadb SHOW GLOBAL VARIABLES"
        },
        {
          "key": "mhnsw_max_cache_size",
          "value": "4294967296",
          "how": "read: docker exec gvbbench-mariadb mariadb SHOW GLOBAL VARIABLES"
        }
      ],
      "image": {
        "ref": "mariadb:11.8.9",
        "id": "sha256:6422478cb8e159f080fb1d8ccf65101e26fe51385787fde7d16c3b165a331f15",
        "pinnedId": "sha256:6422478cb8e159f080fb1d8ccf65101e26fe51385787fde7d16c3b165a331f15",
        "lastTagTimeUtc": "2026-10-03T14:10:11.675870329Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/mariadb-bench",
        "bytesAtStart": 174877277,
        "bytesAtEnd": 197971222
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started mariadb-bench.compose.yaml with every container created on CPUs 2-3,6-7: gvbbench-mariadb cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [mariadb-bench.compose.yaml e9a2147e6f91]. This run created the engine from these files.",
        "Index after the load: ready, ? of 524 indexed (information_schema lists vec_idx as INDEX_TYPE VECTOR, EXPLAIN of the default search uses key vec_idx, the server applied mhnsw_ef_search 100 (asked for 100, read back from the server), a search at that effort returned 521 of 524 requested rows through the index; MariaDB has no per-index row count (the graph is a hidden InnoDB table), so indexed vectors are not reported). Durability: innodb_flush_log_at_trx_commit=2 (set in mariadb-bench.compose.yaml for the benchmark\u0027s own container gvbbench-mariadb, and in mariadb.compose.yaml for the daily gvb-mariadb, which has the same server settings): the InnoDB redo log is written to the operating system at every commit but fsynced about once a second, so a crash of the mariadbd process loses nothing, while an operating-system crash or power cut can lose the last second of commits; innodb_doublewrite is on (default), the binary log is off, and the vector graph is an InnoDB table under the same log (settings read from the running server with SHOW VARIABLES; the crash behaviour is InnoDB\u0027s documented behaviour for this setting and was not tested on either container).",
        "Outside load when searching began: 0.11 CPUs on average over the last 1 s and 0.11 over the last few seconds (limit 0.3), a quiet box. The load average 4.51 3.94 3.75 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@8 178,371 searches in 30.0 s, default@1 47,197 searches in 30.0 s, exact 18,132 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@8: warm-up 15.0 s and 88,906 searches (0 failed) at 8 searchers; QPS of the last windows 5,922, 5,990, 5,932 (windows of at least 2 s and 100 searches); trial of 17,882 searches in 3.0 s at 8 searchers: 5,959 QPS against the settled 5,932 QPS, 0% apart (limit 10%); the timed pass 5,927 QPS, 0% from the settled 5,932 QPS (limit 10%); default@1: warm-up 15.0 s and 23,397 searches (0 failed) at 1 searcher; p50 of the last windows 0.641, 0.628, 0.628 ms (windows of at least 2 s and 100 searches); trial of 4,644 searches in 3.0 s at 1 searcher: p50 0.632 ms against the settled p50 0.628 ms, 1% apart (limit 10%); the timed pass p50 0.635 ms, 1% from the settled p50 0.628 ms (limit 10% or 0.1 ms; 0.006 ms); exact: warm-up 15.0 s and 9,000 searches (0 failed) at 1 searcher; p50 of the last windows 1.664, 1.623, 1.626 ms (windows of at least 2 s and 100 searches); trial of 1,816 searches in 3.0 s at 1 searcher: p50 1.633 ms against the settled p50 1.626 ms, 0% apart (limit 10%); the timed pass p50 1.631 ms, 0% from the settled p50 1.626 ms (limit 10% or 0.1 ms; 0.005 ms).",
        "Pass default@8 after rehearsal: 2026-10-07T22:02:59.940Z to 2026-10-07T22:03:19.941Z (20.0 s), 118,554 searches, 0 failed, p50 1.302 ms, mean 1.348 ms, p99 2.496 ms, 5927.2 QPS (1000/QPS 0.169 ms).",
        "Pass default@1 after default@8: 2026-10-07T22:03:37.994Z to 2026-10-07T22:03:57.995Z (20.0 s), 30,984 searches, 0 failed, p50 0.635 ms, mean 0.644 ms, p99 0.872 ms, 1549.2 QPS (1000/QPS 0.646 ms).",
        "Pass exact after default@1: 2026-10-07T22:04:16.032Z to 2026-10-07T22:05:16.032Z (60.0 s), 36,181 searches, 0 failed, p50 1.631 ms, mean 1.656 ms, p99 2.180 ms, 603.0 QPS (1000/QPS 1.658 ms).",
        "Passes in the order run: default@8, default@1, exact; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 389,345 sent, 0 failed (warmupErrors). Index after the searches: ready, ? of 524 indexed (information_schema lists vec_idx as INDEX_TYPE VECTOR, EXPLAIN of the default search uses key vec_idx, the server applied mhnsw_ef_search 100 (asked for 100, read back from the server), a search at that effort returned 521 of 524 requested rows through the index; MariaDB has no per-index row count (the graph is a hidden InnoDB table), so indexed vectors are not reported).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvbbench-mariadb (e002b74d541a) on network gvbbench-mariadb_default at container-ip:3306, not through docker-proxy localhost:13306. Open after the passes: container-ip:3306 x8 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvbbench-mariadb: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvbbench-mariadb: 12 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@8 3492/3492 MHz, average 3492.0/3492.0, performance, outside load 0.14 before the warm-up, 0.09 during, client CPU 0.380 ms per search, engine CPU 0.621 ms per search; default@1 3493/3492 MHz, average 3494.8/3492.3, performance, outside load 0.10 before the warm-up, 0.13 during, client CPU 0.486 ms per search, engine CPU 0.454 ms per search; exact 3492/3492 MHz, average 3494.7/3492.9, performance, outside load 0.12 before the warm-up, 0.13 during, client CPU 0.497 ms per search, engine CPU 1.458 ms per search."
      ]
    },
    {
      "name": "chroma",
      "engine": "Chroma 1.4.4 (single node, REST API v2)",
      "index": "HNSW M=16 ef_construction=128, ef_search=100 (Chroma default), cosine; approximate only (no exact mode)",
      "hosting": "compose",
      "searchSettings": {
        "M": "16",
        "ef_construction": "128",
        "ef_search": "100"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.7491221,
        "rowsPerSecond": 699.4854376876614,
        "countMatchSeconds": 0.0231193,
        "indexSeconds": 0.017945,
        "indexNote": "Chroma has no index build to wait for and exposes no index status; checked in 0.0 s: Chroma exposes no index status (indexing_status endpoint: HTTP 500 {\u0022error\u0022:\u0022InternalError\u0022,\u0022message\u0022:\u0022Method scout_logs is not implemented\u0022}), so indexed vectors are not reported and ready only means the two counts agree to within 1 percent: count endpoint 524, a vector search asking for 524 results returned 524"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 9509,
        "p50Ms": 2.0792,
        "p95Ms": 2.3568600000000006,
        "p99Ms": 2.615268,
        "qps": {
          "8": 791.0136253821347,
          "1": 475.3971405919376
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 0,
        "clientCpuMsPerSearch": {
          "8": 0.4723,
          "1": 0.4749
        }
      },
      "ram": {
        "bytes": 51600424,
        "text": "49.21 MiB (docker stats)"
      },
      "disk": {
        "bytes": 424100,
        "text": "414.16 KiB added by this load (2.01 GiB (whole engine data folder), 2.01 GiB before)"
      },
      "passOrder": [
        "default@8",
        "default@1"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "totalVectors": 524,
          "detail": "Chroma exposes no index status (indexing_status endpoint: HTTP 500 {\u0022error\u0022:\u0022InternalError\u0022,\u0022message\u0022:\u0022Method scout_logs is not implemented\u0022}), so indexed vectors are not reported and ready only means the two counts agree to within 1 percent: count endpoint 524, a vector search asking for 524 results returned 524"
        },
        "afterSearch": {
          "ready": true,
          "totalVectors": 524,
          "detail": "Chroma exposes no index status (indexing_status endpoint: HTTP 500 {\u0022error\u0022:\u0022InternalError\u0022,\u0022message\u0022:\u0022Method scout_logs is not implemented\u0022}), so indexed vectors are not reported and ready only means the two counts agree to within 1 percent: count endpoint 524, a vector search asking for 524 results returned 524"
        }
      },
      "durability": "SQLite rollback journal with its default synchronous=FULL under the data directory (chroma.compose.yaml sets IS_PERSISTENT=1 and PERSIST_DIRECTORY=/data and no sync setting): every write is committed to chroma.sqlite3 with fsync of the journal, the directory and the database file before the call returns (strace: 15 database fsyncs and 38 journal fsyncs for one create, four 500-vector upserts and one delete), and the HNSW files are written every sync_threshold=1000 vectors and rebuilt from the SQLite log after a crash; measured with kill -9 and a restart: all 50, 300 and 2,000 vectors were still stored and searchable",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "6442450944",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "chroma_version",
          "value": "1.0.0",
          "how": "read: GET /api/v2/version"
        }
      ],
      "image": {
        "ref": "chromadb/chroma:latest",
        "id": "sha256:1e0b73a187a28757c572acba508c46f48c9e8b0acaf5c20e6d95cdedce1acdf6",
        "pinnedId": "sha256:1e0b73a187a28757c572acba508c46f48c9e8b0acaf5c20e6d95cdedce1acdf6",
        "lastTagTimeUtc": "2026-10-03T14:09:56.392230738Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/chroma",
        "bytesAtStart": 2156093864,
        "bytesAtEnd": 2156517964
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started chroma.compose.yaml with every container created on CPUs 2-3,6-7: gvb-chroma cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [chroma.compose.yaml f7ed9d3c8ff7]. This run created the engine from these files.",
        "Index after the load: ready, ? of 524 indexed (Chroma exposes no index status (indexing_status endpoint: HTTP 500 {\u0022error\u0022:\u0022InternalError\u0022,\u0022message\u0022:\u0022Method scout_logs is not implemented\u0022}), so indexed vectors are not reported and ready only means the two counts agree to within 1 percent: count endpoint 524, a vector search asking for 524 results returned 524). Durability: SQLite rollback journal with its default synchronous=FULL under the data directory (chroma.compose.yaml sets IS_PERSISTENT=1 and PERSIST_DIRECTORY=/data and no sync setting): every write is committed to chroma.sqlite3 with fsync of the journal, the directory and the database file before the call returns (strace: 15 database fsyncs and 38 journal fsyncs for one create, four 500-vector upserts and one delete), and the HNSW files are written every sync_threshold=1000 vectors and rebuilt from the SQLite log after a crash; measured with kill -9 and a restart: all 50, 300 and 2,000 vectors were still stored and searchable.",
        "Outside load when searching began: 0.25 CPUs on average over the last 1 s and 0.25 over the last few seconds (limit 0.3), a quiet box. The load average 1.87 3.49 3.67 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@8 23,686 searches in 30.0 s, default@1 14,263 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@8: warm-up 15.0 s and 11,874 searches (0 failed) at 8 searchers; QPS of the last windows 788, 792, 790 (windows of at least 2 s and 100 searches); trial of 2,385 searches in 3.0 s at 8 searchers: 793 QPS against the settled 790 QPS, 0% apart (limit 10%); the timed pass 791 QPS, 0% from the settled 790 QPS (limit 10%); default@1: warm-up 15.0 s and 7,161 searches (0 failed) at 1 searcher; p50 of the last windows 2.064, 2.067, 2.072 ms (windows of at least 2 s and 100 searches); trial of 1,433 searches in 3.0 s at 1 searcher: p50 2.069 ms against the settled p50 2.067 ms, 0% apart (limit 10%); the timed pass p50 2.079 ms, 1% from the settled p50 2.067 ms (limit 10% or 0.1 ms; 0.012 ms).",
        "Pass default@8 after rehearsal: 2026-10-07T22:06:42.955Z to 2026-10-07T22:07:02.962Z (20.0 s), 15,826 searches, 0 failed, p50 10.056 ms, mean 10.110 ms, p99 11.695 ms, 791.0 QPS (1000/QPS 1.264 ms).",
        "Pass default@1 after default@8: 2026-10-07T22:07:20.970Z to 2026-10-07T22:07:40.972Z (20.0 s), 9,509 searches, 0 failed, p50 2.079 ms, mean 2.102 ms, p99 2.615 ms, 475.4 QPS (1000/QPS 2.104 ms).",
        "Passes in the order run: default@8, default@1; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 60,802 sent, 0 failed (warmupErrors). Index after the searches: ready, ? of 524 indexed (Chroma exposes no index status (indexing_status endpoint: HTTP 500 {\u0022error\u0022:\u0022InternalError\u0022,\u0022message\u0022:\u0022Method scout_logs is not implemented\u0022}), so indexed vectors are not reported and ready only means the two counts agree to within 1 percent: count endpoint 524, a vector search asking for 524 results returned 524).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-chroma (e341a21a45e5) on network gvb-chroma_default at container-ip:8000, not through docker-proxy localhost:8000. Open after the passes: container-ip:8000 x8 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-chroma: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-chroma: 9 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@8 3492/3492 MHz, average 3492.0/3492.5, performance, outside load 0.09 before the warm-up, 0.06 during, client CPU 0.472 ms per search, engine CPU 2.712 ms per search; default@1 3492/3492 MHz, average 3492.0/3492.9, performance, outside load 0.08 before the warm-up, 0.09 during, client CPU 0.475 ms per search, engine CPU 2.464 ms per search."
      ]
    },
    {
      "name": "sqlitevec",
      "engine": "SQLite 3.53.3 \u002B sqlite-vec 0.1.7-alpha.2.1 (vec0, embedded, in process)",
      "index": "vec0 brute-force scan, no ANN index (exact), float32, cosine distance, default chunk_size=1024; score = 1 - cosine distance; searches run concurrently, one WAL reader connection per searcher (opened as searchers arrive, at most 32), writes run one at a time and may overlap searches",
      "hosting": "embedded",
      "searchSettings": {
        "chunk_size": "1024"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.1417169,
        "rowsPerSecond": 3697.512435002459,
        "countMatchSeconds": 0.0024455,
        "indexSeconds": 0.0035347,
        "indexNote": "nothing to build, every search scans all vectors; checked in 0.00 s: no index, exact scan by design: gvb_gvbbench_eshoponweb is a vec0 virtual table holding 524 vectors and every search compares all of them (EXPLAIN QUERY PLAN: SCAN gvb_gvbbench_eshoponweb VIRTUAL TABLE INDEX 0:3{___}___ | USE TEMP B-TREE FOR ORDER BY)"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 10284,
        "p50Ms": 1.9154,
        "p95Ms": 2.1460850000000002,
        "p99Ms": 2.354936,
        "qps": {
          "1": 514.1936779887292,
          "8": 1130.7841907371057
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 30879,
        "exactP50Ms": 1.9174,
        "exactP95Ms": 2.1123,
        "exactRecall": 1,
        "clientCpuMsPerSearch": {
          "1": 2.0565,
          "8": 3.5296
        }
      },
      "ram": {
        "text": "in this process, not measured"
      },
      "disk": {
        "bytes": 10196088,
        "text": "9.72 MiB added by this load (302.65 MiB (engine data folder), 292.93 MiB before)"
      },
      "passOrder": [
        "default@1",
        "default@8",
        "exact"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "totalVectors": 524,
          "detail": "no index, exact scan by design: gvb_gvbbench_eshoponweb is a vec0 virtual table holding 524 vectors and every search compares all of them (EXPLAIN QUERY PLAN: SCAN gvb_gvbbench_eshoponweb VIRTUAL TABLE INDEX 0:3{___}___ | USE TEMP B-TREE FOR ORDER BY)"
        },
        "afterSearch": {
          "ready": true,
          "totalVectors": 524,
          "detail": "no index, exact scan by design: gvb_gvbbench_eshoponweb is a vec0 virtual table holding 524 vectors and every search compares all of them (EXPLAIN QUERY PLAN: SCAN gvb_gvbbench_eshoponweb VIRTUAL TABLE INDEX 0:3{___}___ | USE TEMP B-TREE FOR ORDER BY)"
        }
      },
      "durability": "PRAGMA journal_mode=WAL and PRAGMA synchronous=NORMAL (set by this sink when it opens the file): each commit is appended to the -wal file and handed to the operating system, but the WAL is fsynced only when SQLite checkpoints it (measured with strace: 40 single-record commits caused 3 WAL fsyncs), so a crash of the process loses nothing (measured with kill -9 and a reopen: all 50, 300 and 2,000 rows were there), while an operating-system crash or power cut can lose the newest commits since the last checkpoint and leaves the database consistent",
      "engineSettings": [
        {
          "key": "sqlite_version",
          "value": "3.53.3",
          "how": "read: SELECT sqlite_version() on an in-memory SQLite connection"
        },
        {
          "key": "synchronous",
          "value": "NORMAL",
          "how": "set: src/GenericVectorBuilder.Engines/Sinks/SqliteVecSink.cs#PRAGMA synchronous=NORMAL"
        },
        {
          "key": "journal_mode",
          "value": "wal",
          "how": "read: PRAGMA journal_mode on a second, read-only connection to the bench file"
        }
      ],
      "dataFolder": {
        "path": "~/gvb-data/engines/sqlitevec",
        "bytesAtStart": 307154808,
        "bytesAtEnd": 317350896,
        "benchFileBytes": 10196088
      },
      "notes": [
        "Index after the load: ready, ? of 524 indexed (no index, exact scan by design: gvb_gvbbench_eshoponweb is a vec0 virtual table holding 524 vectors and every search compares all of them (EXPLAIN QUERY PLAN: SCAN gvb_gvbbench_eshoponweb VIRTUAL TABLE INDEX 0:3{___}___ | USE TEMP B-TREE FOR ORDER BY)). Durability: PRAGMA journal_mode=WAL and PRAGMA synchronous=NORMAL (set by this sink when it opens the file): each commit is appended to the -wal file and handed to the operating system, but the WAL is fsynced only when SQLite checkpoints it (measured with strace: 40 single-record commits caused 3 WAL fsyncs), so a crash of the process loses nothing (measured with kill -9 and a reopen: all 50, 300 and 2,000 rows were there), while an operating-system crash or power cut can lose the newest commits since the last checkpoint and leaves the database consistent.",
        "Outside load when searching began: not known yet (too little sampled history). Load average 1.97 2.99 3.46 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@1 15,402 searches in 30.0 s, default@8 33,958 searches in 30.0 s, exact 15,404 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@1: warm-up 15.0 s and 7,698 searches (0 failed) at 1 searcher; p50 of the last windows 1.919, 1.926, 1.927 ms (windows of at least 2 s and 100 searches); trial of 1,548 searches in 3.0 s at 1 searcher: p50 1.920 ms against the settled p50 1.926 ms, 0% apart (limit 10%); the timed pass p50 1.915 ms, 1% from the settled p50 1.926 ms (limit 10% or 0.1 ms; 0.010 ms); default@8: warm-up 15.0 s and 16,931 searches (0 failed) at 8 searchers; QPS of the last windows 1,140, 1,124, 1,124 (windows of at least 2 s and 100 searches); trial of 3,390 searches in 3.0 s at 8 searchers: 1,129 QPS against the settled 1,124 QPS, 0% apart (limit 10%); the timed pass 1,131 QPS, 1% from the settled 1,124 QPS (limit 10%); exact: warm-up 15.0 s and 7,719 searches (0 failed) at 1 searcher; p50 of the last windows 1.922, 1.913, 1.916 ms (windows of at least 2 s and 100 searches); trial of 1,542 searches in 3.0 s at 1 searcher: p50 1.926 ms against the settled p50 1.916 ms, 1% apart (limit 10%); the timed pass p50 1.917 ms, 0% from the settled p50 1.916 ms (limit 10% or 0.1 ms; 0.002 ms).",
        "Pass default@1 after rehearsal: 2026-10-07T22:09:30.846Z to 2026-10-07T22:09:50.846Z (20.0 s), 10,284 searches, 0 failed, p50 1.915 ms, mean 1.942 ms, p99 2.355 ms, 514.2 QPS (1000/QPS 1.945 ms).",
        "Pass default@8 after default@1: 2026-10-07T22:10:08.863Z to 2026-10-07T22:10:28.865Z (20.0 s), 22,618 searches, 0 failed, p50 6.750 ms, mean 7.061 ms, p99 14.501 ms, 1130.8 QPS (1000/QPS 0.884 ms).",
        "Pass exact after default@8: 2026-10-07T22:10:46.874Z to 2026-10-07T22:11:46.874Z (60.0 s), 30,879 searches, 0 failed, p50 1.917 ms, mean 1.940 ms, p99 2.351 ms, 514.6 QPS (1000/QPS 1.943 ms).",
        "Passes in the order run: default@1, default@8, exact; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 103,592 sent, 0 failed (warmupErrors). Index after the searches: ready, ? of 524 indexed (no index, exact scan by design: gvb_gvbbench_eshoponweb is a vec0 virtual table holding 524 vectors and every search compares all of them (EXPLAIN QUERY PLAN: SCAN gvb_gvbbench_eshoponweb VIRTUAL TABLE INDEX 0:3{___}___ | USE TEMP B-TREE FOR ORDER BY)).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: in this process (embedded), no network: no network address. No open connection seen (no open TCP connection was found).",
        "CPU pinning: none: an embedded engine runs inside the benchmark client process, so it shares the client CPUs, CPUs 0-1,4-5.",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@1 3496/3492 MHz, average 3496.7/3494.6, performance, outside load 0.15 before the warm-up, 0.16 during, client CPU 2.057 ms per search; default@8 3492/3492 MHz, average 3494.1/3492.0, performance, outside load 0.15 before the warm-up, 0.17 during, client CPU 3.530 ms per search; exact 3493/3492 MHz, average 3494.9/3493.6, performance, outside load 0.16 before the warm-up, 0.15 during, client CPU 2.035 ms per search."
      ]
    },
    {
      "name": "qdrant",
      "engine": "Qdrant 1.17.0 in container gvb-qdrant (image qdrant/qdrant:v1.17.0@sha256:f1c7272cdac52b38c1a0e89313922d940ba50afd90d593a1605dbbc214e66ffb; cpuset 2-3,6-7 from its creation; 3 search thread(s))",
      "index": "exact scan: the builder\u0027s sink sends exact=true on every search, so no HNSW graph is used whether or not Qdrant has built one (see the index state)",
      "hosting": "compose",
      "searchSettings": {
        "exact": "true"
      },
      "load": {
        "rows": 524,
        "batch": 1000,
        "upsertSeconds": 0.0616319,
        "rowsPerSecond": 8502.090638127333,
        "countMatchSeconds": 0.0033953,
        "indexSeconds": 1.0021373,
        "indexNote": "status Green, 0 of 524 vectors in HNSW segments (2 segments), waited 1.0 s"
      },
      "search": {
        "countInTarget": 524,
        "latencySamples": 22060,
        "p50Ms": 0.89245,
        "p95Ms": 1.0109,
        "p99Ms": 1.4864229999999998,
        "qps": {
          "8": 3279.8236730317562,
          "1": 1102.981679474304
        },
        "recall": 1,
        "recallHits": 200,
        "ndcg": 0.5181699774768911,
        "errors": 0,
        "exactQueries": 0,
        "clientCpuMsPerSearch": {
          "8": 0.5344,
          "1": 0.7369
        }
      },
      "ram": {
        "bytes": 37465620,
        "text": "35.73 MiB (docker stats)"
      },
      "disk": {
        "bytes": 205603871,
        "text": "196.08 MiB (collection folder)"
      },
      "passOrder": [
        "default@8",
        "default@1"
      ],
      "warmupErrors": 0,
      "indexState": {
        "afterLoad": {
          "ready": true,
          "indexedVectors": 0,
          "totalVectors": 524,
          "detail": "status Green, optimizer ok, indexed_vectors_count 0 of 524 points, 2 segments, indexing_threshold_kb 10,000, full_scan_threshold_kb 10,000; no index used, exact scan by design (the builder\u0027s sink sends exact=true on every search); no graph was built; searches counted since the collection was created: unfiltered_hnsw 0, unfiltered_plain 0, unfiltered_exact 0"
        },
        "afterSearch": {
          "ready": true,
          "indexedVectors": 0,
          "totalVectors": 524,
          "detail": "status Green, optimizer ok, indexed_vectors_count 0 of 524 points, 2 segments, indexing_threshold_kb 10,000, full_scan_threshold_kb 10,000; no index used, exact scan by design (the builder\u0027s sink sends exact=true on every search); no graph was built; searches counted since the collection was created: unfiltered_hnsw 0, unfiltered_plain 596,720, unfiltered_exact 0"
        }
      },
      "durability": "What was measured (strace -f on the Qdrant server process, 30 single-point REST upserts per setting, every sync call timed against the request that caused it): with wait=true each upsert had exactly one msync(MS_SYNC) of the write-ahead-log segment inside the request, before the reply (30 of 30); with wait=false the 30 upserts were acknowledged within 0.26 s with no sync call, and the first WAL msync (one call covering all 30 records) came 2.7 s after the last reply, followed by the segment-file flushes. So the log is flushed to disk under both settings, but with wait=false the flush comes after the acknowledgement: an operating-system crash or power cut in that gap loses acknowledged writes, while a crash of the Qdrant process alone should not, because the bytes are already in the kernel\u0027s page cache (inferred, not tested). Every upsert here is sent with wait=true in batches of 256 over gRPC; the strace used one point per request, so one flush per batch is inferred, not measured. Segment files are flushed every 5 s; log segments 32 MB, 0 created ahead. /qdrant/config/config.yaml in container gvb-qdrant (the image\u0027s own file; its storage keys are listed) sets: storage.collection.quantization = null, storage.collection.replication_factor = 1, storage.collection.vectors.on_disk = null, storage.collection.write_consistency_factor = 1, storage.hnsw_index.ef_construct = 100, storage.hnsw_index.full_scan_threshold_kb = 10000, storage.hnsw_index.m = 16, storage.hnsw_index.max_indexing_threads = 0, storage.hnsw_index.on_disk = false, storage.hnsw_index.payload_m = null, storage.max_collections = null, storage.node_type = Normal, storage.on_disk_payload = true, storage.optimizers.default_segment_number = 0, storage.optimizers.deleted_threshold = 0.2, storage.optimizers.flush_interval_sec = 5, storage.optimizers.indexing_threshold_kb = 10000, storage.optimizers.max_optimization_threads = null, storage.optimizers.max_segment_size_kb = null, storage.optimizers.vacuum_min_vector_number = 1000, storage.performance.max_search_threads = 0, storage.performance.optimizer_cpu_budget = 0, storage.performance.update_rate_limit = null, storage.shard_transfer_method = null, storage.snapshots_config.snapshots_storage = local, storage.snapshots_path = ./snapshots, storage.storage_path = ./storage, storage.temp_path = null, storage.update_concurrency = null, storage.wal.wal_capacity_mb = 32, storage.wal.wal_segments_ahead = 0; no QDRANT__ environment overrides in the server process. Not tested by cutting power; whether the disk\u0027s own write cache reaches the media was not checked.",
      "engineSettings": [
        {
          "key": "HostConfig.Memory",
          "value": "8589934592",
          "how": "read: docker inspect HostConfig.Memory (0 = no limit)"
        },
        {
          "key": "HostConfig.CpusetCpus",
          "value": "2-3,6-7",
          "how": "read: docker inspect HostConfig.CpusetCpus (empty = every CPU)"
        },
        {
          "key": "HostConfig.NanoCpus",
          "value": "0",
          "how": "read: docker inspect HostConfig.NanoCpus (0 = no limit)"
        },
        {
          "key": "search_threads",
          "value": "3",
          "how": "read: threads named search-* of the qdrant process in container gvb-qdrant (/proc)"
        }
      ],
      "image": {
        "ref": "qdrant/qdrant:v1.17.0@sha256:f1c7272cdac52b38c1a0e89313922d940ba50afd90d593a1605dbbc214e66ffb",
        "id": "sha256:f1c7272cdac52b38c1a0e89313922d940ba50afd90d593a1605dbbc214e66ffb",
        "pinnedId": "sha256:f1c7272cdac52b38c1a0e89313922d940ba50afd90d593a1605dbbc214e66ffb",
        "lastTagTimeUtc": "2026-10-04T22:03:16.973657523Z"
      },
      "dataFolder": {
        "path": "~/gvb-data/engines/qdrant",
        "bytesAtStart": 357,
        "bytesAtEnd": 205604228
      },
      "notes": [
        "Started by run-all for this measurement with every container created on CPUs 2-3,6-7 (started qdrant.compose.yaml with every container created on CPUs 2-3,6-7: gvb-qdrant cpuset 2-3,6-7 (read back from docker inspect)); stopped afterwards.",
        "Engine files (SHA-256, first 12 hex digits): [qdrant.compose.yaml eb57e55e93c1]. This run created the engine from these files.",
        "Index after the load: ready, 0 of 524 indexed (status Green, optimizer ok, indexed_vectors_count 0 of 524 points, 2 segments, indexing_threshold_kb 10,000, full_scan_threshold_kb 10,000; no index used, exact scan by design (the builder\u0027s sink sends exact=true on every search); no graph was built; searches counted since the collection was created: unfiltered_hnsw 0, unfiltered_plain 0, unfiltered_exact 0). Durability: What was measured (strace -f on the Qdrant server process, 30 single-point REST upserts per setting, every sync call timed against the request that caused it): with wait=true each upsert had exactly one msync(MS_SYNC) of the write-ahead-log segment inside the request, before the reply (30 of 30); with wait=false the 30 upserts were acknowledged within 0.26 s with no sync call, and the first WAL msync (one call covering all 30 records) came 2.7 s after the last reply, followed by the segment-file flushes. So the log is flushed to disk under both settings, but with wait=false the flush comes after the acknowledgement: an operating-system crash or power cut in that gap loses acknowledged writes, while a crash of the Qdrant process alone should not, because the bytes are already in the kernel\u0027s page cache (inferred, not tested). Every upsert here is sent with wait=true in batches of 256 over gRPC; the strace used one point per request, so one flush per batch is inferred, not measured. Segment files are flushed every 5 s; log segments 32 MB, 0 created ahead. /qdrant/config/config.yaml in container gvb-qdrant (the image\u0027s own file; its storage keys are listed) sets: storage.collection.quantization = null, storage.collection.replication_factor = 1, storage.collection.vectors.on_disk = null, storage.collection.write_consistency_factor = 1, storage.hnsw_index.ef_construct = 100, storage.hnsw_index.full_scan_threshold_kb = 10000, storage.hnsw_index.m = 16, storage.hnsw_index.max_indexing_threads = 0, storage.hnsw_index.on_disk = false, storage.hnsw_index.payload_m = null, storage.max_collections = null, storage.node_type = Normal, storage.on_disk_payload = true, storage.optimizers.default_segment_number = 0, storage.optimizers.deleted_threshold = 0.2, storage.optimizers.flush_interval_sec = 5, storage.optimizers.indexing_threshold_kb = 10000, storage.optimizers.max_optimization_threads = null, storage.optimizers.max_segment_size_kb = null, storage.optimizers.vacuum_min_vector_number = 1000, storage.performance.max_search_threads = 0, storage.performance.optimizer_cpu_budget = 0, storage.performance.update_rate_limit = null, storage.shard_transfer_method = null, storage.snapshots_config.snapshots_storage = local, storage.snapshots_path = ./snapshots, storage.storage_path = ./storage, storage.temp_path = null, storage.update_concurrency = null, storage.wal.wal_capacity_mb = 32, storage.wal.wal_segments_ahead = 0; no QDRANT__ environment overrides in the server process. Not tested by cutting power; whether the disk\u0027s own write cache reaches the media was not checked..",
        "Outside load when searching began: 0.20 CPUs on average over the last 1 s and 0.20 over the last few seconds (limit 0.3), a quiet box. The load average 2.50 3.08 3.40 (1/5/15 min; it also counts this benchmark\u0027s own client and engines, so it is recorded, not judged).",
        "Rehearsal before any timed pass, untimed, every pass type at its own concurrency for at least 30 s through the same code the timed passes use: default@8 98,632 searches in 30.0 s, default@1 33,105 searches in 30.0 s.",
        "Settle: settled before every timed pass, each by its own warm-up at its own concurrency and a trial of the same pass within 10% of the warm-up\u0027s settled figure, and the timed pass itself within 10% of it. default@8: warm-up 15.0 s and 49,261 searches (0 failed) at 8 searchers; QPS of the last windows 3,244, 3,296, 3,302 (windows of at least 2 s and 100 searches); trial of 9,799 searches in 3.0 s at 8 searchers: 3,264 QPS against the settled 3,296 QPS, 1% apart (limit 10%); the timed pass 3,280 QPS, 0% from the settled 3,296 QPS (limit 10%); default@1: warm-up 15.0 s and 16,569 searches (0 failed) at 1 searcher; p50 of the last windows 0.887, 0.896, 0.899 ms (windows of at least 2 s and 100 searches); trial of 3,330 searches in 3.0 s at 1 searcher: p50 0.889 ms against the settled p50 0.896 ms, 1% apart (limit 10%); the timed pass p50 0.892 ms, 0% from the settled p50 0.896 ms (limit 10% or 0.1 ms; 0.003 ms).",
        "Pass default@8 after rehearsal: 2026-10-07T22:13:12.585Z to 2026-10-07T22:13:32.588Z (20.0 s), 65,604 searches, 0 failed, p50 2.354 ms, mean 2.437 ms, p99 4.248 ms, 3279.8 QPS (1000/QPS 0.305 ms).",
        "Pass default@1 after default@8: 2026-10-07T22:13:50.608Z to 2026-10-07T22:14:10.608Z (20.0 s), 22,060 searches, 0 failed, p50 0.892 ms, mean 0.905 ms, p99 1.486 ms, 1103.0 QPS (1000/QPS 0.907 ms).",
        "Passes in the order run: default@8, default@1; each after its own warm-up. Untimed searches (rehearsals, per-pass warm-ups, settle checks and extensions): 210,696 sent, 0 failed (warmupErrors). Index after the searches: ready, 0 of 524 indexed (status Green, optimizer ok, indexed_vectors_count 0 of 524 points, 2 segments, indexing_threshold_kb 10,000, full_scan_threshold_kb 10,000; no index used, exact scan by design (the builder\u0027s sink sends exact=true on every search); no graph was built; searches counted since the collection was created: unfiltered_hnsw 0, unfiltered_plain 596,720, unfiltered_exact 0).",
        "Benchmark copy gvbbench_eshoponweb dropped afterwards.",
        "Connection: container address on its Docker network, not the published port (no docker-proxy): container gvb-qdrant (b0bc08dd263f) on network gvb-qdrant_default at container-ip:6334, not through docker-proxy localhost:16334; container gvb-qdrant (b0bc08dd263f) on network gvb-qdrant_default at container-ip:6333, not through docker-proxy localhost:16333. Open after the passes: container-ip:6334 x1 (this target).",
        "CPU pinning: cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which), CPUs 2-3,6-7. Changed: container gvb-qdrant: already on CPUs 2-3,6-7 (its cpuset since creation), not changed. Read back: container gvb-qdrant: 24 thread(s) on CPUs 2-3,6-7 (every thread of the container).",
        "Clock per pass (median MHz of engine CPUs / client CPUs, each the median of its CPUs\u0027 medians and every CPU when the CPUs were not split, their average MHz, governor, CPUs busy outside the benchmark, client and engine CPU per search; the clock was pinned at 3500 MHz (turbo off), and a pass whose median on either group is more than 100 bp (1%) off it, or that has no reading on a group, is flagged): default@8 3492/3492 MHz, average 3492.0/3492.0, performance, outside load 0.13 before the warm-up, 0.16 during, client CPU 0.534 ms per search, engine CPU 1.006 ms per search; default@1 3492/3492 MHz, average 3492.0/3492.0, performance, outside load 0.13 before the warm-up, 0.12 during, client CPU 0.737 ms per search, engine CPU 0.793 ms per search."
      ]
    }
  ],
  "conditions": {
    "buildConfiguration": "Release",
    "jitOptimizerDisabled": false,
    "dotNet": ".NET 10.0.12",
    "runtimeVersion": "10.0.12",
    "serverGc": false,
    "machineControl": "on",
    "governor": "performance",
    "governorBefore": "schedutil",
    "governorAtEnd": "performance",
    "governorAfterRestore": "schedutil",
    "logicalCpus": 8,
    "threadSiblings": [
      "0,4",
      "1,5",
      "2,6",
      "3,7"
    ],
    "clientCpus": "0-1,4-5",
    "engineCpus": "2-3,6-7",
    "clientPinning": "client pid 1648355: 23 thread(s) on CPUs 0-1,4-5",
    "warmupSearches": 20,
    "exactSeconds": 60,
    "search": {
      "top": 10,
      "queries": "golden",
      "concurrency": [
        1,
        8
      ],
      "secondsPerLevel": 20,
      "warmupSearches": 20,
      "exactSeconds": 60,
      "searchTimeoutSeconds": 120,
      "batch": 1000,
      "seed": 801
    },
    "busyRule": "right before each pass\u0027s warm-up the run waits, up to 10 min, while processes outside the benchmark (everything but this client and the engine under test\u0027s cgroups) use more than 0.3 CPUs on average over the last 60 s or the last 5 s, neither window reaching back past the start of the target or of its engine (so the engine\u0027s own start-up is not outside work); if the box does not clear the pass runs anyway, flagged \u0027busy box\u0027, as is a pass whose own outside load is above the limit",
    "engines": [
      {
        "target": "oracle",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-oracle: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-oracle: 85 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of oracle.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-b39d96d10dfba4696147a52f6930c817f50ac730c280f57b149eb72754feace7.scope"
        ]
      },
      {
        "target": "mongodb",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-mongodb: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-mongodb: 214 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of mongodb.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-2473496c702adb74d3b75ef1f7fd17dcfaa63d97775133537735e21397e0b473.scope"
        ]
      },
      {
        "target": "redis",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-redis: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-redis: 16 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of redis.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-27d5986e11b586e3669e09e8e7c27d372e5549924f33c41a93f806cbf1e69642.scope"
        ]
      },
      {
        "target": "typesense",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-typesense: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-typesense: 303 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of typesense.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-de8745b25e16354418a46a863fb9a24ed1384e561c7a40aa774f702c796fc476.scope"
        ]
      },
      {
        "target": "clickhouse",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-clickhouse: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-clickhouse: 714 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of clickhouse.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-f42c0fc767ee555a05317023f844bd53270f7d4feeece0d4da7e69a85899e239.scope"
        ]
      },
      {
        "target": "sql",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-mssql: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-mssql: 85 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of mssql.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-658134ec50ab9d3f16bd1b4b6d13fadfd944551fe7e8521063d9defb7088dbec.scope"
        ]
      },
      {
        "target": "opensearch",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-opensearch: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-opensearch: 57 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of opensearch.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-c2aa02f803d120c1f9f9f534c248b316bb438a504774778cc69e0137705320ff.scope"
        ]
      },
      {
        "target": "milvus",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-milvus: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-milvus: 24 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of milvus.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-45580d3aa0e244e1f659f9cd45764909bbf36d5b7e0694df1d921f1d8ca0ffec.scope"
        ]
      },
      {
        "target": "sql-diskann",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-mssql: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-mssql: 86 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of mssql.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-e6296fcd9a0af6032a1f5e33e1f63f22dfe39621bdb549329be3135ed3197852.scope"
        ]
      },
      {
        "target": "duckdb",
        "hosting": "embedded",
        "method": "none: an embedded engine runs inside the benchmark client process, so it shares the client CPUs",
        "cpus": "0-1,4-5",
        "changes": [],
        "verified": [],
        "problems": [],
        "restored": [],
        "kind": "embedded",
        "cgroups": []
      },
      {
        "target": "qdrant-hnsw",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-qdrant: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-qdrant: 24 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of qdrant.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-6a29c33862e512e013d2d5f7457a8f825f248918f188e565751bd224e0da82b7.scope"
        ]
      },
      {
        "target": "weaviate",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-weaviate: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-weaviate: 9 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of weaviate.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-12817952bd182af27c949538b141097f33421d398da074de6810614582152b75.scope"
        ]
      },
      {
        "target": "pgvector",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-pgvector: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-pgvector: 6 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of pgvector.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-95b597379f00f1b5d3d9165d72e5c23aac87c7b5d5066edebf7e4515061350d5.scope"
        ]
      },
      {
        "target": "vespa",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-vespa: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-vespa: 215 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of vespa.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-623ee2444ee6ca0c940a1c359e4f46f2e815cc6ef9b9ab7295fa98fbed433d98.scope"
        ]
      },
      {
        "target": "elasticsearch",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-elasticsearch: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-elasticsearch: 74 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of elasticsearch.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-3da18534bcc976ea9ad5640be0dfec2006af7217615fce2b2077cc67c567cbea.scope"
        ]
      },
      {
        "target": "mariadb",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvbbench-mariadb: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvbbench-mariadb: 12 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of mariadb-bench.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-e002b74d541ae64db185f13bf79e6a7adebb8d7650fe2d52f84a973e6e357abf.scope"
        ]
      },
      {
        "target": "chroma",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-chroma: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-chroma: 9 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of chroma.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-e341a21a45e5d045e82a91ac76caa13a65f3efbd6a71ce9de848dabdff3273aa.scope"
        ]
      },
      {
        "target": "sqlitevec",
        "hosting": "embedded",
        "method": "none: an embedded engine runs inside the benchmark client process, so it shares the client CPUs",
        "cpus": "0-1,4-5",
        "changes": [],
        "verified": [],
        "problems": [],
        "restored": [],
        "kind": "embedded",
        "cgroups": []
      },
      {
        "target": "qdrant",
        "hosting": "compose",
        "method": "cpuset from the container\u0027s creation when run-all started it on the engine CPUs, else docker update --cpuset-cpus (each container\u0027s change line says which)",
        "cpus": "2-3,6-7",
        "changes": [
          "container gvb-qdrant: already on CPUs 2-3,6-7 (its cpuset since creation), not changed"
        ],
        "verified": [
          "container gvb-qdrant: 24 thread(s) on CPUs 2-3,6-7 (every thread of the container)"
        ],
        "problems": [],
        "restored": [
          "no container of qdrant.compose.yaml is left on CPUs 2-3,6-7; nothing to put back"
        ],
        "kind": "compose",
        "cgroups": [
          "/sys/fs/cgroup/system.slice/docker.service",
          "/sys/fs/cgroup/system.slice/docker-b0bc08dd263f02f2c5ddc0838397cfcac1317c2deb6d0bd7094acf93556d3fcd.scope"
        ]
      }
    ],
    "passes": [
      {
        "target": "oracle",
        "pass": "exact",
        "startUtc": "2026-10-07T20:53:13.913Z",
        "endUtc": "2026-10-07T20:54:13.962Z",
        "seconds": 60.049,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3191,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3487,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3489,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3503
          },
          {
            "cpu": 6,
            "min": 3486,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3476,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T20:52:55.885Z",
        "quietCheckLeadSeconds": 18.028,
        "outsideWindowFromUtc": "2026-10-07T20:51:55.885Z",
        "outsideLoadAtStart": 0.147,
        "outsideLoadRecentAtStart": 0.184,
        "outsideLoadDuring": 0.149,
        "accountingMismatch": false,
        "searches": 23791,
        "clientCpuSeconds": 21.9778,
        "clientCpuMsPerSearch": 0.9238,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T20:53:13.915Z to 2026-10-07T20:54:13.917Z, 240 samples, divided by the pass\u0027s 23791 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.1518,
        "dockerdCpuMsPerSearch": 0.0065,
        "engineCpusBusy": 0.8532,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "oracle",
        "pass": "default@8",
        "startUtc": "2026-10-07T20:55:20.704Z",
        "endUtc": "2026-10-07T20:55:40.829Z",
        "seconds": 20.124,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 81,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 1197,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 1197,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 1196,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 1197,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 1195,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 1197,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 1197,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 1197,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T20:55:05.703Z",
        "quietCheckLeadSeconds": 15.001,
        "outsideWindowFromUtc": "2026-10-07T20:54:05.703Z",
        "outsideLoadAtStart": 0.145,
        "outsideLoadRecentAtStart": 0.15,
        "outsideLoadDuring": 0.163,
        "accountingMismatch": false,
        "searches": 56940,
        "clientCpuSeconds": 36.4287,
        "clientCpuMsPerSearch": 0.6398,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T20:55:20.704Z to 2026-10-07T20:55:40.812Z, 81 samples, divided by the pass\u0027s 56940 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.7158,
        "dockerdCpuMsPerSearch": 0.001,
        "engineCpusBusy": 2.0268,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "oracle",
        "pass": "default@1",
        "startUtc": "2026-10-07T20:55:58.833Z",
        "endUtc": "2026-10-07T20:56:18.855Z",
        "seconds": 20.022,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3490,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 3,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3492,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3492,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 6,
            "min": 3222,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3490,
            "median": 3492,
            "max": 3496
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T20:55:40.829Z",
        "quietCheckLeadSeconds": 18.004,
        "outsideWindowFromUtc": "2026-10-07T20:54:40.829Z",
        "outsideLoadAtStart": 0.156,
        "outsideLoadRecentAtStart": 0.148,
        "outsideLoadDuring": 0.169,
        "accountingMismatch": false,
        "searches": 21198,
        "clientCpuSeconds": 18.5248,
        "clientCpuMsPerSearch": 0.8739,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T20:55:58.833Z to 2026-10-07T20:56:18.833Z, 80 samples, divided by the pass\u0027s 21198 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.5774,
        "dockerdCpuMsPerSearch": 0.0028,
        "engineCpusBusy": 0.612,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "mongodb",
        "pass": "default@1",
        "startUtc": "2026-10-07T20:58:32.748Z",
        "endUtc": "2026-10-07T20:58:52.763Z",
        "seconds": 20.015,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3402,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3449,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3488,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T20:58:14.744Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T20:57:14.744Z",
        "outsideLoadAtStart": 0.208,
        "outsideLoadRecentAtStart": 0.226,
        "outsideLoadDuring": 0.253,
        "accountingMismatch": false,
        "searches": 14171,
        "clientCpuSeconds": 4.3606,
        "clientCpuMsPerSearch": 0.3077,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T20:58:32.748Z to 2026-10-07T20:58:52.749Z, 80 samples, divided by the pass\u0027s 14171 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 1.3222,
        "dockerdCpuMsPerSearch": 0.0037,
        "engineCpusBusy": 0.9368,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "mongodb",
        "pass": "default@8",
        "startUtc": "2026-10-07T20:59:10.769Z",
        "endUtc": "2026-10-07T20:59:30.784Z",
        "seconds": 20.014,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 78,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3491,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T20:58:52.764Z",
        "quietCheckLeadSeconds": 18.005,
        "outsideWindowFromUtc": "2026-10-07T20:57:52.764Z",
        "outsideLoadAtStart": 0.247,
        "outsideLoadRecentAtStart": 0.196,
        "outsideLoadDuring": 0.154,
        "accountingMismatch": false,
        "searches": 42614,
        "clientCpuSeconds": 12.1162,
        "clientCpuMsPerSearch": 0.2843,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T20:59:10.769Z to 2026-10-07T20:59:30.772Z, 78 samples, divided by the pass\u0027s 42614 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 1.7807,
        "dockerdCpuMsPerSearch": 0.0013,
        "engineCpusBusy": 3.7935,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "mongodb",
        "pass": "exact",
        "startUtc": "2026-10-07T20:59:48.787Z",
        "endUtc": "2026-10-07T21:00:48.829Z",
        "seconds": 60.041,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 241,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3497
          },
          {
            "cpu": 1,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3450,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 3,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3482,
            "median": 3492,
            "max": 3513
          },
          {
            "cpu": 6,
            "min": 3488,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 7,
            "min": 3488,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T20:59:30.784Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T20:58:30.784Z",
        "outsideLoadAtStart": 0.188,
        "outsideLoadRecentAtStart": 0.145,
        "outsideLoadDuring": 0.239,
        "accountingMismatch": false,
        "searches": 47789,
        "clientCpuSeconds": 14.1973,
        "clientCpuMsPerSearch": 0.2971,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T20:59:48.787Z to 2026-10-07T21:00:48.788Z, 240 samples, divided by the pass\u0027s 47789 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 1.1621,
        "dockerdCpuMsPerSearch": 0.0037,
        "engineCpusBusy": 0.9256,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "redis",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:04:01.959Z",
        "endUtc": "2026-10-07T21:04:21.992Z",
        "seconds": 20.033,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3489,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 2,
            "min": 3485,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3490,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 6,
            "min": 3489,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 7,
            "min": 3491,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:03:43.956Z",
        "quietCheckLeadSeconds": 18.004,
        "outsideWindowFromUtc": "2026-10-07T21:02:43.956Z",
        "outsideLoadAtStart": 0.128,
        "outsideLoadRecentAtStart": 0.119,
        "outsideLoadDuring": 0.118,
        "accountingMismatch": false,
        "searches": 104747,
        "clientCpuSeconds": 37.5209,
        "clientCpuMsPerSearch": 0.3582,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:04:01.959Z to 2026-10-07T21:04:21.960Z, 80 samples, divided by the pass\u0027s 104747 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.2317,
        "dockerdCpuMsPerSearch": 0.0006,
        "engineCpusBusy": 1.2134,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "redis",
        "pass": "exact",
        "startUtc": "2026-10-07T21:05:28.012Z",
        "endUtc": "2026-10-07T21:06:28.161Z",
        "seconds": 60.149,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 241,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3489,
            "median": 3492,
            "max": 3499
          },
          {
            "cpu": 1,
            "min": 3487,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3489,
            "median": 3492,
            "max": 3512
          },
          {
            "cpu": 4,
            "min": 3489,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 5,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3487,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:05:13.008Z",
        "quietCheckLeadSeconds": 15.004,
        "outsideWindowFromUtc": "2026-10-07T21:04:13.008Z",
        "outsideLoadAtStart": 0.118,
        "outsideLoadRecentAtStart": 0.129,
        "outsideLoadDuring": 0.157,
        "accountingMismatch": false,
        "searches": 162993,
        "clientCpuSeconds": 90.7542,
        "clientCpuMsPerSearch": 0.5568,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:05:28.012Z to 2026-10-07T21:06:28.012Z, 240 samples, divided by the pass\u0027s 162993 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.2379,
        "dockerdCpuMsPerSearch": 0.0011,
        "engineCpusBusy": 0.6462,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "redis",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:07:34.180Z",
        "endUtc": "2026-10-07T21:07:54.230Z",
        "seconds": 20.05,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3489,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 2,
            "min": 3489,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 3,
            "min": 3490,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3497
          },
          {
            "cpu": 5,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3489,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 7,
            "min": 3491,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:07:19.176Z",
        "quietCheckLeadSeconds": 15.004,
        "outsideWindowFromUtc": "2026-10-07T21:06:19.176Z",
        "outsideLoadAtStart": 0.143,
        "outsideLoadRecentAtStart": 0.152,
        "outsideLoadDuring": 0.129,
        "accountingMismatch": false,
        "searches": 52356,
        "clientCpuSeconds": 28.4937,
        "clientCpuMsPerSearch": 0.5442,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:07:34.180Z to 2026-10-07T21:07:54.180Z, 80 samples, divided by the pass\u0027s 52356 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.2578,
        "dockerdCpuMsPerSearch": 0.0014,
        "engineCpusBusy": 0.6749,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "typesense",
        "pass": "exact",
        "startUtc": "2026-10-07T21:09:57.783Z",
        "endUtc": "2026-10-07T21:10:57.795Z",
        "seconds": 60.011,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3481,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 3487,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3489,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 4,
            "min": 3435,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3446,
            "median": 3493,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3489,
            "median": 3492,
            "max": 3502
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:09:39.771Z",
        "quietCheckLeadSeconds": 18.012,
        "outsideWindowFromUtc": "2026-10-07T21:08:39.771Z",
        "outsideLoadAtStart": 0.066,
        "outsideLoadRecentAtStart": 0.173,
        "outsideLoadDuring": 0.145,
        "accountingMismatch": false,
        "searches": 10524,
        "clientCpuSeconds": 5.6871,
        "clientCpuMsPerSearch": 0.5404,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:09:57.783Z to 2026-10-07T21:10:57.787Z, 240 samples, divided by the pass\u0027s 10524 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 5.3328,
        "dockerdCpuMsPerSearch": 0.012,
        "engineCpusBusy": 0.9353,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "typesense",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:11:15.808Z",
        "endUtc": "2026-10-07T21:11:35.821Z",
        "seconds": 20.014,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 81,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3488,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 1,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3495
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:10:57.796Z",
        "quietCheckLeadSeconds": 18.012,
        "outsideWindowFromUtc": "2026-10-07T21:09:57.796Z",
        "outsideLoadAtStart": 0.145,
        "outsideLoadRecentAtStart": 0.147,
        "outsideLoadDuring": -0.03,
        "accountingMismatch": false,
        "searches": 11460,
        "clientCpuSeconds": 6.8126,
        "clientCpuMsPerSearch": 0.5945,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:11:15.808Z to 2026-10-07T21:11:35.818Z, 81 samples, divided by the pass\u0027s 11460 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 6.7328,
        "dockerdCpuMsPerSearch": 0.0036,
        "engineCpusBusy": 3.856,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "typesense",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:11:53.827Z",
        "endUtc": "2026-10-07T21:12:13.834Z",
        "seconds": 20.008,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 3403,
            "median": 3492,
            "max": 3503
          },
          {
            "cpu": 2,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3400,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3493,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:11:35.822Z",
        "quietCheckLeadSeconds": 18.005,
        "outsideWindowFromUtc": "2026-10-07T21:10:35.822Z",
        "outsideLoadAtStart": 0.041,
        "outsideLoadRecentAtStart": -0.021,
        "outsideLoadDuring": 0.171,
        "accountingMismatch": false,
        "searches": 4717,
        "clientCpuSeconds": 2.5105,
        "clientCpuMsPerSearch": 0.5322,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:11:53.827Z to 2026-10-07T21:12:13.831Z, 80 samples, divided by the pass\u0027s 4717 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 3.8747,
        "dockerdCpuMsPerSearch": 0.0089,
        "engineCpusBusy": 0.9137,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "clickhouse",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:15:46.926Z",
        "endUtc": "2026-10-07T21:16:06.943Z",
        "seconds": 20.016,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 1,
            "min": 3477,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3456,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:15:31.917Z",
        "quietCheckLeadSeconds": 15.009,
        "outsideWindowFromUtc": "2026-10-07T21:14:31.917Z",
        "outsideLoadAtStart": 0.14,
        "outsideLoadRecentAtStart": 0.157,
        "outsideLoadDuring": 0.168,
        "accountingMismatch": false,
        "searches": 6734,
        "clientCpuSeconds": 7.1608,
        "clientCpuMsPerSearch": 1.0634,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:15:46.926Z to 2026-10-07T21:16:06.941Z, 80 samples, divided by the pass\u0027s 6734 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 11.7581,
        "dockerdCpuMsPerSearch": 0.0083,
        "engineCpusBusy": 3.956,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "clickhouse",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:17:12.956Z",
        "endUtc": "2026-10-07T21:17:32.961Z",
        "seconds": 20.005,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 1,
            "min": 3487,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 2,
            "min": 3489,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 3,
            "min": 3487,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 4,
            "min": 3463,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3488,
            "median": 3492,
            "max": 3497
          },
          {
            "cpu": 7,
            "min": 3490,
            "median": 3492,
            "max": 3499
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:16:57.955Z",
        "quietCheckLeadSeconds": 15.001,
        "outsideWindowFromUtc": "2026-10-07T21:15:57.955Z",
        "outsideLoadAtStart": 0.175,
        "outsideLoadRecentAtStart": 0.167,
        "outsideLoadDuring": 0.171,
        "accountingMismatch": false,
        "searches": 4002,
        "clientCpuSeconds": 3.4202,
        "clientCpuMsPerSearch": 0.8546,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:17:12.956Z to 2026-10-07T21:17:32.957Z, 80 samples, divided by the pass\u0027s 4002 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 6.5709,
        "dockerdCpuMsPerSearch": 0.0144,
        "engineCpusBusy": 1.3148,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "clickhouse",
        "pass": "exact",
        "startUtc": "2026-10-07T21:18:38.981Z",
        "endUtc": "2026-10-07T21:19:38.989Z",
        "seconds": 60.008,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3499
          },
          {
            "cpu": 1,
            "min": 3485,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3488,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 3,
            "min": 3484,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 4,
            "min": 3490,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 6,
            "min": 3489,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 7,
            "min": 3490,
            "median": 3492,
            "max": 3495
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:18:23.974Z",
        "quietCheckLeadSeconds": 15.007,
        "outsideWindowFromUtc": "2026-10-07T21:17:23.974Z",
        "outsideLoadAtStart": 0.17,
        "outsideLoadRecentAtStart": 0.169,
        "outsideLoadDuring": 0.179,
        "accountingMismatch": false,
        "searches": 8736,
        "clientCpuSeconds": 7.7141,
        "clientCpuMsPerSearch": 0.883,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:18:38.981Z to 2026-10-07T21:19:38.984Z, 240 samples, divided by the pass\u0027s 8736 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 9.0873,
        "dockerdCpuMsPerSearch": 0.0208,
        "engineCpusBusy": 1.323,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "sql",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:21:14.993Z",
        "endUtc": "2026-10-07T21:21:34.999Z",
        "seconds": 20.006,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3489,
            "median": 3492,
            "max": 3504
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 2,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3508
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 6,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3491,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:20:56.987Z",
        "quietCheckLeadSeconds": 18.007,
        "outsideWindowFromUtc": "2026-10-07T21:19:56.987Z",
        "outsideLoadAtStart": 0.151,
        "outsideLoadRecentAtStart": 0.151,
        "outsideLoadDuring": 0.145,
        "accountingMismatch": false,
        "searches": 4969,
        "clientCpuSeconds": 6.0593,
        "clientCpuMsPerSearch": 1.2194,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:21:14.994Z to 2026-10-07T21:21:34.995Z, 80 samples, divided by the pass\u0027s 4969 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 3.908,
        "dockerdCpuMsPerSearch": 0.0138,
        "engineCpusBusy": 0.9709,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "sql",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:21:53.018Z",
        "endUtc": "2026-10-07T21:22:13.033Z",
        "seconds": 20.015,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3497
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 2,
            "min": 3491,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3485,
            "median": 3492,
            "max": 3499
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3489,
            "median": 3492,
            "max": 3493
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:21:35.000Z",
        "quietCheckLeadSeconds": 18.018,
        "outsideWindowFromUtc": "2026-10-07T21:20:35.000Z",
        "outsideLoadAtStart": 0.157,
        "outsideLoadRecentAtStart": 0.146,
        "outsideLoadDuring": 0.218,
        "accountingMismatch": false,
        "searches": 11614,
        "clientCpuSeconds": 14.2709,
        "clientCpuMsPerSearch": 1.2288,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:21:53.018Z to 2026-10-07T21:22:13.029Z, 80 samples, divided by the pass\u0027s 11614 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 5.7297,
        "dockerdCpuMsPerSearch": 0.0048,
        "engineCpusBusy": 3.3254,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "opensearch",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:24:33.262Z",
        "endUtc": "2026-10-07T21:24:53.273Z",
        "seconds": 20.011,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3467,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3488,
            "median": 3492,
            "max": 3499
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:24:15.255Z",
        "quietCheckLeadSeconds": 18.007,
        "outsideWindowFromUtc": "2026-10-07T21:23:15.255Z",
        "outsideLoadAtStart": 0.146,
        "outsideLoadRecentAtStart": 0.156,
        "outsideLoadDuring": 0.116,
        "accountingMismatch": false,
        "searches": 30327,
        "clientCpuSeconds": 15.3277,
        "clientCpuMsPerSearch": 0.5054,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:24:33.262Z to 2026-10-07T21:24:53.267Z, 80 samples, divided by the pass\u0027s 30327 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.5496,
        "dockerdCpuMsPerSearch": 0.0016,
        "engineCpusBusy": 3.8651,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "opensearch",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:25:11.278Z",
        "endUtc": "2026-10-07T21:25:31.286Z",
        "seconds": 20.009,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3490,
            "median": 3493,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3491,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 7,
            "min": 3489,
            "median": 3492,
            "max": 3498
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:24:53.274Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T21:23:53.274Z",
        "outsideLoadAtStart": 0.123,
        "outsideLoadRecentAtStart": 0.132,
        "outsideLoadDuring": 0.143,
        "accountingMismatch": false,
        "searches": 9877,
        "clientCpuSeconds": 4.5885,
        "clientCpuMsPerSearch": 0.4646,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:25:11.278Z to 2026-10-07T21:25:31.278Z, 80 samples, divided by the pass\u0027s 9877 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 1.7375,
        "dockerdCpuMsPerSearch": 0.0046,
        "engineCpusBusy": 0.8581,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "opensearch",
        "pass": "exact",
        "startUtc": "2026-10-07T21:25:49.289Z",
        "endUtc": "2026-10-07T21:26:49.308Z",
        "seconds": 60.02,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3457,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 3452,
            "median": 3492,
            "max": 3503
          },
          {
            "cpu": 2,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3487,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3489,
            "median": 3493,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3463,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3489,
            "median": 3492,
            "max": 3497
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:25:31.287Z",
        "quietCheckLeadSeconds": 18.002,
        "outsideWindowFromUtc": "2026-10-07T21:24:31.287Z",
        "outsideLoadAtStart": 0.14,
        "outsideLoadRecentAtStart": 0.12,
        "outsideLoadDuring": 0.151,
        "accountingMismatch": false,
        "searches": 23045,
        "clientCpuSeconds": 10.7184,
        "clientCpuMsPerSearch": 0.4651,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:25:49.289Z to 2026-10-07T21:26:49.291Z, 240 samples, divided by the pass\u0027s 23045 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.3296,
        "dockerdCpuMsPerSearch": 0.0067,
        "engineCpusBusy": 0.8947,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "milvus",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:30:38.245Z",
        "endUtc": "2026-10-07T21:30:58.253Z",
        "seconds": 20.008,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 1,
            "min": 3491,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 2,
            "min": 3491,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3491,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 4,
            "min": 3488,
            "median": 3492,
            "max": 3499
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3491,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 7,
            "min": 3488,
            "median": 3492,
            "max": 3494
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:30:20.242Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T21:29:20.242Z",
        "outsideLoadAtStart": 0.144,
        "outsideLoadRecentAtStart": 0.139,
        "outsideLoadDuring": 0.108,
        "accountingMismatch": false,
        "searches": 8461,
        "clientCpuSeconds": 4.6191,
        "clientCpuMsPerSearch": 0.5459,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:30:38.245Z to 2026-10-07T21:30:58.246Z, 80 samples, divided by the pass\u0027s 8461 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.7591,
        "dockerdCpuMsPerSearch": 0.0765,
        "engineCpusBusy": 1.1672,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "milvus",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:31:16.263Z",
        "endUtc": "2026-10-07T21:31:36.272Z",
        "seconds": 20.009,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3481,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 1,
            "min": 3492,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 5,
            "min": 3446,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:30:58.254Z",
        "quietCheckLeadSeconds": 18.009,
        "outsideWindowFromUtc": "2026-10-07T21:29:58.254Z",
        "outsideLoadAtStart": 0.139,
        "outsideLoadRecentAtStart": 0.088,
        "outsideLoadDuring": 0.165,
        "accountingMismatch": false,
        "searches": 25407,
        "clientCpuSeconds": 16.0044,
        "clientCpuMsPerSearch": 0.6299,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:31:16.263Z to 2026-10-07T21:31:36.266Z, 80 samples, divided by the pass\u0027s 25407 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.9445,
        "dockerdCpuMsPerSearch": 0.0662,
        "engineCpusBusy": 3.74,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "sql-diskann",
        "pass": "exact",
        "startUtc": "2026-10-07T21:33:42.070Z",
        "endUtc": "2026-10-07T21:34:42.083Z",
        "seconds": 60.012,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3487,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 3480,
            "median": 3492,
            "max": 3505
          },
          {
            "cpu": 2,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3487,
            "median": 3492,
            "max": 3503
          },
          {
            "cpu": 6,
            "min": 3480,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3490,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:33:24.066Z",
        "quietCheckLeadSeconds": 18.005,
        "outsideWindowFromUtc": "2026-10-07T21:32:24.066Z",
        "outsideLoadAtStart": 0.128,
        "outsideLoadRecentAtStart": 0.126,
        "outsideLoadDuring": 0.144,
        "accountingMismatch": false,
        "searches": 16227,
        "clientCpuSeconds": 18.5808,
        "clientCpuMsPerSearch": 1.1451,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:33:42.070Z to 2026-10-07T21:34:42.071Z, 240 samples, divided by the pass\u0027s 16227 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 3.5642,
        "dockerdCpuMsPerSearch": 0.0112,
        "engineCpusBusy": 0.9639,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "sql-diskann",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:35:00.087Z",
        "endUtc": "2026-10-07T21:35:20.092Z",
        "seconds": 20.006,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3489,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 2,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3489,
            "median": 3492,
            "max": 3512
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:34:42.084Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T21:33:42.084Z",
        "outsideLoadAtStart": 0.144,
        "outsideLoadRecentAtStart": 0.19,
        "outsideLoadDuring": 0.141,
        "accountingMismatch": false,
        "searches": 5501,
        "clientCpuSeconds": 5.6817,
        "clientCpuMsPerSearch": 1.0328,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:35:00.087Z to 2026-10-07T21:35:20.088Z, 80 samples, divided by the pass\u0027s 5501 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 3.4993,
        "dockerdCpuMsPerSearch": 0.01,
        "engineCpusBusy": 0.9624,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "sql-diskann",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:35:38.179Z",
        "endUtc": "2026-10-07T21:35:58.188Z",
        "seconds": 20.008,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3497
          },
          {
            "cpu": 1,
            "min": 3468,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3487,
            "median": 3492,
            "max": 3497
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3504
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:35:20.093Z",
        "quietCheckLeadSeconds": 18.086,
        "outsideWindowFromUtc": "2026-10-07T21:34:20.093Z",
        "outsideLoadAtStart": 0.139,
        "outsideLoadRecentAtStart": 0.135,
        "outsideLoadDuring": 0.134,
        "accountingMismatch": false,
        "searches": 13909,
        "clientCpuSeconds": 15.348,
        "clientCpuMsPerSearch": 1.1035,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:35:38.179Z to 2026-10-07T21:35:58.185Z, 80 samples, divided by the pass\u0027s 13909 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 5.6393,
        "dockerdCpuMsPerSearch": 0.0039,
        "engineCpusBusy": 3.9207,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "duckdb",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:37:48.614Z",
        "endUtc": "2026-10-07T21:38:08.619Z",
        "seconds": 20.004,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3494,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 1,
            "min": 3489,
            "median": 3492,
            "max": 3499
          },
          {
            "cpu": 2,
            "min": 3491,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 3,
            "min": 3491,
            "median": 3494,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3489,
            "median": 3492,
            "max": 3504
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 6,
            "min": 3481,
            "median": 3494,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3493,
            "max": 3505
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:37:30.610Z",
        "quietCheckLeadSeconds": 18.004,
        "outsideWindowFromUtc": "2026-10-07T21:36:30.610Z",
        "outsideLoadAtStart": 0.136,
        "outsideLoadRecentAtStart": 0.136,
        "outsideLoadDuring": 0.119,
        "accountingMismatch": false,
        "searches": 5433,
        "clientCpuSeconds": 27.0747,
        "clientCpuMsPerSearch": 4.9834,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:37:48.614Z to 2026-10-07T21:38:08.614Z, 80 samples, divided by the pass\u0027s 5433 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuNullReason": "embedded engine: it runs inside this client process (its CPU is part of clientCpuMsPerSearch), so it has no cgroup of its own",
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "duckdb",
        "pass": "exact",
        "startUtc": "2026-10-07T21:38:26.623Z",
        "endUtc": "2026-10-07T21:39:26.636Z",
        "seconds": 60.013,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3493,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3504
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 2,
            "min": 3477,
            "median": 3492,
            "max": 3503
          },
          {
            "cpu": 3,
            "min": 3490,
            "median": 3493,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3490,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 5,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3489,
            "median": 3494,
            "max": 3541
          },
          {
            "cpu": 7,
            "min": 3484,
            "median": 3493,
            "max": 3504
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:38:08.619Z",
        "quietCheckLeadSeconds": 18.004,
        "outsideWindowFromUtc": "2026-10-07T21:37:08.619Z",
        "outsideLoadAtStart": 0.125,
        "outsideLoadRecentAtStart": 0.101,
        "outsideLoadDuring": 0.146,
        "accountingMismatch": false,
        "searches": 14132,
        "clientCpuSeconds": 88.0314,
        "clientCpuMsPerSearch": 6.2292,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:38:26.623Z to 2026-10-07T21:39:26.627Z, 240 samples, divided by the pass\u0027s 14132 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuNullReason": "embedded engine: it runs inside this client process (its CPU is part of clientCpuMsPerSearch), so it has no cgroup of its own",
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "duckdb",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:39:44.651Z",
        "endUtc": "2026-10-07T21:40:04.663Z",
        "seconds": 20.013,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 79,
        "nearestSample": false,
        "engineMhzMedian": 3493,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 1,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 2,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3486,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 5,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 6,
            "min": 3491,
            "median": 3493,
            "max": 3515
          },
          {
            "cpu": 7,
            "min": 3490,
            "median": 3493,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:39:26.637Z",
        "quietCheckLeadSeconds": 18.014,
        "outsideWindowFromUtc": "2026-10-07T21:38:26.637Z",
        "outsideLoadAtStart": 0.146,
        "outsideLoadRecentAtStart": 0.131,
        "outsideLoadDuring": 0.134,
        "accountingMismatch": false,
        "searches": 11624,
        "clientCpuSeconds": 79.3627,
        "clientCpuMsPerSearch": 6.8275,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:39:44.651Z to 2026-10-07T21:40:04.661Z, 79 samples, divided by the pass\u0027s 11624 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuNullReason": "embedded engine: it runs inside this client process (its CPU is part of clientCpuMsPerSearch), so it has no cgroup of its own",
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "qdrant-hnsw",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:42:01.650Z",
        "endUtc": "2026-10-07T21:42:21.671Z",
        "seconds": 20.021,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3492,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 5,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:41:43.647Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T21:40:43.647Z",
        "outsideLoadAtStart": 0.112,
        "outsideLoadRecentAtStart": 0.12,
        "outsideLoadDuring": 0.132,
        "accountingMismatch": false,
        "searches": 69550,
        "clientCpuSeconds": 36.2927,
        "clientCpuMsPerSearch": 0.5218,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:42:01.650Z to 2026-10-07T21:42:21.652Z, 80 samples, divided by the pass\u0027s 69550 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.929,
        "dockerdCpuMsPerSearch": 0.0011,
        "engineCpusBusy": 3.2303,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "qdrant-hnsw",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:42:39.675Z",
        "endUtc": "2026-10-07T21:42:59.696Z",
        "seconds": 20.02,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3489,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 1,
            "min": 3492,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 2,
            "min": 3491,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 7,
            "min": 3491,
            "median": 3492,
            "max": 3493
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:42:21.672Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T21:41:21.672Z",
        "outsideLoadAtStart": 0.124,
        "outsideLoadRecentAtStart": 0.097,
        "outsideLoadDuring": 0.099,
        "accountingMismatch": false,
        "searches": 21483,
        "clientCpuSeconds": 15.7376,
        "clientCpuMsPerSearch": 0.7326,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:42:39.675Z to 2026-10-07T21:42:59.676Z, 80 samples, divided by the pass\u0027s 21483 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.7305,
        "dockerdCpuMsPerSearch": 0.0029,
        "engineCpusBusy": 0.7847,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "qdrant-hnsw",
        "pass": "exact",
        "startUtc": "2026-10-07T21:43:17.699Z",
        "endUtc": "2026-10-07T21:44:17.756Z",
        "seconds": 60.058,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3489,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3430,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 2,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 3,
            "min": 3463,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 5,
            "min": 3490,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 6,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 7,
            "min": 3489,
            "median": 3492,
            "max": 3494
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:42:59.696Z",
        "quietCheckLeadSeconds": 18.002,
        "outsideWindowFromUtc": "2026-10-07T21:41:59.696Z",
        "outsideLoadAtStart": 0.111,
        "outsideLoadRecentAtStart": 0.117,
        "outsideLoadDuring": 0.104,
        "accountingMismatch": false,
        "searches": 66071,
        "clientCpuSeconds": 48.4729,
        "clientCpuMsPerSearch": 0.7336,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:43:17.699Z to 2026-10-07T21:44:17.699Z, 240 samples, divided by the pass\u0027s 66071 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.71,
        "dockerdCpuMsPerSearch": 0.0029,
        "engineCpusBusy": 0.7818,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "weaviate",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:45:59.849Z",
        "endUtc": "2026-10-07T21:46:19.854Z",
        "seconds": 20.004,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3493,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 1,
            "min": 3492,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 2,
            "min": 3489,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 3,
            "min": 3491,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 4,
            "min": 3453,
            "median": 3493,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3493,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3490,
            "median": 3492,
            "max": 3506
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:45:41.845Z",
        "quietCheckLeadSeconds": 18.004,
        "outsideWindowFromUtc": "2026-10-07T21:44:41.845Z",
        "outsideLoadAtStart": 0.133,
        "outsideLoadRecentAtStart": 0.122,
        "outsideLoadDuring": 0.168,
        "accountingMismatch": false,
        "searches": 3333,
        "clientCpuSeconds": 1.9075,
        "clientCpuMsPerSearch": 0.5723,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:45:59.849Z to 2026-10-07T21:46:19.851Z, 80 samples, divided by the pass\u0027s 3333 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 8.2549,
        "dockerdCpuMsPerSearch": 0.0128,
        "engineCpusBusy": 1.3755,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "weaviate",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:46:37.911Z",
        "endUtc": "2026-10-07T21:46:57.925Z",
        "seconds": 20.014,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3489,
            "median": 3492,
            "max": 3499
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 5,
            "min": 3490,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:46:19.854Z",
        "quietCheckLeadSeconds": 18.056,
        "outsideWindowFromUtc": "2026-10-07T21:45:19.854Z",
        "outsideLoadAtStart": 0.143,
        "outsideLoadRecentAtStart": 0.15,
        "outsideLoadDuring": 0.13,
        "accountingMismatch": false,
        "searches": 6128,
        "clientCpuSeconds": 3.7991,
        "clientCpuMsPerSearch": 0.6199,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:46:37.911Z to 2026-10-07T21:46:57.924Z, 80 samples, divided by the pass\u0027s 6128 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 12.9551,
        "dockerdCpuMsPerSearch": 0.0098,
        "engineCpusBusy": 3.9669,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "pgvector",
        "pass": "exact",
        "startUtc": "2026-10-07T21:48:55.619Z",
        "endUtc": "2026-10-07T21:49:55.640Z",
        "seconds": 60.021,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3426,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 3473,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3486,
            "median": 3492,
            "max": 3503
          },
          {
            "cpu": 3,
            "min": 3489,
            "median": 3492,
            "max": 3503
          },
          {
            "cpu": 4,
            "min": 3486,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3485,
            "median": 3492,
            "max": 3513
          },
          {
            "cpu": 6,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3481,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:48:37.617Z",
        "quietCheckLeadSeconds": 18.002,
        "outsideWindowFromUtc": "2026-10-07T21:47:37.617Z",
        "outsideLoadAtStart": 0.129,
        "outsideLoadRecentAtStart": 0.114,
        "outsideLoadDuring": 0.132,
        "accountingMismatch": false,
        "searches": 26974,
        "clientCpuSeconds": 18.0411,
        "clientCpuMsPerSearch": 0.6688,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:48:55.619Z to 2026-10-07T21:49:55.620Z, 240 samples, divided by the pass\u0027s 26974 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.057,
        "dockerdCpuMsPerSearch": 0.0068,
        "engineCpusBusy": 0.9248,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "pgvector",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:50:13.644Z",
        "endUtc": "2026-10-07T21:50:33.666Z",
        "seconds": 20.022,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3473,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 1,
            "min": 3295,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 2,
            "min": 3487,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3490,
            "median": 3492,
            "max": 3503
          },
          {
            "cpu": 7,
            "min": 3489,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:49:55.641Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T21:48:55.641Z",
        "outsideLoadAtStart": 0.132,
        "outsideLoadRecentAtStart": 0.147,
        "outsideLoadDuring": 0.142,
        "accountingMismatch": false,
        "searches": 23168,
        "clientCpuSeconds": 15.5106,
        "clientCpuMsPerSearch": 0.6695,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:50:13.644Z to 2026-10-07T21:50:33.644Z, 80 samples, divided by the pass\u0027s 23168 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.7101,
        "dockerdCpuMsPerSearch": 0.0023,
        "engineCpusBusy": 0.8226,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "pgvector",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:50:51.669Z",
        "endUtc": "2026-10-07T21:51:11.696Z",
        "seconds": 20.027,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 1,
            "min": 3492,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3490,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 5,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:50:33.666Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T21:49:33.666Z",
        "outsideLoadAtStart": 0.138,
        "outsideLoadRecentAtStart": 0.147,
        "outsideLoadDuring": 0.113,
        "accountingMismatch": false,
        "searches": 81909,
        "clientCpuSeconds": 44.1704,
        "clientCpuMsPerSearch": 0.5393,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:50:51.669Z to 2026-10-07T21:51:11.671Z, 80 samples, divided by the pass\u0027s 81909 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.9497,
        "dockerdCpuMsPerSearch": 0.0007,
        "engineCpusBusy": 3.889,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "vespa",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:53:57.636Z",
        "endUtc": "2026-10-07T21:54:17.645Z",
        "seconds": 20.009,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3497
          },
          {
            "cpu": 5,
            "min": 3492,
            "median": 3492,
            "max": 3499
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:53:39.633Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T21:52:39.633Z",
        "outsideLoadAtStart": 0.15,
        "outsideLoadRecentAtStart": 0.183,
        "outsideLoadDuring": 0.128,
        "accountingMismatch": false,
        "searches": 10101,
        "clientCpuSeconds": 9.2706,
        "clientCpuMsPerSearch": 0.9178,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:53:57.636Z to 2026-10-07T21:54:17.637Z, 80 samples, divided by the pass\u0027s 10101 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.3071,
        "dockerdCpuMsPerSearch": 0.0048,
        "engineCpusBusy": 1.1651,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "vespa",
        "pass": "exact",
        "startUtc": "2026-10-07T21:54:35.647Z",
        "endUtc": "2026-10-07T21:55:35.671Z",
        "seconds": 60.024,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3482,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 1,
            "min": 3487,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 3,
            "min": 3491,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3489,
            "median": 3492,
            "max": 3499
          },
          {
            "cpu": 5,
            "min": 3485,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 6,
            "min": 3491,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3491,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:54:17.645Z",
        "quietCheckLeadSeconds": 18.002,
        "outsideWindowFromUtc": "2026-10-07T21:53:17.645Z",
        "outsideLoadAtStart": 0.138,
        "outsideLoadRecentAtStart": 0.208,
        "outsideLoadDuring": 0.11,
        "accountingMismatch": false,
        "searches": 30814,
        "clientCpuSeconds": 28.1402,
        "clientCpuMsPerSearch": 0.9132,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:54:35.647Z to 2026-10-07T21:55:35.648Z, 240 samples, divided by the pass\u0027s 30814 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.2149,
        "dockerdCpuMsPerSearch": 0.0044,
        "engineCpusBusy": 1.1375,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "vespa",
        "pass": "default@8",
        "startUtc": "2026-10-07T21:55:53.678Z",
        "endUtc": "2026-10-07T21:56:13.691Z",
        "seconds": 20.013,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 1,
            "min": 3463,
            "median": 3492,
            "max": 3497
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3472,
            "median": 3492,
            "max": 3499
          },
          {
            "cpu": 5,
            "min": 3489,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:55:35.672Z",
        "quietCheckLeadSeconds": 18.006,
        "outsideWindowFromUtc": "2026-10-07T21:54:35.672Z",
        "outsideLoadAtStart": 0.11,
        "outsideLoadRecentAtStart": 0.123,
        "outsideLoadDuring": 0.183,
        "accountingMismatch": false,
        "searches": 31420,
        "clientCpuSeconds": 27.6243,
        "clientCpuMsPerSearch": 0.8792,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:55:53.678Z to 2026-10-07T21:56:13.683Z, 80 samples, divided by the pass\u0027s 31420 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.4344,
        "dockerdCpuMsPerSearch": 0.0014,
        "engineCpusBusy": 3.8236,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "elasticsearch",
        "pass": "default@1",
        "startUtc": "2026-10-07T21:58:44.268Z",
        "endUtc": "2026-10-07T21:59:04.282Z",
        "seconds": 20.014,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3491,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 4,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3423,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3497
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:58:26.265Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T21:57:26.265Z",
        "outsideLoadAtStart": 0.161,
        "outsideLoadRecentAtStart": 0.138,
        "outsideLoadDuring": 0.125,
        "accountingMismatch": false,
        "searches": 14990,
        "clientCpuSeconds": 6.8207,
        "clientCpuMsPerSearch": 0.455,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:58:44.268Z to 2026-10-07T21:59:04.269Z, 80 samples, divided by the pass\u0027s 14990 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 1.0453,
        "dockerdCpuMsPerSearch": 0.0034,
        "engineCpusBusy": 0.7834,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "elasticsearch",
        "pass": "exact",
        "startUtc": "2026-10-07T21:59:22.286Z",
        "endUtc": "2026-10-07T22:00:22.327Z",
        "seconds": 60.04,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3487,
            "median": 3492,
            "max": 3496
          },
          {
            "cpu": 1,
            "min": 3467,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3468,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3474,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 2244,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 2277,
            "median": 3492,
            "max": 3565
          },
          {
            "cpu": 6,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3217,
            "median": 3492,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T21:59:04.283Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T21:58:04.283Z",
        "outsideLoadAtStart": 0.146,
        "outsideLoadRecentAtStart": 0.116,
        "outsideLoadDuring": 0.152,
        "accountingMismatch": false,
        "searches": 47265,
        "clientCpuSeconds": 21.5218,
        "clientCpuMsPerSearch": 0.4553,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T21:59:22.286Z to 2026-10-07T22:00:22.287Z, 240 samples, divided by the pass\u0027s 47265 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.9694,
        "dockerdCpuMsPerSearch": 0.0035,
        "engineCpusBusy": 0.7637,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "elasticsearch",
        "pass": "default@8",
        "startUtc": "2026-10-07T22:00:40.332Z",
        "endUtc": "2026-10-07T22:01:00.349Z",
        "seconds": 20.017,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3491,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 5,
            "min": 3492,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:00:22.328Z",
        "quietCheckLeadSeconds": 18.005,
        "outsideWindowFromUtc": "2026-10-07T21:59:22.328Z",
        "outsideLoadAtStart": 0.152,
        "outsideLoadRecentAtStart": 0.155,
        "outsideLoadDuring": 0.149,
        "accountingMismatch": false,
        "searches": 54287,
        "clientCpuSeconds": 26.7637,
        "clientCpuMsPerSearch": 0.493,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:00:40.332Z to 2026-10-07T22:01:00.334Z, 80 samples, divided by the pass\u0027s 54287 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 1.3789,
        "dockerdCpuMsPerSearch": 0.0011,
        "engineCpusBusy": 3.7425,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "mariadb",
        "pass": "default@8",
        "startUtc": "2026-10-07T22:02:59.940Z",
        "endUtc": "2026-10-07T22:03:19.990Z",
        "seconds": 20.05,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3492,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 1,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:02:41.937Z",
        "quietCheckLeadSeconds": 18.002,
        "outsideWindowFromUtc": "2026-10-07T22:01:41.937Z",
        "outsideLoadAtStart": 0.141,
        "outsideLoadRecentAtStart": 0.122,
        "outsideLoadDuring": 0.09,
        "accountingMismatch": false,
        "searches": 118554,
        "clientCpuSeconds": 45.0748,
        "clientCpuMsPerSearch": 0.3802,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:02:59.940Z to 2026-10-07T22:03:19.941Z, 80 samples, divided by the pass\u0027s 118554 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.6211,
        "dockerdCpuMsPerSearch": 0.0005,
        "engineCpusBusy": 3.6814,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "mariadb",
        "pass": "default@1",
        "startUtc": "2026-10-07T22:03:37.994Z",
        "endUtc": "2026-10-07T22:03:58.029Z",
        "seconds": 20.034,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 81,
        "nearestSample": false,
        "engineMhzMedian": 3493,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3497
          },
          {
            "cpu": 1,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 2,
            "min": 3489,
            "median": 3493,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3452,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3491,
            "median": 3493,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3488,
            "median": 3492,
            "max": 3571
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:03:19.991Z",
        "quietCheckLeadSeconds": 18.004,
        "outsideWindowFromUtc": "2026-10-07T22:02:19.991Z",
        "outsideLoadAtStart": 0.097,
        "outsideLoadRecentAtStart": 0.131,
        "outsideLoadDuring": 0.133,
        "accountingMismatch": false,
        "searches": 30984,
        "clientCpuSeconds": 15.0504,
        "clientCpuMsPerSearch": 0.4857,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:03:37.994Z to 2026-10-07T22:03:57.995Z, 80 samples, divided by the pass\u0027s 30984 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.4544,
        "dockerdCpuMsPerSearch": 0.0023,
        "engineCpusBusy": 0.704,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "mariadb",
        "pass": "exact",
        "startUtc": "2026-10-07T22:04:16.032Z",
        "endUtc": "2026-10-07T22:05:16.060Z",
        "seconds": 60.028,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3466,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 3416,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 2,
            "min": 3489,
            "median": 3492,
            "max": 3506
          },
          {
            "cpu": 3,
            "min": 3486,
            "median": 3492,
            "max": 3503
          },
          {
            "cpu": 4,
            "min": 3488,
            "median": 3492,
            "max": 3503
          },
          {
            "cpu": 5,
            "min": 3472,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 6,
            "min": 3489,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 7,
            "min": 3444,
            "median": 3493,
            "max": 3501
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:03:58.030Z",
        "quietCheckLeadSeconds": 18.002,
        "outsideWindowFromUtc": "2026-10-07T22:02:58.030Z",
        "outsideLoadAtStart": 0.117,
        "outsideLoadRecentAtStart": 0.143,
        "outsideLoadDuring": 0.127,
        "accountingMismatch": false,
        "searches": 36181,
        "clientCpuSeconds": 17.9982,
        "clientCpuMsPerSearch": 0.4974,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:04:16.032Z to 2026-10-07T22:05:16.032Z, 240 samples, divided by the pass\u0027s 36181 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 1.4582,
        "dockerdCpuMsPerSearch": 0.0046,
        "engineCpusBusy": 0.8793,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "chroma",
        "pass": "default@8",
        "startUtc": "2026-10-07T22:06:42.955Z",
        "endUtc": "2026-10-07T22:07:02.966Z",
        "seconds": 20.011,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3492,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 1,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3489,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3492,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:06:24.940Z",
        "quietCheckLeadSeconds": 18.015,
        "outsideWindowFromUtc": "2026-10-07T22:05:24.940Z",
        "outsideLoadAtStart": 0.086,
        "outsideLoadRecentAtStart": 0.068,
        "outsideLoadDuring": 0.062,
        "accountingMismatch": false,
        "searches": 15826,
        "clientCpuSeconds": 7.4745,
        "clientCpuMsPerSearch": 0.4723,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:06:42.955Z to 2026-10-07T22:07:02.962Z, 80 samples, divided by the pass\u0027s 15826 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.7123,
        "dockerdCpuMsPerSearch": 0.003,
        "engineCpusBusy": 2.1455,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "chroma",
        "pass": "default@1",
        "startUtc": "2026-10-07T22:07:20.970Z",
        "endUtc": "2026-10-07T22:07:40.979Z",
        "seconds": 20.01,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3490,
            "median": 3492,
            "max": 3498
          },
          {
            "cpu": 1,
            "min": 3481,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 4,
            "min": 3478,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3491,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3491,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:07:02.967Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T22:06:02.967Z",
        "outsideLoadAtStart": 0.083,
        "outsideLoadRecentAtStart": 0.058,
        "outsideLoadDuring": 0.087,
        "accountingMismatch": false,
        "searches": 9509,
        "clientCpuSeconds": 4.516,
        "clientCpuMsPerSearch": 0.4749,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:07:20.970Z to 2026-10-07T22:07:40.972Z, 80 samples, divided by the pass\u0027s 9509 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 2.4635,
        "dockerdCpuMsPerSearch": 0.0062,
        "engineCpusBusy": 1.1712,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "sqlitevec",
        "pass": "default@1",
        "startUtc": "2026-10-07T22:09:30.846Z",
        "endUtc": "2026-10-07T22:09:50.855Z",
        "seconds": 20.009,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3496,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3488,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 3492,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3491,
            "median": 3493,
            "max": 3600
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3500,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3492,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 5,
            "min": 3475,
            "median": 3492,
            "max": 3502
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3498,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3481,
            "median": 3493,
            "max": 3596
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:09:12.843Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T22:08:12.843Z",
        "outsideLoadAtStart": 0.145,
        "outsideLoadRecentAtStart": 0.126,
        "outsideLoadDuring": 0.155,
        "accountingMismatch": false,
        "searches": 10284,
        "clientCpuSeconds": 21.1493,
        "clientCpuMsPerSearch": 2.0565,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:09:30.846Z to 2026-10-07T22:09:50.846Z, 80 samples, divided by the pass\u0027s 10284 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuNullReason": "embedded engine: it runs inside this client process (its CPU is part of clientCpuMsPerSearch), so it has no cgroup of its own",
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "sqlitevec",
        "pass": "default@8",
        "startUtc": "2026-10-07T22:10:08.863Z",
        "endUtc": "2026-10-07T22:10:28.870Z",
        "seconds": 20.007,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 79,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 1,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 2,
            "min": 3479,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 4,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 5,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3493,
            "max": 3615
          },
          {
            "cpu": 7,
            "min": 3413,
            "median": 3492,
            "max": 3533
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:09:50.856Z",
        "quietCheckLeadSeconds": 18.007,
        "outsideWindowFromUtc": "2026-10-07T22:08:50.856Z",
        "outsideLoadAtStart": 0.148,
        "outsideLoadRecentAtStart": 0.194,
        "outsideLoadDuring": 0.166,
        "accountingMismatch": false,
        "searches": 22618,
        "clientCpuSeconds": 79.8318,
        "clientCpuMsPerSearch": 3.5296,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:10:08.863Z to 2026-10-07T22:10:28.865Z, 79 samples, divided by the pass\u0027s 22618 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuNullReason": "embedded engine: it runs inside this client process (its CPU is part of clientCpuMsPerSearch), so it has no cgroup of its own",
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "sqlitevec",
        "pass": "exact",
        "startUtc": "2026-10-07T22:10:46.874Z",
        "endUtc": "2026-10-07T22:11:46.898Z",
        "seconds": 60.025,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 240,
        "nearestSample": false,
        "engineMhzMedian": 3493,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3487,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 1,
            "min": 3490,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 2,
            "min": 3417,
            "median": 3493,
            "max": 3507
          },
          {
            "cpu": 3,
            "min": 3480,
            "median": 3493,
            "max": 3509
          },
          {
            "cpu": 4,
            "min": 3479,
            "median": 3492,
            "max": 3501
          },
          {
            "cpu": 5,
            "min": 3424,
            "median": 3492,
            "max": 3500
          },
          {
            "cpu": 6,
            "min": 3405,
            "median": 3493,
            "max": 3500
          },
          {
            "cpu": 7,
            "min": 3481,
            "median": 3493,
            "max": 3500
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:10:28.870Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T22:09:28.870Z",
        "outsideLoadAtStart": 0.157,
        "outsideLoadRecentAtStart": 0.138,
        "outsideLoadDuring": 0.153,
        "accountingMismatch": false,
        "searches": 30879,
        "clientCpuSeconds": 62.841,
        "clientCpuMsPerSearch": 2.0351,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:10:46.874Z to 2026-10-07T22:11:46.874Z, 240 samples, divided by the pass\u0027s 30879 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuNullReason": "embedded engine: it runs inside this client process (its CPU is part of clientCpuMsPerSearch), so it has no cgroup of its own",
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "qdrant",
        "pass": "default@8",
        "startUtc": "2026-10-07T22:13:12.585Z",
        "endUtc": "2026-10-07T22:13:32.605Z",
        "seconds": 20.02,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 1,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3495
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 5,
            "min": 3492,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3497
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:12:54.582Z",
        "quietCheckLeadSeconds": 18.004,
        "outsideWindowFromUtc": "2026-10-07T22:11:54.582Z",
        "outsideLoadAtStart": 0.126,
        "outsideLoadRecentAtStart": 0.108,
        "outsideLoadDuring": 0.16,
        "accountingMismatch": false,
        "searches": 65604,
        "clientCpuSeconds": 35.0558,
        "clientCpuMsPerSearch": 0.5344,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:13:12.585Z to 2026-10-07T22:13:32.588Z, 80 samples, divided by the pass\u0027s 65604 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 1.0056,
        "dockerdCpuMsPerSearch": 0.001,
        "engineCpusBusy": 3.2981,
        "waitedSeconds": 0,
        "busyBox": false
      },
      {
        "target": "qdrant",
        "pass": "default@1",
        "startUtc": "2026-10-07T22:13:50.608Z",
        "endUtc": "2026-10-07T22:14:10.627Z",
        "seconds": 20.019,
        "endedBy": "result line",
        "governor": "performance",
        "frequencySamples": 80,
        "nearestSample": false,
        "engineMhzMedian": 3492,
        "clientMhzMedian": 3492,
        "cpuMhz": [
          {
            "cpu": 0,
            "min": 3491,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 1,
            "min": 3491,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 2,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 3,
            "min": 3492,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 4,
            "min": 3491,
            "median": 3492,
            "max": 3494
          },
          {
            "cpu": 5,
            "min": 3489,
            "median": 3492,
            "max": 3493
          },
          {
            "cpu": 6,
            "min": 3492,
            "median": 3492,
            "max": 3492
          },
          {
            "cpu": 7,
            "min": 3492,
            "median": 3492,
            "max": 3492
          }
        ],
        "quietCheckBefore": "warm-up",
        "quietCheckUtc": "2026-10-07T22:13:32.605Z",
        "quietCheckLeadSeconds": 18.003,
        "outsideWindowFromUtc": "2026-10-07T22:12:32.605Z",
        "outsideLoadAtStart": 0.133,
        "outsideLoadRecentAtStart": 0.074,
        "outsideLoadDuring": 0.123,
        "accountingMismatch": false,
        "searches": 22060,
        "clientCpuSeconds": 16.2566,
        "clientCpuMsPerSearch": 0.7369,
        "clientCpuBasis": "user \u002B system CPU time of this process\u0027s threads (not its finished children; includes the 4 Hz sampler thread and the kernel network time spent on this process\u0027s behalf) from 2026-10-07T22:13:50.608Z to 2026-10-07T22:14:10.608Z, 80 samples, divided by the pass\u0027s 22060 completed searches",
        "clockRead": true,
        "clockOff": false,
        "engineCpuMsPerSearch": 0.7933,
        "dockerdCpuMsPerSearch": 0.0035,
        "engineCpusBusy": 0.8751,
        "waitedSeconds": 0,
        "busyBox": false
      }
    ],
    "cpuIdle": {
      "driver": "intel_idle",
      "governor": "menu",
      "intelIdleMaxCstate": "9",
      "states": [
        {
          "index": 0,
          "name": "POLL",
          "latencyUs": 0,
          "residencyUs": 0,
          "disabledOn": "",
          "defaultStatus": "enabled"
        },
        {
          "index": 1,
          "name": "C1",
          "latencyUs": 2,
          "residencyUs": 2,
          "disabledOn": "",
          "defaultStatus": "enabled"
        },
        {
          "index": 2,
          "name": "C1E",
          "latencyUs": 10,
          "residencyUs": 20,
          "disabledOn": "",
          "defaultStatus": "enabled"
        },
        {
          "index": 3,
          "name": "C3",
          "latencyUs": 33,
          "residencyUs": 100,
          "disabledOn": "0-7",
          "defaultStatus": "disabled"
        },
        {
          "index": 4,
          "name": "C6",
          "latencyUs": 133,
          "residencyUs": 400,
          "disabledOn": "",
          "defaultStatus": "enabled"
        }
      ]
    },
    "cpuIdleAtEnd": {
      "driver": "intel_idle",
      "governor": "menu",
      "intelIdleMaxCstate": "9",
      "states": [
        {
          "index": 0,
          "name": "POLL",
          "latencyUs": 0,
          "residencyUs": 0,
          "disabledOn": "",
          "defaultStatus": "enabled"
        },
        {
          "index": 1,
          "name": "C1",
          "latencyUs": 2,
          "residencyUs": 2,
          "disabledOn": "",
          "defaultStatus": "enabled"
        },
        {
          "index": 2,
          "name": "C1E",
          "latencyUs": 10,
          "residencyUs": 20,
          "disabledOn": "",
          "defaultStatus": "enabled"
        },
        {
          "index": 3,
          "name": "C3",
          "latencyUs": 33,
          "residencyUs": 100,
          "disabledOn": "0-7",
          "defaultStatus": "disabled"
        },
        {
          "index": 4,
          "name": "C6",
          "latencyUs": 133,
          "residencyUs": 400,
          "disabledOn": "",
          "defaultStatus": "enabled"
        }
      ]
    },
    "connections": [
      {
        "target": "oracle",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-oracle",
            "address": "container-ip",
            "port": 1521,
            "containerId": "b39d96d10dfb",
            "network": "gvb-oracle_default",
            "notUsed": "localhost:1521"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 1521,
            "sockets": 14,
            "kind": "this target"
          },
          {
            "address": "localhost",
            "port": 1433,
            "sockets": 2,
            "kind": "not this target"
          }
        ],
        "observedUtc": "2026-10-07T20:56:18.856Z"
      },
      {
        "target": "mongodb",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-mongodb",
            "address": "container-ip",
            "port": 27017,
            "containerId": "2473496c702a",
            "network": "gvb-mongodb_default",
            "notUsed": "localhost:27017"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 27017,
            "sockets": 10,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:00:48.829Z"
      },
      {
        "target": "redis",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-redis",
            "address": "container-ip",
            "port": 6379,
            "containerId": "27d5986e11b5",
            "network": "gvb-redis_default",
            "notUsed": "localhost:6379"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 6379,
            "sockets": 1,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:07:54.230Z"
      },
      {
        "target": "typesense",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-typesense",
            "address": "container-ip",
            "port": 8108,
            "containerId": "de8745b25e16",
            "network": "engines_default",
            "notUsed": "localhost:8108"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 8108,
            "sockets": 8,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:12:13.835Z"
      },
      {
        "target": "clickhouse",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-clickhouse",
            "address": "container-ip",
            "port": 8123,
            "containerId": "f42c0fc767ee",
            "network": "gvb-clickhouse_default",
            "notUsed": "localhost:8123"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 8123,
            "sockets": 1,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:19:38.989Z"
      },
      {
        "target": "sql",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-mssql",
            "address": "container-ip",
            "port": 1433,
            "containerId": "658134ec50ab",
            "network": "gvb-mssql_default",
            "notUsed": "localhost:14330"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 1433,
            "sockets": 9,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:22:13.033Z"
      },
      {
        "target": "opensearch",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-opensearch",
            "address": "container-ip",
            "port": 9200,
            "containerId": "c2aa02f803d1",
            "network": "engines_default",
            "notUsed": "localhost:9201"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 9200,
            "sockets": 1,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:26:49.309Z"
      },
      {
        "target": "milvus",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-milvus",
            "address": "container-ip",
            "port": 19530,
            "containerId": "45580d3aa0e2",
            "network": "gvb-milvus_default",
            "notUsed": "localhost:19530"
          },
          {
            "what": "container gvb-milvus",
            "address": "container-ip",
            "port": 9091,
            "containerId": "45580d3aa0e2",
            "network": "gvb-milvus_default",
            "notUsed": "localhost:9091"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 19530,
            "sockets": 8,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:31:36.272Z"
      },
      {
        "target": "sql-diskann",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-mssql",
            "address": "container-ip",
            "port": 1433,
            "containerId": "e6296fcd9a0a",
            "network": "gvb-mssql_default",
            "notUsed": "localhost:14330"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 1433,
            "sockets": 10,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:35:58.188Z"
      },
      {
        "target": "duckdb",
        "hosting": "embedded",
        "route": "in this process (embedded), no network",
        "endpoints": [],
        "observed": [],
        "observedUtc": "2026-10-07T21:40:04.663Z",
        "problem": "no open TCP connection was found"
      },
      {
        "target": "qdrant-hnsw",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-qdrant",
            "address": "container-ip",
            "port": 6334,
            "containerId": "6a29c33862e5",
            "network": "gvb-qdrant_default",
            "notUsed": "localhost:16334"
          },
          {
            "what": "container gvb-qdrant",
            "address": "container-ip",
            "port": 6333,
            "containerId": "6a29c33862e5",
            "network": "gvb-qdrant_default",
            "notUsed": "localhost:16333"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 6334,
            "sockets": 1,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:44:17.756Z"
      },
      {
        "target": "weaviate",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-weaviate",
            "address": "container-ip",
            "port": 8080,
            "containerId": "12817952bd18",
            "network": "gvb-weaviate_default",
            "notUsed": "localhost:8085"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 8080,
            "sockets": 8,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:46:57.925Z"
      },
      {
        "target": "pgvector",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-pgvector",
            "address": "container-ip",
            "port": 5432,
            "containerId": "95b597379f00",
            "network": "gvb-pgvector_default",
            "notUsed": "localhost:5432"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 5432,
            "sockets": 8,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:51:11.696Z"
      },
      {
        "target": "vespa",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-vespa",
            "address": "container-ip",
            "port": 8080,
            "containerId": "623ee2444ee6",
            "network": "engines_default",
            "notUsed": "localhost:8090"
          },
          {
            "what": "container gvb-vespa",
            "address": "container-ip",
            "port": 19071,
            "containerId": "623ee2444ee6",
            "network": "engines_default",
            "notUsed": "localhost:19071"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 8080,
            "sockets": 1,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T21:56:13.691Z"
      },
      {
        "target": "elasticsearch",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-elasticsearch",
            "address": "container-ip",
            "port": 9200,
            "containerId": "3da18534bcc9",
            "network": "engines_default",
            "notUsed": "localhost:9200"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 9200,
            "sockets": 8,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T22:01:00.349Z"
      },
      {
        "target": "mariadb",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvbbench-mariadb",
            "address": "container-ip",
            "port": 3306,
            "containerId": "e002b74d541a",
            "network": "gvbbench-mariadb_default",
            "notUsed": "localhost:13306"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 3306,
            "sockets": 8,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T22:05:16.060Z"
      },
      {
        "target": "chroma",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-chroma",
            "address": "container-ip",
            "port": 8000,
            "containerId": "e341a21a45e5",
            "network": "gvb-chroma_default",
            "notUsed": "localhost:8000"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 8000,
            "sockets": 8,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T22:07:40.979Z"
      },
      {
        "target": "sqlitevec",
        "hosting": "embedded",
        "route": "in this process (embedded), no network",
        "endpoints": [],
        "observed": [],
        "observedUtc": "2026-10-07T22:11:46.899Z",
        "problem": "no open TCP connection was found"
      },
      {
        "target": "qdrant",
        "hosting": "compose",
        "route": "container address on its Docker network, not the published port (no docker-proxy)",
        "endpoints": [
          {
            "what": "container gvb-qdrant",
            "address": "container-ip",
            "port": 6334,
            "containerId": "b0bc08dd263f",
            "network": "gvb-qdrant_default",
            "notUsed": "localhost:16334"
          },
          {
            "what": "container gvb-qdrant",
            "address": "container-ip",
            "port": 6333,
            "containerId": "b0bc08dd263f",
            "network": "gvb-qdrant_default",
            "notUsed": "localhost:16333"
          }
        ],
        "observed": [
          {
            "address": "container-ip",
            "port": 6334,
            "sockets": 1,
            "kind": "this target"
          }
        ],
        "observedUtc": "2026-10-07T22:14:10.627Z"
      }
    ],
    "cpuAccounting": "busy = user \u002B nice \u002B system \u002B irq \u002B softirq \u002B steal (guest time is already in user); CONFIG_IRQ_TIME_ACCOUNTING is not set, so task and cgroup run time include the interrupt and softirq time that hit them and it is added; CONFIG_PARAVIRT_TIME_ACCOUNTING is not set, so steal is added (/boot/config-6.8.0-142-generic)",
    "loadAverageEnd": "3.50 3.49 3.53",
    "stateFile": "~/gvb-work/bench-machine-state.json",
    "restored": [
      "client affinity back to 0-7",
      "governor back to schedutil on CPUs 0-7",
      "CPU clock back: turbo on (/sys/devices/system/cpu/intel_pstate/no_turbo 0); every CPU\u0027s ceiling and floor read as before the run; uncore limit back to min 1200 MHz, max 3000 MHz (MSR 0x620 = 0xc1e)"
    ],
    "restoreProblems": [],
    "flags": [
      "duckdb is embedded: it ran inside the client process on the client CPUs 0-1,4-5, sharing them with the client.",
      "sqlitevec is embedded: it ran inside the client process on the client CPUs 0-1,4-5, sharing them with the client."
    ],
    "clock": {
      "pinned": true,
      "pinnedMhz": 3500,
      "ceilingBeforeMhz": 3600,
      "noTurbo": {
        "before": 0,
        "during": 1,
        "atEnd": 1
      },
      "uncoreMsr620": {
        "before": "0xc1e",
        "during": "0x1e1e",
        "atEnd": "0x1e1e"
      },
      "throttle": {
        "atStart": {
          "readUtc": "2026-10-07T20:51:06.231Z",
          "coreEvents": 0,
          "packageEvents": 0,
          "perCpu": [
            {
              "cpu": 0,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "0,4",
              "packageId": "0"
            },
            {
              "cpu": 1,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "1,5",
              "packageId": "0"
            },
            {
              "cpu": 2,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "2,6",
              "packageId": "0"
            },
            {
              "cpu": 3,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "3,7",
              "packageId": "0"
            },
            {
              "cpu": 4,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "0,4",
              "packageId": "0"
            },
            {
              "cpu": 5,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "1,5",
              "packageId": "0"
            },
            {
              "cpu": 6,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "2,6",
              "packageId": "0"
            },
            {
              "cpu": 7,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "3,7",
              "packageId": "0"
            }
          ]
        },
        "atEnd": {
          "readUtc": "2026-10-07T22:14:12.449Z",
          "coreEvents": 0,
          "packageEvents": 0,
          "perCpu": [
            {
              "cpu": 0,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "0,4",
              "packageId": "0"
            },
            {
              "cpu": 1,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "1,5",
              "packageId": "0"
            },
            {
              "cpu": 2,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "2,6",
              "packageId": "0"
            },
            {
              "cpu": 3,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "3,7",
              "packageId": "0"
            },
            {
              "cpu": 4,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "0,4",
              "packageId": "0"
            },
            {
              "cpu": 5,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "1,5",
              "packageId": "0"
            },
            {
              "cpu": 6,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "2,6",
              "packageId": "0"
            },
            {
              "cpu": 7,
              "coreCount": 0,
              "packageCount": 0,
              "siblings": "3,7",
              "packageId": "0"
            }
          ]
        }
      },
      "toleranceBp": 100,
      "rule": "every CPU\u0027s clock is read from /sys/devices/system/cpu/cpuN/cpufreq/scaling_cur_freq every 250 ms; each CPU\u0027s median over a pass is taken, then the median of those medians per CPU group: the engine CPUs (2-3,6-7) and the client CPUs (0-1,4-5) are judged as two groups; a pass is \u0027clock off\u0027 (clockOff) when a group\u0027s median differs from the pinned clock by more than 100 bp (1%), and \u0027clock not read\u0027 (clockRead false) when a group has no reading; either counts as not at the pinned clock. Limited power: a CPU\u0027s median hides off-clock readings while they are fewer than half of its readings, and the median of 4 CPU medians hides 1 CPU(s) off the clock for the whole pass. This rule reads the kernel\u0027s figures only; the independent check of the clock is APERF/MPERF, read by the run\u0027s observer outside this tool. Thermal throttle counters (thermal_throttle/core_throttle_count and package_throttle_count of every CPU) are read at the start and the end of the run and at each target\u0027s start, first warm-up line and end, never by the clock sampler and never inside a timed pass; the core counter is counted once per physical core (thread_siblings_list) and the package counter once per package (physical_package_id), a rise on any CPU counts, a counter that went down counts as a rise, and only a rise against no rise means anything. They count thermal events only: no power-limit counters are read, so power capping (RAPL) and AVX clock drops are not seen."
    },
    "throttleByTarget": {
      "oracle": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "mongodb": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "redis": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "typesense": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "clickhouse": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "sql": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "opensearch": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "milvus": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "sql-diskann": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "duckdb": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "qdrant-hnsw": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "weaviate": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "pgvector": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "vespa": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "elasticsearch": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "mariadb": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "chroma": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "sqlitevec": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      },
      "qdrant": {
        "coreRise": 0,
        "packageRise": 0,
        "fromFirstWarmup": {
          "coreRise": 0,
          "packageRise": 0
        }
      }
    },
    "engineCpu": {
      "dockerdCgroup": "/sys/fs/cgroup/system.slice/docker.service",
      "dockerdCgroupProcesses": [
        "docker-proxy",
        "dockerd"
      ],
      "containerdShimCgroups": [
        "/sys/fs/cgroup/system.slice/containerd.service"
      ],
      "rule": "engine CPU per search is the CPU time (cpu.stat usage_usec) of the cgroups each target\u0027s turn followed (conditions.engines[].cgroups, dockerd\u0027s left out), read with every 250 ms sample, interpolated to the pass\u0027s timed window and divided by its completed searches; engineCpusBusy is that CPU time over the window\u0027s length. A followed cgroup counts every process in it. dockerd\u0027s cgroup (/sys/fs/cgroup/system.slice/docker.service, holding docker-proxy, dockerd, for every container on the box) is left out of engine CPU per search and given as dockerdCpuMsPerSearch; it is subtracted from outside load as benchmark work during the turns of oracle, mongodb, redis, typesense, clickhouse, sql, opensearch, milvus, sql-diskann, qdrant-hnsw, weaviate, pgvector, vespa, elasticsearch, mariadb, chroma, qdrant, and counts as outside load during the turns of duckdb, sqlitevec. containerd-shim runs in /sys/fs/cgroup/system.slice/containerd.service, which is in neither engine figure and counts as outside load. An embedded engine runs in this client process, so its CPU is in clientCpuMsPerSearch and its engine figure is null with the reason; a target whose engine has no cgroup followed, or whose containers could not all be pinned, also gets null with the reason, never 0."
    },
    "build": {
      "informationalVersion": "1.0.0\u002B9b924200abc3f2c3e41c2a9520e5c7bb16748e6c",
      "commit": "9b924200abc3f2c3e41c2a9520e5c7bb16748e6c"
    },
    "boot": {
      "bootId": "a2f94313-eeda-460c-8474-8a9ee898f123",
      "bootTimeUtc": "2026-10-03T15:53:39Z"
    }
  }
}