diff --git a/ravel/README.md b/ravel/README.md index f8a8b7d183..15bf4dfcce 100644 --- a/ravel/README.md +++ b/ravel/README.md @@ -68,18 +68,37 @@ container, less a fixed reserve), with a fixed segment cap and engine deadline. Every resolved value and its source is logged on a `performance default resolved` line in `server.log`; a published result should record those lines, because they are the configuration the numbers were measured at. On -c6a.4xlarge, with the store on loopback, the fetch cache resolves to 12.3 GB and -the per-query SQL pool to 16.5 GB. That is the tenant's whole SQL share since -0.21.0; it was 8.2 GB before. `./start` also raises the process's open-file +c6a.4xlarge, with the store on loopback, v0.23.0 resolved the fetch cache to +11.4 GB, the per-query SQL pool to 14.2 GB and fetch concurrency to 32. +`./start` also raises the process's open-file soft limit to the hard limit, since the server has exited with `EMFILE` at startup under the common default of 1024. -`./load` declares the typed attribute columns and then loads the Parquet file. -Object size is set at ingest by `--batch-rows`: one batch becomes one object per -involved shard, so 150,000 rows over 4 shards gives ~4 MB objects and roughly -2,600 objects for the 100M-row dataset. **There is no post-load step**: no -compaction, no catalog fold, no VACUUM equivalent, so the layout the queries -run against is the layout ingest produced. +`./load` declares the typed attribute columns and then loads the Parquet file +in 100,000-row batches. Since 0.23.0 a shard merges several batches into one +stored object until its buffer's estimated uncompressed content reaches +`--target-bytes`; at 1,850,000,000 that gives objects of about 25 MB on this +dataset (about 410 objects in all; a stored object is about 1/74 of the +estimate here). Before 0.23.0 each batch was its own object, about 4 MB. Large +objects are what make a cold scan cheap. The loader holds its batches under +`--load-memory-bytes`, so the load fits the machine. `./load` picks the +pipeline depth, read cursors and that budget from `MemTotal`: + +| MemTotal | `--pipeline-depth` | `--read-cursors` | `--load-memory-bytes` | +|---|---|---|---| +| 15 GB and up | 32 | 16 | 6,500,000,000 | +| 7 to 15 GB | 24 | 16 | 3,500,000,000 | +| 3 to 7 GB | 16 | 2 | 1,200,000,000 | +| under 3 GB | 8 | 1 | derived by the loader | + +On a 4 GB machine the budget is smaller than the objects need, so the loader +flushes early to stay inside it and the objects come out smaller, about 17 MB +median. `--max-flush-delay 30s` lets an object fill before the age trigger +closes it. Every value can be overridden from the environment (`RAVEL_BATCH_ROWS`, +`RAVEL_TARGET_BYTES`, `RAVEL_PIPELINE_DEPTH`, `RAVEL_READ_CURSORS`, +`RAVEL_LOAD_MEMORY_BYTES`, `RAVEL_MAX_FLUSH_DELAY`). **There is no post-load +step**: no compaction, no catalog fold, no VACUUM equivalent, so the layout the +queries run against is the layout ingest produced. `./data-size` reports the tenant's whole durable footprint in the bucket (data objects, commit records, manifests, catalog snapshots), which is where all of @@ -90,32 +109,27 @@ Ravel's state lives. The reference machine's disk is a 500 GB gp2 volume. Ravel holds no data on local disk, so a cold run (server restarted, page cache dropped) fetches what it needs from RustFS, and RustFS reads it from that volume. The stock fetch policy -reads whole objects, so a statement that touches the table reads the whole -dataset from the volume, whatever the statement computes. The dataset is -9.8 GB since 0.21.0, whose log format stores the same rows smaller; it was -11.2 GB before. Measured on v0.16.1, 40 of the 42 statements that return a -number take 42.6 to 46.6 s cold, consistent with reading the dataset at about -250 MB/s each time; the other two (q1 and q7) take about 0.5 s. A 0.19.0 build -measured 42.6 to 43.3 s for the same 40. On v0.21.0, in the same fresh-VM -setup, the cold sum over those 42 statements was 1,252.7 s, against 1,712.1 s -for 0.19.0. - -Ravel holds no data on local disk, so a warm run is served from the read cache -or from RustFS. Since 0.19.0, a server whose store is on loopback derives its -fetch cache at 40% of its memory budget instead of 25%: 12.3 GB on this -machine, above the dataset, so the warm runs are served from the cache. -Before 0.19.0 the derived cache was 7.7 GB, and warm runs re-read the dataset -from RustFS through the page cache. +reads an object whole when it is below the ranged-read break-even (about 19 MB +here) and only the columns it needs above it. The 4 MB objects before 0.23.0 +were all below it, so a statement that touched the table read the whole +dataset from the volume, whatever it computed; the 25 MB objects are above it. On c6a.4xlarge, in this repository's fresh-VM setup, the +cold sum over the 43 statements was 486.6 s on v0.23.0, against 1,291.0 s on +v0.21.0. The dataset is 10.2 GB (9.8 GB on v0.21.0; fewer, larger objects +compress slightly differently). + +A warm run is served from the read cache or from RustFS. A server whose store +is on loopback derives its fetch cache at 40% of its memory budget: 11.4 GB on +this machine, above the dataset, so the warm runs are served from the cache. ### The tuned configuration This directory publishes one result, the stock one. A tuned run belongs in its own top-level entry the way the other tuned entries in this repository do, and -that is left for a follow-up. The tuned configuration is three server flags -passed through `RAVEL_TUNED_ARGS` in `./start`: +that is left for a follow-up. The tuned configuration is server flags passed +through `RAVEL_TUNED_ARGS` in `./start`: ``` -RAVEL_TUNED_ARGS="--logs-fetch-policy latency-first --fetch-concurrency 256 --sql-max-query-bytes 12884901888" ./benchmark.sh +RAVEL_TUNED_ARGS="--logs-fetch-policy latency-first --fetch-concurrency 256 --sql-max-query-bytes " ./benchmark.sh ``` `latency-first` is a named policy, not a tuning constant: it says spend @@ -123,28 +137,42 @@ requests to save wall time, and resolves the byte quantities exactly as `byte-minimal` does, so a logs read takes ranged reads wherever they save bytes. It only pays off once fetch concurrency is raised with it, which is what the second flag does (it sets the object-store GET permits, the SQL partition -count and the PromQL fan-out together). The third flag lifted the per-query -memory pool from the 8.2 GB that versions before 0.21.0 derived to 12 GiB, -which let the widest `GROUP BY` in the set (q33) complete instead of being -refused. Since 0.21.0 the derived pool is 16.5 GB on this machine, and q33 -completes without it. The trade is more object-store requests for less cold -wall-clock. It has not been measured against RustFS; the real-S3 figures below -are the reference for it. +count and the PromQL fan-out together). Raising the permits shrinks the derived +per-query pool, so the third flag holds it at the value a stock start logs on +its `sql_max_query_bytes` line (about 14.2 GB on c6a.4xlarge); without it the +widest `GROUP BY` (q33) is refused. + +Measured on v0.23.0 against RustFS on c6a.4xlarge, the tuned configuration +took the cold sum from 486.6 s to 384.6 s and left the hot sum unchanged +(56.9 s and 57.1 s). It is not safe on smaller machines. In-flight fetches at +256 permits draw on the same process memory budget the queries do, so on +c6a.2xlarge (16 GB) three statements are refused that the stock configuration +answers, and more on 8 and 4 GB. ### Reference: the same binaries on real S3 -Measured by us on the same machine type against an S3 bucket in the instance's -region, credentials from the instance role, with the same driver and the same -true-cold protocol, on the released v0.16.1 binaries and a freshly loaded -tenant. One pass each. Not reproducible by this harness, which does not run -entries on real S3, and therefore not a results file. Cold and hot are the sums -of the first and third run over the statements that returned a number. - -| configuration | load | cold | hot | statements | -|---|---|---|---|---| -| stock, real S3 | 1,191 s | 483 s | 430 s | 42 of 43, q33 refused | -| tuned, real S3 | (same tenant) | 201 s | 99 s | 43 of 43 | -| stock, local RustFS, v0.16.1 | 1,236 s | 1,720 s | 272 s | 42 of 43, q33 refused | +Measured by us on c6a.4xlarge against a fresh S3 bucket in the instance's +region (us-east-1), credentials from the instance role, with the same driver +and the same true-cold protocol, on the released v0.23.0 binaries and this +entry's `./load` and `./start` unchanged except for the credential source +(`--s3-auth instance-role`). One pass. Not reproducible by this harness, which +does not run entries on real S3, and therefore not a results file. Cold is the +sum of the first runs; hot is the sum of the better of the second and third +runs. + +| configuration | load | cold | hot | hot geomean | statements | +|---|---|---|---|---|---| +| stock, real S3, v0.23.0 | 932 s | 186 s | 63 s | 1.01 s | 43 of 43 | +| stock, local RustFS, v0.23.0 | 924 s | 487 s | 57 s | 0.74 s | 43 of 43 | + +Cold is faster on S3 because nothing waits on the 250 MB/s gp2 volume: S3 +serves the ranged reads in parallel at network speed. Hot is slightly slower +because the larger fetch cache share a loopback store gets does not apply to +a remote endpoint: the derived cache was 7.5 GB on this machine, below the +10.2 GB dataset, so part of each warm run goes back to S3. + +The earlier reference, v0.16.1 with ~4 MB objects, measured a 483 s cold and +430 s hot sum on real S3, with q33 refused. ## Notes @@ -156,5 +184,8 @@ of the first and third run over the statements that returned a number. endpoint's window defaults to the last hour. - The heaviest whole-table aggregates can exceed the derived per-query memory pool on a small instance and are reported as errors rather than being run - with a raised limit. q33 reserves about 10.9 GB. Since 0.21.0 it completes on - c6a.4xlarge; on instances with less memory it can still be refused. + with a raised limit. q33 reserves about 10.9 GB. It completes on c6a.4xlarge + and larger; on instances with less memory it can still be refused. +- q28 averages `octet_length("URL")`. ClickHouse's `length()` counts bytes and + DataFusion's counts characters, so `octet_length` is the faithful + translation; q29 still uses `length("Referer")`. diff --git a/ravel/install b/ravel/install index 1003147d2e..65b9d7dd2d 100755 --- a/ravel/install +++ b/ravel/install @@ -42,7 +42,7 @@ if ! command -v aws >/dev/null 2>&1; then fi aws --version -RAVEL_VERSION="${RAVEL_VERSION:-v0.21.0}" +RAVEL_VERSION="${RAVEL_VERSION:-v0.23.0}" RAVEL_REPO="${RAVEL_REPO:-https://github.com/NOFireAI/ravel}" case "$(uname -m)" in diff --git a/ravel/load b/ravel/load index 435482ec5d..6f906b6fb9 100755 --- a/ravel/load +++ b/ravel/load @@ -29,21 +29,44 @@ MAPPING="${RAVEL_MAPPING:-hits.mapping.toml}" "$RAVEL_CLI" --store s3 --s3-auth static \ typed-attr-column set "$RAVEL_TENANT" --from-mapping "$MAPPING" -# Load geometry. One batch becomes one object per involved shard, so -# --batch-rows sets the object size directly: 150,000 rows over 4 shards is -# ~37.5k rows (~4 MB) per object and ~2,600 objects for the 100M-row dataset. -# That is the whole object-sizing mechanism; --target-bytes stays at its -# default of 1 (flush every write) because accumulating instead makes each -# batch's acknowledgement wait for a later batch and the load runs several -# times longer for the same layout. +# Load geometry. Small batches merge into large stored objects: a shard's +# buffer accumulates batches until its estimated uncompressed content reaches +# --target-bytes, and on this dataset a stored object holds about 1/74 of that +# estimate, so 1,850,000,000 stores objects of about 25 MB (about 410 objects +# for the 100M rows). Large objects are what make a cold scan cheap here. +# --max-flush-delay must outlast one object's fill time or the age trigger +# closes objects early, and --pipeline-depth must cover the batches one object +# needs on a shard, since each batch's acknowledgement waits for the flush that +# holds it. --load-memory-bytes caps what the loader holds; the depth and the +# budget are sized to the machine's memory below (measured on 128, 16, 8 and +# 4 GB hosts, NOFireAI/ravel#2627). Every value can be overridden from the +# environment. +mem_kb=$(awk '/^MemTotal:/ {print $2}' /proc/meminfo) +if [ "$mem_kb" -ge 15000000 ]; then + tier_depth=32; tier_budget=6500000000; tier_cursors=16 +elif [ "$mem_kb" -ge 7000000 ]; then + tier_depth=24; tier_budget=3500000000; tier_cursors=16 +elif [ "$mem_kb" -ge 3000000 ]; then + tier_depth=16; tier_budget=1200000000; tier_cursors=2 +else + # Below 3 GB the loader derives its own budget from the host's memory and + # admits one batch at a time when that is below one batch. + tier_depth=8; tier_budget=; tier_cursors=1 +fi +load_budget="${RAVEL_LOAD_MEMORY_BYTES-$tier_budget}" +echo "load: MemTotal ${mem_kb} kB, pipeline depth ${RAVEL_PIPELINE_DEPTH:-$tier_depth}, read cursors ${RAVEL_READ_CURSORS:-$tier_cursors}, memory budget ${load_budget:-derived}" >&2 + "$RAVEL_CLI" --store s3 --s3-auth static load \ --parquet "$PARQUET" \ --tenant "$RAVEL_TENANT" \ --mapping "$MAPPING" \ --shards "$RAVEL_SHARDS" \ - --read-cursors "${RAVEL_READ_CURSORS:-16}" \ - --batch-rows "${RAVEL_BATCH_ROWS:-150000}" \ - --target-bytes 1 + --read-cursors "${RAVEL_READ_CURSORS:-$tier_cursors}" \ + --batch-rows "${RAVEL_BATCH_ROWS:-100000}" \ + --pipeline-depth "${RAVEL_PIPELINE_DEPTH:-$tier_depth}" \ + ${load_budget:+--load-memory-bytes "$load_budget"} \ + --max-flush-delay "${RAVEL_MAX_FLUSH_DELAY:-30s}" \ + --target-bytes "${RAVEL_TARGET_BYTES:-1850000000}" sync diff --git a/ravel/queries.sql b/ravel/queries.sql index 1dedee62a9..c444454bd7 100644 --- a/ravel/queries.sql +++ b/ravel/queries.sql @@ -25,7 +25,7 @@ SELECT * FROM logs WHERE "URL" LIKE '%google%' ORDER BY ts LIMIT 10; SELECT "SearchPhrase" FROM logs WHERE "SearchPhrase" <> '' ORDER BY ts LIMIT 10; SELECT "SearchPhrase" FROM logs WHERE "SearchPhrase" <> '' ORDER BY "SearchPhrase" LIMIT 10; SELECT "SearchPhrase" FROM logs WHERE "SearchPhrase" <> '' ORDER BY ts, "SearchPhrase" LIMIT 10; -SELECT "CounterID", AVG(length("URL")) AS l, COUNT(*) AS c FROM logs WHERE "URL" <> '' GROUP BY "CounterID" HAVING COUNT(*) > 100000 ORDER BY l DESC LIMIT 25; +SELECT "CounterID", AVG(octet_length("URL")) AS l, COUNT(*) AS c FROM logs WHERE "URL" <> '' GROUP BY "CounterID" HAVING COUNT(*) > 100000 ORDER BY l DESC LIMIT 25; SELECT regexp_replace("Referer", '^https?://(?:www\.)?([^/]+)/.*$', '\1') AS k, AVG(length("Referer")) AS l, COUNT(*) AS c, MIN("Referer") FROM logs WHERE "Referer" <> '' GROUP BY k HAVING COUNT(*) > 100000 ORDER BY l DESC LIMIT 25; SELECT SUM("ResolutionWidth"), SUM("ResolutionWidth" + 1), SUM("ResolutionWidth" + 2), SUM("ResolutionWidth" + 3), SUM("ResolutionWidth" + 4), SUM("ResolutionWidth" + 5), SUM("ResolutionWidth" + 6), SUM("ResolutionWidth" + 7), SUM("ResolutionWidth" + 8), SUM("ResolutionWidth" + 9), SUM("ResolutionWidth" + 10), SUM("ResolutionWidth" + 11), SUM("ResolutionWidth" + 12), SUM("ResolutionWidth" + 13), SUM("ResolutionWidth" + 14), SUM("ResolutionWidth" + 15), SUM("ResolutionWidth" + 16), SUM("ResolutionWidth" + 17), SUM("ResolutionWidth" + 18), SUM("ResolutionWidth" + 19), SUM("ResolutionWidth" + 20), SUM("ResolutionWidth" + 21), SUM("ResolutionWidth" + 22), SUM("ResolutionWidth" + 23), SUM("ResolutionWidth" + 24), SUM("ResolutionWidth" + 25), SUM("ResolutionWidth" + 26), SUM("ResolutionWidth" + 27), SUM("ResolutionWidth" + 28), SUM("ResolutionWidth" + 29), SUM("ResolutionWidth" + 30), SUM("ResolutionWidth" + 31), SUM("ResolutionWidth" + 32), SUM("ResolutionWidth" + 33), SUM("ResolutionWidth" + 34), SUM("ResolutionWidth" + 35), SUM("ResolutionWidth" + 36), SUM("ResolutionWidth" + 37), SUM("ResolutionWidth" + 38), SUM("ResolutionWidth" + 39), SUM("ResolutionWidth" + 40), SUM("ResolutionWidth" + 41), SUM("ResolutionWidth" + 42), SUM("ResolutionWidth" + 43), SUM("ResolutionWidth" + 44), SUM("ResolutionWidth" + 45), SUM("ResolutionWidth" + 46), SUM("ResolutionWidth" + 47), SUM("ResolutionWidth" + 48), SUM("ResolutionWidth" + 49), SUM("ResolutionWidth" + 50), SUM("ResolutionWidth" + 51), SUM("ResolutionWidth" + 52), SUM("ResolutionWidth" + 53), SUM("ResolutionWidth" + 54), SUM("ResolutionWidth" + 55), SUM("ResolutionWidth" + 56), SUM("ResolutionWidth" + 57), SUM("ResolutionWidth" + 58), SUM("ResolutionWidth" + 59), SUM("ResolutionWidth" + 60), SUM("ResolutionWidth" + 61), SUM("ResolutionWidth" + 62), SUM("ResolutionWidth" + 63), SUM("ResolutionWidth" + 64), SUM("ResolutionWidth" + 65), SUM("ResolutionWidth" + 66), SUM("ResolutionWidth" + 67), SUM("ResolutionWidth" + 68), SUM("ResolutionWidth" + 69), SUM("ResolutionWidth" + 70), SUM("ResolutionWidth" + 71), SUM("ResolutionWidth" + 72), SUM("ResolutionWidth" + 73), SUM("ResolutionWidth" + 74), SUM("ResolutionWidth" + 75), SUM("ResolutionWidth" + 76), SUM("ResolutionWidth" + 77), SUM("ResolutionWidth" + 78), SUM("ResolutionWidth" + 79), SUM("ResolutionWidth" + 80), SUM("ResolutionWidth" + 81), SUM("ResolutionWidth" + 82), SUM("ResolutionWidth" + 83), SUM("ResolutionWidth" + 84), SUM("ResolutionWidth" + 85), SUM("ResolutionWidth" + 86), SUM("ResolutionWidth" + 87), SUM("ResolutionWidth" + 88), SUM("ResolutionWidth" + 89) FROM logs; SELECT "SearchEngineID", "ClientIP", COUNT(*) AS c, SUM("IsRefresh"), AVG("ResolutionWidth") FROM logs WHERE "SearchPhrase" <> '' GROUP BY "SearchEngineID", "ClientIP" ORDER BY c DESC LIMIT 10; diff --git a/ravel/results/20261012/c6a.2xlarge.json b/ravel/results/20261012/c6a.2xlarge.json new file mode 100644 index 0000000000..ff2343aaab --- /dev/null +++ b/ravel/results/20261012/c6a.2xlarge.json @@ -0,0 +1,60 @@ +{ + "system": "Ravel", + "date": "2026-10-12", + "machine": "c6a.2xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","S3"], + "load_time": 1076, + "data_size": 10206509683, + "concurrent_qps": 0.27, + "concurrent_error_ratio": 0.426, + "result": [ + [0.107, 0.046, 0.046], + [7.201, 0.717, 0.715], + [10.113, 0.996, 1.009], + [11.372, 1.09, 1.088], + [11.515, 1.801, 1.786], + [10.644, 2.225, 2.211], + [0.092, 0.048, 0.046], + [7.193, 0.715, 0.715], + [14.3, 2.351, 2.334], + [16.555, 2.687, 2.704], + [17.283, 1.59, 1.591], + [17.533, 1.785, 1.787], + [10.634, 2.012, 2.034], + [16.42, 3.146, 3.052], + [10.951, 2.293, 2.315], + [11.554, 1.915, 1.902], + [16.236, 3.832, 3.794], + [16.036, 3.654, 3.6], + [16.126, 4.631, 4.627], + [9.531, 0.684, 0.696], + [16.706, 2.651, 2.666], + [21.854, 3.596, 3.563], + [23.745, 11.355, 8.669], + [17.371, 3.173, 3.209], + [10.487, 1.678, 1.669], + [10.484, 1.635, 1.613], + [10.491, 1.677, 1.7], + [16.996, 3.301, 3.267], + [17.366, 9.067, 9.193], + [9.865, 0.857, 0.843], + [18.361, 3.094, 3.032], + [22.265, 3.691, 3.455], + [null, null, null], + [17.502, 5.71, 5.744], + [17.457, 5.752, 5.774], + [8.714, 1.799, 1.751], + [0.423, 0.133, 0.124], + [0.44, 0.1, 0.1], + [0.377, 0.106, 0.106], + [1.792, 0.221, 0.21], + [1.472, 0.09, 0.092], + [0.545, 0.091, 0.092], + [0.326, 0.081, 0.079] +] + } + \ No newline at end of file diff --git a/ravel/results/20261012/c6a.4xlarge.json b/ravel/results/20261012/c6a.4xlarge.json new file mode 100644 index 0000000000..a691a57121 --- /dev/null +++ b/ravel/results/20261012/c6a.4xlarge.json @@ -0,0 +1,60 @@ +{ + "system": "Ravel", + "date": "2026-10-12", + "machine": "c6a.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","S3"], + "load_time": 931, + "data_size": 10206526470, + "concurrent_qps": 0.623, + "concurrent_error_ratio": 0.074, + "result": [ + [0.109, 0.047, 0.044], + [7.349, 0.399, 0.398], + [10.231, 0.554, 0.545], + [11.451, 0.589, 0.592], + [11.481, 1.088, 1.112], + [10.703, 1.4, 1.246], + [0.086, 0.047, 0.047], + [7.371, 0.401, 0.39], + [14.294, 1.352, 1.327], + [16.532, 1.555, 1.537], + [17.316, 0.846, 0.848], + [17.593, 0.94, 0.934], + [10.723, 1.135, 1.117], + [16.233, 1.736, 1.719], + [11.041, 1.292, 1.319], + [11.538, 1.209, 1.162], + [16.026, 2.404, 2.377], + [15.897, 2.274, 2.18], + [16.15, 2.834, 2.899], + [9.482, 0.463, 0.449], + [16.72, 1.498, 1.513], + [21.904, 2.067, 2.104], + [23.744, 3.985, 3.886], + [17.435, 2.067, 2.004], + [10.624, 0.948, 0.937], + [10.616, 0.886, 0.886], + [10.622, 0.899, 0.905], + [17.043, 1.945, 1.991], + [17.301, 4.956, 5.061], + [9.981, 0.479, 0.47], + [18.444, 1.69, 1.667], + [22.291, 1.916, 1.856], + [20.774, 3.713, 3.577], + [17.469, 4.169, 4.251], + [17.399, 4.175, 4.154], + [8.787, 1.101, 1.088], + [0.448, 0.115, 0.108], + [0.443, 0.087, 0.084], + [0.393, 0.094, 0.094], + [1.865, 0.205, 0.196], + [1.478, 0.081, 0.074], + [0.536, 0.082, 0.078], + [0.324, 0.07, 0.073] +] + } + \ No newline at end of file diff --git a/ravel/results/20261012/c6a.large.json b/ravel/results/20261012/c6a.large.json new file mode 100644 index 0000000000..e8ded53b18 --- /dev/null +++ b/ravel/results/20261012/c6a.large.json @@ -0,0 +1,60 @@ +{ + "system": "Ravel", + "date": "2026-10-12", + "machine": "c6a.large", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","S3"], + "load_time": 3917, + "data_size": 10322004998, + "concurrent_qps": 0.145, + "concurrent_error_ratio": 0.816, + "result": [ + [0.137, 0.073, 0.073], + [16.21, 16.875, 16.675], + [18.798, 19.427, 19.235], + [19.838, 20.046, 19.828], + [null, null, null], + [null, null, null], + [0.124, 0.082, 0.078], + [16.481, 16.76, 16.572], + [null, null, null], + [null, null, 24.75], + [23.576, 23.854, 23.706], + [23.58, 24.124, 23.761], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [28.497, 27.665, 27.351], + [24.347, 24.488, 24.408], + [27.736, 28.318, 27.934], + [50.292, 56.679, 55.741], + [40.509, 38.579, 41.569], + [19.369, 21.167, 19.671], + [19.869, 19.548, 19.638], + [19.642, 19.721, 19.334], + [25.044, 24.625, 24.71], + [null, null, null], + [18.977, 19.463, 19.066], + [24.328, 24.848, 24.653], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [18.515, 17.667, 17.723], + [0.572, 0.289, 0.291], + [0.482, 0.198, 0.2], + [0.532, 0.222, 0.224], + [0.964, 0.491, 0.481], + [0.582, 0.187, 0.171], + [0.445, 0.176, 0.177], + [0.394, 0.138, 0.139] +] + } + \ No newline at end of file diff --git a/ravel/results/20261012/c6a.metal.json b/ravel/results/20261012/c6a.metal.json new file mode 100644 index 0000000000..823684324a --- /dev/null +++ b/ravel/results/20261012/c6a.metal.json @@ -0,0 +1,60 @@ +{ + "system": "Ravel", + "date": "2026-10-12", + "machine": "c6a.metal", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","S3"], + "load_time": 888, + "data_size": 10206813362, + "concurrent_qps": 4.897, + "concurrent_error_ratio": 0, + "result": [ + [0.104, 0.05, 0.047], + [6.738, 0.144, 0.129], + [9.199, 0.149, 0.143], + [10.736, 0.132, 0.133], + [10.853, 0.318, 0.31], + [9.862, 0.373, 0.368], + [0.089, 0.059, 0.053], + [6.86, 0.239, 0.219], + [13.341, 0.495, 0.455], + [15.813, 0.582, 0.61], + [16.822, 0.433, 0.416], + [17.135, 0.457, 0.449], + [9.896, 0.412, 0.404], + [15.266, 0.659, 0.663], + [10.106, 0.478, 0.464], + [10.923, 0.369, 0.362], + [15.19, 0.688, 0.593], + [15, 0.562, 0.558], + [15.347, 1.029, 0.999], + [8.63, 0.218, 0.222], + [16.085, 0.297, 0.26], + [21.298, 0.559, 0.498], + [23.211, 0.819, 0.84], + [16.731, 0.733, 0.733], + [9.72, 0.232, 0.206], + [9.709, 0.235, 0.229], + [9.72, 0.221, 0.209], + [16.356, 0.488, 0.441], + [16.693, 0.955, 0.907], + [9.086, 0.15, 0.147], + [17.961, 0.489, 0.453], + [21.85, 0.524, 0.538], + [20.619, 1.435, 1.414], + [16.415, 1.062, 1.054], + [16.413, 1.05, 1.015], + [8.302, 0.372, 0.357], + [0.419, 0.232, 0.217], + [0.405, 0.209, 0.207], + [0.877, 0.225, 0.211], + [1.943, 0.391, 0.383], + [1.554, 0.197, 0.218], + [0.606, 0.209, 0.21], + [0.392, 0.2, 0.199] +] + } + \ No newline at end of file diff --git a/ravel/results/20261012/c6a.xlarge.json b/ravel/results/20261012/c6a.xlarge.json new file mode 100644 index 0000000000..aeee1ce596 --- /dev/null +++ b/ravel/results/20261012/c6a.xlarge.json @@ -0,0 +1,60 @@ +{ + "system": "Ravel", + "date": "2026-10-12", + "machine": "c6a.xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","S3"], + "load_time": 1962, + "data_size": 10201356558, + "concurrent_qps": 0.122, + "concurrent_error_ratio": 0.708, + "result": [ + [0.112, 0.049, 0.049], + [7.937, 1.355, 1.35], + [10.859, 1.924, 1.925], + [11.902, 3.385, 3.364], + [12.288, 8.4, 7.38], + [11.473, 4.246, 4.213], + [0.095, 0.053, 0.053], + [7.937, 1.355, 1.359], + [14.999, 10.814, 8.553], + [17.14, 11.706, 9.952], + [17.726, 10.747, 9.847], + [17.922, 11.105, 9.925], + [11.35, 3.866, 3.876], + [17.404, 12.588, 11.18], + [11.644, 5.348, 5.248], + [12.298, 8.991, 7.867], + [17.568, null, null], + [null, null, null], + [null, null, null], + [9.895, 1.208, 1.175], + [17.172, 11.453, 10.192], + [22.276, 16.408, 14.901], + [24.459, 24.735, 24.804], + [17.756, 14.426, 17.476], + [11.147, 3.277, 3.234], + [11.116, 3.17, 3.171], + [11.134, 3.227, 3.211], + [17.514, 12.255, 10.877], + [20.434, 19.777, 19.793], + [10.638, 1.593, 1.598], + [18.693, 13.391, 12.148], + [22.505, 16.52, 14.892], + [null, null, null], + [null, null, null], + [null, null, null], + [9.544, 4.591, 4.224], + [0.547, 0.191, 0.189], + [0.539, 0.147, 0.148], + [0.564, 0.157, 0.155], + [1.889, 0.319, 0.333], + [1.467, 0.129, 0.131], + [0.748, 0.127, 0.129], + [0.421, 0.103, 0.099] +] + } + \ No newline at end of file diff --git a/ravel/results/20261012/c7a.metal-48xl.json b/ravel/results/20261012/c7a.metal-48xl.json new file mode 100644 index 0000000000..06067edef0 --- /dev/null +++ b/ravel/results/20261012/c7a.metal-48xl.json @@ -0,0 +1,60 @@ +{ + "system": "Ravel", + "date": "2026-10-12", + "machine": "c7a.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","S3"], + "load_time": 923, + "data_size": 10206667280, + "concurrent_qps": 6.73, + "concurrent_error_ratio": 0, + "result": [ + [0.093, 0.041, 0.039], + [6.445, 0.119, 0.113], + [9.099, 0.117, 0.124], + [10.539, 0.126, 0.132], + [10.65, 0.333, 0.324], + [9.598, 0.34, 0.314], + [0.098, 0.054, 0.051], + [6.568, 0.213, 0.206], + [13.267, 0.502, 0.485], + [15.74, 0.56, 0.493], + [16.743, 0.374, 0.401], + [17.072, 0.4, 0.419], + [9.62, 0.351, 0.357], + [15.165, 0.635, 0.58], + [9.981, 0.41, 0.403], + [10.72, 0.375, 0.376], + [15.085, 0.605, 0.527], + [14.92, 0.499, 0.463], + [15.203, 1.023, 0.935], + [8.467, 0.194, 0.195], + [15.996, 0.25, 0.224], + [21.291, 0.426, 0.375], + [23.223, 0.612, 0.544], + [16.765, 0.706, 0.638], + [9.456, 0.216, 0.185], + [9.437, 0.206, 0.201], + [9.453, 0.195, 0.192], + [16.401, 0.415, 0.357], + [16.41, 0.895, 0.855], + [8.85, 0.151, 0.134], + [17.913, 0.453, 0.395], + [21.823, 0.464, 0.482], + [20.478, 1.265, 1.231], + [16.332, 0.803, 0.767], + [16.279, 0.758, 0.714], + [8.061, 0.376, 0.343], + [0.46, 0.215, 0.204], + [0.434, 0.188, 0.198], + [0.484, 0.191, 0.201], + [1.935, 0.374, 0.362], + [1.575, 0.197, 0.198], + [0.629, 0.193, 0.188], + [0.442, 0.193, 0.19] +] + } + \ No newline at end of file diff --git a/ravel/results/20261012/c8g.4xlarge.json b/ravel/results/20261012/c8g.4xlarge.json new file mode 100644 index 0000000000..9de4ea8c6c --- /dev/null +++ b/ravel/results/20261012/c8g.4xlarge.json @@ -0,0 +1,60 @@ +{ + "system": "Ravel", + "date": "2026-10-12", + "machine": "c8g.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","S3"], + "load_time": 784, + "data_size": 10206374407, + "concurrent_qps": 0.977, + "concurrent_error_ratio": 0.074, + "result": [ + [0.064, 0.036, 0.036], + [7.337, 0.224, 0.223], + [10.188, 0.297, 0.298], + [11.431, 0.322, 0.324], + [11.463, 0.538, 0.6], + [10.693, 0.761, 0.909], + [0.066, 0.038, 0.037], + [7.347, 0.226, 0.225], + [14.226, 0.816, 0.8], + [16.352, 0.866, 0.864], + [17.247, 0.477, 0.469], + [17.478, 0.514, 0.517], + [10.706, 0.776, 0.716], + [16.007, 1.013, 1.006], + [10.985, 0.781, 0.746], + [11.506, 0.685, 0.568], + [15.909, 1.182, 1.174], + [15.821, 1.317, 1.201], + [15.983, 1.516, 1.485], + [9.476, 0.303, 0.283], + [16.803, 0.898, 0.894], + [21.881, 1.266, 1.234], + [23.653, 2.231, 2.288], + [17.282, 1.277, 1.269], + [10.652, 0.564, 0.571], + [10.642, 0.567, 0.526], + [10.66, 0.582, 0.582], + [17.044, 1.119, 1.105], + [17.134, 3.128, 3.106], + [9.997, 0.279, 0.278], + [18.582, 0.953, 0.934], + [22.32, 1.057, 1.072], + [20.735, 1.55, 1.522], + [17.105, 1.958, 1.963], + [17.104, 1.916, 2.073], + [8.8, 0.612, 0.636], + [0.275, 0.075, 0.078], + [0.349, 0.065, 0.064], + [0.288, 0.07, 0.074], + [1.688, 0.133, 0.134], + [1.434, 0.064, 0.059], + [0.497, 0.061, 0.062], + [0.206, 0.057, 0.055] +] + } + \ No newline at end of file diff --git a/ravel/results/20261012/c8g.metal-48xl.json b/ravel/results/20261012/c8g.metal-48xl.json new file mode 100644 index 0000000000..d2d63b97c8 --- /dev/null +++ b/ravel/results/20261012/c8g.metal-48xl.json @@ -0,0 +1,60 @@ +{ + "system": "Ravel", + "date": "2026-10-12", + "machine": "c8g.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","S3"], + "load_time": 776, + "data_size": 10205943480, + "concurrent_qps": 6.853, + "concurrent_error_ratio": 0, + "result": [ + [0.059, 0.029, 0.03], + [6.79, 0.102, 0.091], + [9.283, 0.109, 0.107], + [10.869, 0.108, 0.102], + [10.978, 0.311, 0.369], + [9.886, 0.329, 0.298], + [0.069, 0.04, 0.04], + [6.896, 0.205, 0.223], + [13.496, 0.492, 0.477], + [15.678, 0.417, 0.424], + [16.878, 0.366, 0.41], + [17.197, 0.375, 0.363], + [9.922, 0.348, 0.355], + [15.253, 0.507, 0.512], + [10.151, 0.356, 0.364], + [11.01, 0.368, 0.373], + [15.126, 0.574, 0.571], + [15.053, 0.51, 0.473], + [15.204, 0.969, 1.031], + [8.851, 0.182, 0.17], + [16.239, 0.313, 0.259], + [21.426, 0.456, 0.431], + [23.211, 0.655, 0.615], + [16.795, 0.633, 0.575], + [9.783, 0.201, 0.171], + [9.773, 0.182, 0.181], + [9.783, 0.182, 0.163], + [16.551, 0.413, 0.407], + [16.514, 0.854, 0.793], + [9.143, 0.122, 0.125], + [17.857, 0.383, 0.373], + [21.756, 0.425, 0.394], + [20.059, 1.146, 1.169], + [16.501, 0.786, 0.752], + [16.446, 0.781, 0.777], + [8.345, 0.334, 0.336], + [0.423, 0.176, 0.181], + [0.376, 0.167, 0.163], + [0.405, 0.173, 0.178], + [1.979, 0.322, 0.33], + [1.647, 0.173, 0.172], + [0.649, 0.169, 0.179], + [0.308, 0.162, 0.159] +] + } + \ No newline at end of file diff --git a/ravel/results/20261012/t3a.small.json b/ravel/results/20261012/t3a.small.json new file mode 100644 index 0000000000..e053bc688c --- /dev/null +++ b/ravel/results/20261012/t3a.small.json @@ -0,0 +1,60 @@ +{ + "system": "Ravel", + "date": "2026-10-12", + "machine": "t3a.small", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","S3"], + "load_time": 7978, + "data_size": 10315779145, + "concurrent_qps": 0.102, + "concurrent_error_ratio": 0.904, + "result": [ + [0.23, 0.173, 0.174], + [18.857, 22.527, 22.405], + [21.739, 22.906, 24.243], + [22.558, 24.556, 23.209], + [null, null, null], + [null, null, null], + [0.249, 0.176, 0.18], + [18.971, 19.24, 19.404], + [null, null, null], + [null, null, null], + [28.027, 28.715, 26.721], + [27.519, 29.47, 28.713], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [30.49, 30.718, 30.692], + [33.535, 37.079, 32.312], + [47.413, 44.963, 45.051], + [92.644, 105.181, 106.733], + [69.444, 67.006, 65.084], + [22.577, 26.139, 24.16], + [22.806, 22.93, 22.947], + [22.82, 23.145, 22.678], + [37.225, 37.482, 38.45], + [null, null, null], + [21.351, 37.919, 260.699], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [null, null, null], + [0.847, 0.526, 0.522], + [0.679, 0.367, 0.363], + [1.856, 0.401, 0.443], + [4.089, 0.87, 0.856], + [1.721, 0.308, 0.312], + [2.694, 0.308, 0.307], + [2.069, 0.261, 0.252] +] + } + \ No newline at end of file diff --git a/ravel/template.json b/ravel/template.json index ac8d3f7d09..e53cd4aae3 100644 --- a/ravel/template.json +++ b/ravel/template.json @@ -6,7 +6,6 @@ "tags": [ "Rust", "column-oriented", - "stateless", "S3" ] }