Skip to content

Instantly share code, notes, and snippets.

@fruch
Created May 12, 2026 10:34
Show Gist options
  • Select an option

  • Save fruch/da3cc772e3bccc5e82c4f60f4c52e156 to your computer and use it in GitHub Desktop.

Select an option

Save fruch/da3cc772e3bccc5e82c4f60f4c52e156 to your computer and use it in GitHub Desktop.
Performance Regression Report — i8g Tablets (Official Releases)

Prompt: Generate Performance Regression Report

Copy-paste the following prompt to an AI assistant with access to the Argus CLI to generate a fresh report.


Markdown Report Prompt

Using the argus CLI at `cli/bin/argus`, generate a performance regression report in markdown.

**Parameters** (adjust as needed):
- Run ID (any recent run from the test): 24b36865-65ba-4fdc-8697-879029a49428
- Argus URL: https://argus.scylladb.com
- Time window: last 3 months (use `--after $(date -d '90 days ago' +%s)`)
- Output file: perf-report-i8g-tablets-releases.md
- Filter: Official releases only (version matches `^\d{4}\.\d+\.\d+$`, no ~dev/~rc)

**Data collection:**
1. Resolve test-id: `./bin/argus run get --run-id <RUN_ID> --url https://argus.scylladb.com`
2. List runs: `./bin/argus run list --test-id <TEST_ID> --after <TIMESTAMP> --limit 200 --full --url https://argus.scylladb.com`
3. Filter to official releases only (scylla_version matches `^\d{4}\.\d+\.\d+$`)
4. Fetch results per run: `./bin/argus run results --run-id <RUN_ID> --url https://argus.scylladb.com`
5. Group by workload (read_disk_only, read, write, mixed) and step. Average across runs of same version.

**Report structure:**

  # Performance Regression Report — i8g Tablets
  (test name, period, run count)

  | Version | Date | Passed | Failed | Test Error |
  |---------|------|--------|--------|------------|

  ## Table of Contents
  (links to each workload + Key Observations)

  ## <Workload Name>

  | Step | Samples | P90 | P99 | Throughput | Best Release |
  |------|---------|-----|-----|------------|--------------|

  ### P99 Latency by Step (ASCII bar chart)

  110K  ▓▓▓ 1.66  ░░░ 1.70  ███ 1.65  ▒▒▒ 1.77
  220K  ▓▓▓ 1.99  ░░░ 2.02  ███ 2.01  ▒▒▒▒ 2.80
  330K  ▓▓▓ 2.55  ░░░ 2.58  ███ 2.59  ▒▒▒▒▒▒▒▒▒ 14.79
  400K  ▓▓ 4.93   ░░░░░░░░░░░░░░░░░░░░ 292.29  ███████ 92.14  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ 797.44

  ▓ 2026.1.1  ░ 2025.4.6  █ 2025.4.7  ▒ 2026.1.2

  ### Unthrottled Throughput

  2026.1.1  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 546,380
  2025.4.6  ░░░░░░░░░░░░░░░░░░░  515,489
  2025.4.7  ████████████████████  543,609
  2026.1.2  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  488,160

  (repeat per workload)

  ## Key Observations
  (numbered findings)

**Chart rules:**
- Use log-scale bar widths when max/min > 50× (mark with "log scale" note)
- Always show exact value at end of each bar
- Use consistent block chars per release: ▓ ░ █ ▒
- Wrap charts in ``` code blocks for monospace alignment

**DO NOT include:**
- Mermaid or image-based charts
- Separate per-step charts
- Run-over-run charts
- "Achieved Throughput by Step" aggregate charts

Save to `perf-report-i8g-tablets-releases.md`.

Quick one-liner (if CLI is already built)

# Adjust RUN_ID or TEST_ID and period as needed
TEST_ID="d6ebf1a5-135f-43fc-a7ba-0716b60dfa94"
AFTER=$(date -d '90 days ago' +%s)

# List runs with version info
./bin/argus run list --test-id $TEST_ID --after $AFTER --limit 200 --full --url https://argus.scylladb.com | \
  python3 -c "
import sys, json, re
for r in json.load(sys.stdin):
    v = r.get('scylla_version','')
    if re.match(r'^\d{4}\.\d+\.\d+$', v):
        print(f'{r[\"id\"]}  {v}  {r[\"status\"]}')
"

# Then feed run IDs into: ./bin/argus run results --run-id <ID> --url https://argus.scylladb.com

HTML Report Prompt (Chart.js)

Using the argus CLI at `cli/bin/argus`, generate a performance regression report as a self-contained HTML file with Chart.js graphs.

**Parameters** (adjust as needed):
- Run ID (any recent run from the test): 24b36865-65ba-4fdc-8697-879029a49428
- Argus URL: https://argus.scylladb.com
- Time window: last 3 months (use `--after $(date -d '90 days ago' +%s)`)
- Output file: perf-report-i8g-tablets-releases.html
- Filter: Official releases only (version matches pattern `^\d{4}\.\d+\.\d+$`, excludes ~dev and ~rc)

**Data collection steps** are identical to the Markdown prompt above (steps 1–5).

**HTML report structure:**
- Single self-contained `.html` file, no build step
- Load Chart.js and chartjs-plugin-datalabels from CDN:
  ```html
  <script src="https://cdn.jsdelivr.net/npm/chart.js@4"></script>
  <script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2"></script>
  • Dark theme (background: #1a1a2e, surface: #16213e, text: #e0e0e0)
  • Header with test name, period, run counts
  • Version summary table
  • Table of Contents with anchor links to each workload section
  • Per-workload section with:
    • HTML summary table with "Best Release" column (green highlight)
    • P99 latency grouped bar chart: x-axis = step values, one dataset per release version
    • Unthrottled throughput bar chart: x-axis = version labels, one dataset per release (use null for other positions so each version gets its own color)
    • Both chart types show data labels on top of each bar (formatted: ≥1M → "1.5M", ≥1K → "89.8K", else decimal)
  • Key Observations section

Consistent per-release colors across ALL charts:

  • 2026.1.1 → #4CAF50 (green)
  • 2025.4.6 → #2196F3 (blue)
  • 2025.4.7 → #FF9800 (orange)
  • 2026.1.2 → #F44336 (red) Adjust version list as needed but keep one consistent color per release.

Auto-logarithmic scale: When the max/min ratio of values in a chart exceeds 50×, use logarithmic y-axis. Append " (log scale)" to the y-axis title when log is active. Otherwise use linear scale.

DO NOT include:

  • Separate per-step charts (one chart per step) — combine all into one graph
  • "Achieved Throughput by Step" aggregate charts
  • Run-over-run charts
  • "Unthrottled P99 by Release" charts

Save to perf-report-i8g-tablets-releases.html.


---

## For a different test/view

Replace the run-id with any run from the target test. The script will auto-resolve the test-id and discover all workload types from the result tables.

To find run IDs for other tests in the view `scylla-enterprise-performance-regression-tests-i8g-tablets`, inspect network requests on https://argus.scylladb.com/view/scylla-enterprise-performance-regression-tests-i8g-tablets — the API returns test UUIDs you can use with `--test-id`.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Performance Regression Report — i8g Tablets (Official Releases)</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2"></script>
<style>
:root { --bg: #1a1a2e; --surface: #16213e; --text: #e0e0e0; --muted: #999; }
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--bg); color: var(--text); margin: 0; padding: 2rem; line-height: 1.6; }
h1 { color: #fff; margin-bottom: 0.25rem; }
h2 { color: #90caf9; border-bottom: 1px solid #333; padding-bottom: 0.5rem; margin-top: 3rem; }
h3 { color: #ce93d8; }
.meta { color: var(--muted); margin-bottom: 2rem; }
table { border-collapse: collapse; width: 100%; margin: 1rem 0 2rem; }
th, td { border: 1px solid #333; padding: 0.5rem 0.75rem; text-align: right; }
th { background: var(--surface); color: #90caf9; }
td:first-child, th:first-child { text-align: left; }
.best { color: #4caf50; font-weight: bold; }
.chart-container { background: var(--surface); border-radius: 8px; padding: 1rem; margin: 1.5rem 0; max-width: 900px; }
canvas { max-height: 400px; }
#toc { background: var(--surface); border-radius: 8px; padding: 1rem 1.5rem; margin: 1.5rem 0; display: inline-block; }
#toc a { color: #90caf9; text-decoration: none; }
#toc a:hover { text-decoration: underline; }
#toc ul { list-style: none; padding-left: 0; margin: 0.5rem 0; }
#toc li { margin: 0.4rem 0; }
.legend { display: flex; gap: 1.5rem; flex-wrap: wrap; margin: 0.5rem 0 1rem; }
.legend-item { display: flex; align-items: center; gap: 0.4rem; font-size: 0.9rem; }
.legend-swatch { width: 14px; height: 14px; border-radius: 3px; }
.observations { background: var(--surface); border-radius: 8px; padding: 1.5rem; margin-top: 2rem; }
.observations li { margin: 0.5rem 0; }
</style>
</head>
<body>
<h1>Performance Regression Report — i8g Tablets</h1>
<p class="meta">
<strong>Test:</strong> scylla-enterprise-perf-regression-predefined-throughput-steps-i8g-tablets<br>
<strong>Period:</strong> February 12 – May 12, 2026 (3 months)<br>
<strong>Runs analyzed:</strong> 16 official release runs
</p>
<table>
<tr><th>Version</th><th>Date</th><th>Passed</th><th>Failed</th><th>Test Error</th></tr>
<tr><td>2026.1.1</td><td>2026-04-05</td><td>3</td><td>1</td><td>0</td></tr>
<tr><td>2025.4.6</td><td>2026-04-10</td><td>2</td><td>2</td><td>0</td></tr>
<tr><td>2025.4.7</td><td>2026-04-17</td><td>1</td><td>2</td><td>1</td></tr>
<tr><td>2026.1.2</td><td>2026-05-04</td><td>0</td><td>4</td><td>0</td></tr>
</table>
<nav id="toc">
<strong>Table of Contents</strong>
<ul>
<li><a href="#read-disk-only">Read (Disk-Only)</a></li>
<li><a href="#read-cache">Read (Cache)</a></li>
<li><a href="#write">Write</a></li>
<li><a href="#mixed">Mixed 50/50 R/W</a></li>
<li><a href="#observations">Key Observations</a></li>
</ul>
</nav>
<!-- ============ Read (Disk-Only) ============ -->
<h2 id="read-disk-only">Read (Disk-Only)</h2>
<table>
<tr><th>Step</th><th>Samples</th><th>P90 Read (ms)</th><th>P99 Read (ms)</th><th>Throughput (op/s)</th><th>Best Release</th></tr>
<tr><td>110K</td><td>4</td><td>1.06</td><td>1.69</td><td>109,963</td><td class="best">2025.4.7 (1.65 ms)</td></tr>
<tr><td>220K</td><td>4</td><td>1.30</td><td>2.21</td><td>219,928</td><td class="best">2026.1.1 (1.99 ms)</td></tr>
<tr><td>330K</td><td>4</td><td>1.62</td><td>5.63</td><td>329,829</td><td class="best">2026.1.1 (2.55 ms)</td></tr>
<tr><td>400K</td><td>4</td><td>2.14</td><td>296.70</td><td>399,854</td><td class="best">2026.1.1 (4.93 ms)</td></tr>
<tr><td>unthrottled</td><td>4</td><td>3.80</td><td>49.33</td><td>523,409</td><td class="best">2026.1.1 (40.14 ms)</td></tr>
</table>
<h3>P99 Read Latency by Step</h3>
<div class="chart-container"><canvas id="chart-read-disk-p99"></canvas></div>
<h3>Unthrottled Throughput</h3>
<div class="chart-container"><canvas id="chart-read-disk-thr"></canvas></div>
<!-- ============ Read (Cache) ============ -->
<h2 id="read-cache">Read (Cache)</h2>
<table>
<tr><th>Step</th><th>Samples</th><th>P90 Read (ms)</th><th>P99 Read (ms)</th><th>Throughput (op/s)</th><th>Best Release</th></tr>
<tr><td>500K</td><td>4</td><td>0.40</td><td>0.70</td><td>499,794</td><td class="best">2026.1.1 (0.56 ms)</td></tr>
<tr><td>900K</td><td>4</td><td>0.62</td><td>21.35</td><td>899,594</td><td class="best">2026.1.2 (2.58 ms)</td></tr>
<tr><td>1200K</td><td>4</td><td>0.89</td><td>216.04</td><td>1,199,538</td><td class="best">2026.1.2 (4.29 ms)</td></tr>
<tr><td>1500K</td><td>4</td><td>1.44</td><td>11.14</td><td>1,499,691</td><td class="best">2025.4.6 (6.50 ms)</td></tr>
<tr><td>unthrottled</td><td>4</td><td>1.53</td><td>13.40</td><td>1,617,045</td><td class="best">2026.1.1 (2.68 ms)</td></tr>
</table>
<h3>P99 Read Latency by Step</h3>
<div class="chart-container"><canvas id="chart-read-cache-p99"></canvas></div>
<h3>Unthrottled Throughput</h3>
<div class="chart-container"><canvas id="chart-read-cache-thr"></canvas></div>
<!-- ============ Write ============ -->
<h2 id="write">Write</h2>
<table>
<tr><th>Step</th><th>Samples</th><th>P90 Write (ms)</th><th>P99 Write (ms)</th><th>Throughput (op/s)</th><th>Best Release</th></tr>
<tr><td>350K</td><td>4</td><td>1.63</td><td>2.27</td><td>349,761</td><td class="best">2025.4.6 (2.15 ms)</td></tr>
<tr><td>600K</td><td>4</td><td>17097.55</td><td>22450.35</td><td>595,657</td><td class="best">2025.4.6 (3.02 ms)</td></tr>
<tr><td>unthrottled</td><td>4</td><td>2.79</td><td>12.77</td><td>706,547</td><td class="best">2025.4.6 (6.34 ms)</td></tr>
</table>
<h3>P99 Write Latency by Step</h3>
<div class="chart-container"><canvas id="chart-write-p99"></canvas></div>
<h3>Unthrottled Throughput</h3>
<div class="chart-container"><canvas id="chart-write-thr"></canvas></div>
<!-- ============ Mixed ============ -->
<h2 id="mixed">Mixed 50/50 R/W</h2>
<table>
<tr><th>Step</th><th>Samples</th><th>P90 W (ms)</th><th>P90 R (ms)</th><th>P99 W (ms)</th><th>P99 R (ms)</th><th>Thr W (op/s)</th><th>Thr R (op/s)</th><th>Best Release</th></tr>
<tr><td>250K</td><td>3</td><td>0.40</td><td>1.00</td><td>2.13</td><td>2.38</td><td>124,914</td><td>124,903</td><td class="best">2025.4.6 (2.14 ms)</td></tr>
<tr><td>480K</td><td>3</td><td>1.81</td><td>1.96</td><td>4.68</td><td>5.18</td><td>239,908</td><td>239,928</td><td class="best">2026.1.2 (3.67 ms)</td></tr>
<tr><td>600K</td><td>3</td><td>1.99</td><td>2.26</td><td>6991.25</td><td>6977.41</td><td>299,832</td><td>299,846</td><td class="best">2026.1.2 (6.85 ms)</td></tr>
<tr><td>750K</td><td>3</td><td>1426.16</td><td>1428.62</td><td>19374.89</td><td>19374.89</td><td>374,816</td><td>374,799</td><td class="best">2026.1.2 (11282.68 ms)</td></tr>
<tr><td>unthrottled</td><td>3</td><td>3.68</td><td>27.60</td><td>10.35</td><td>186.60</td><td>470,417</td><td>470,372</td><td class="best">2026.1.2 (170.26 ms)</td></tr>
</table>
<h3>P99 Read Latency by Step</h3>
<div class="chart-container"><canvas id="chart-mixed-p99"></canvas></div>
<h3>Unthrottled Throughput</h3>
<div class="chart-container"><canvas id="chart-mixed-thr"></canvas></div>
<!-- ============ Key Observations ============ -->
<div class="observations" id="observations">
<h2 style="margin-top:0; border:none;">Key Observations</h2>
<ol>
<li><strong>2026.1.2</strong> (latest): All 4 runs failed — limited data. Requires investigation.</li>
<li><strong>2025.4.7</strong>: Only 1 of 4 runs passed. Limited data available.</li>
<li><strong>2025.4.6</strong>: 2 of 4 passed. Stable baseline.</li>
<li><strong>2026.1.1</strong>: 3 of 4 passed. Best coverage across workloads.</li>
<li><strong>Pass rate</strong>: 6/16 (37.5%) — indicates infrastructure or test stability issues beyond code regressions.</li>
</ol>
</div>
<p style="color: var(--muted); margin-top: 3rem; font-size: 0.85rem;">
Generated from Argus (argus.scylladb.com) — Test ID: d6ebf1a5-135f-43fc-a7ba-0716b60dfa94
</p>
<script>
const COLORS = {
'2026.1.1': { bg: 'rgba(76, 175, 80, 0.8)', border: '#4CAF50' },
'2025.4.6': { bg: 'rgba(33, 150, 243, 0.8)', border: '#2196F3' },
'2025.4.7': { bg: 'rgba(255, 152, 0, 0.8)', border: '#FF9800' },
'2026.1.2': { bg: 'rgba(244, 67, 54, 0.8)', border: '#F44336' },
};
const VERSIONS_4 = ['2026.1.1', '2025.4.6', '2025.4.7', '2026.1.2'];
const VERSIONS_3 = ['2026.1.1', '2025.4.6', '2026.1.2']; // mixed has no 2025.4.7
function makeDatasets(versions, dataPerVersion) {
return versions.map(v => ({
label: v,
data: dataPerVersion[v],
backgroundColor: COLORS[v].bg,
borderColor: COLORS[v].border,
borderWidth: 1,
}));
}
Chart.register(ChartDataLabels);
function barChart(id, labels, versions, dataPerVersion, yLabel, useLog) {
const allValues = Object.values(dataPerVersion).flat().filter(v => v != null && v > 0);
const max = Math.max(...allValues);
const min = Math.min(...allValues);
const needsLog = useLog !== false && (max / min > 50);
new Chart(document.getElementById(id), {
type: 'bar',
data: { labels, datasets: makeDatasets(versions, dataPerVersion) },
options: {
responsive: true,
plugins: {
legend: { labels: { color: '#e0e0e0' } },
datalabels: {
anchor: 'end',
align: 'end',
color: '#e0e0e0',
font: { size: 10 },
formatter: (v) => {
if (v == null) return '';
if (v >= 1000000) return (v / 1000000).toFixed(1) + 'M';
if (v >= 1000) return (v / 1000).toFixed(1) + 'K';
if (v >= 100) return v.toFixed(0);
if (v >= 10) return v.toFixed(1);
return v.toFixed(2);
},
},
},
scales: {
x: { ticks: { color: '#ccc', maxRotation: 45 }, grid: { color: '#333' } },
y: {
type: needsLog ? 'logarithmic' : 'linear',
ticks: { color: '#ccc' },
grid: { color: '#333' },
title: { display: true, text: yLabel + (needsLog ? ' (log scale)' : ''), color: '#ccc' },
}
}
}
});
}
// --- Read (Disk-Only) ---
barChart('chart-read-disk-p99', ['110K', '220K', '330K', '400K'], VERSIONS_4, {
'2026.1.1': [1.66, 1.99, 2.55, 4.93],
'2025.4.6': [1.70, 2.02, 2.58, 292.29],
'2025.4.7': [1.65, 2.01, 2.59, 92.14],
'2026.1.2': [1.77, 2.80, 14.79, 797.44],
}, 'P99 read (ms)');
barChart('chart-read-disk-thr', ['2026.1.1', '2025.4.6', '2025.4.7', '2026.1.2'], VERSIONS_4, {
'2026.1.1': [546380, null, null, null],
'2025.4.6': [null, 515489, null, null],
'2025.4.7': [null, null, 543609, null],
'2026.1.2': [null, null, null, 488160],
}, 'Throughput (op/s)');
// --- Read (Cache) ---
barChart('chart-read-cache-p99', ['500K', '900K', '1200K', '1500K'], VERSIONS_4, {
'2026.1.1': [0.56, 8.27, 4.95, 7.40],
'2025.4.6': [0.73, 3.44, 6.61, 6.50],
'2025.4.7': [0.65, 71.11, 848.30, 8.29],
'2026.1.2': [0.87, 2.58, 4.29, 22.36],
}, 'P99 read (ms)');
barChart('chart-read-cache-thr', ['2026.1.1', '2025.4.6', '2025.4.7', '2026.1.2'], VERSIONS_4, {
'2026.1.1': [1768372, null, null, null],
'2025.4.6': [null, 1628350, null, null],
'2025.4.7': [null, null, 1561155, null],
'2026.1.2': [null, null, null, 1510305],
}, 'Throughput (op/s)');
// --- Write ---
barChart('chart-write-p99', ['350K', '600K'], VERSIONS_4, {
'2026.1.1': [2.23, 3.51],
'2025.4.6': [2.15, 3.02],
'2025.4.7': [2.21, 3.21],
'2026.1.2': [2.51, 89791.66],
}, 'P99 write (ms)');
barChart('chart-write-thr', ['2026.1.1', '2025.4.6', '2025.4.7', '2026.1.2'], VERSIONS_4, {
'2026.1.1': [702614, null, null, null],
'2025.4.6': [null, 742218, null, null],
'2025.4.7': [null, null, 720203, null],
'2026.1.2': [null, null, null, 661154],
}, 'Throughput (op/s)');
// --- Mixed ---
barChart('chart-mixed-p99', ['250K', '480K', '600K', '750K'], VERSIONS_3, {
'2026.1.1': [2.55, 5.67, 16064.18, 28739.37],
'2025.4.6': [2.14, 6.20, 4861.20, 18102.62],
'2026.1.2': [2.46, 3.67, 6.85, 11282.68],
}, 'P99 read (ms)');
barChart('chart-mixed-thr', ['2026.1.1', '2025.4.6', '2026.1.2'], VERSIONS_3, {
'2026.1.1': [422946, null, null],
'2025.4.6': [null, 512838, null],
'2026.1.2': [null, null, 475469],
}, 'Throughput (op/s)');
</script>
</body>
</html>

Performance Regression Report — i8g Tablets (Official Releases Only)

Test: scylla-enterprise-perf-regression-predefined-throughput-steps-i8g-tablets Period: February 12 – May 12, 2026 (3 months) Runs analyzed: 16 official release runs

Version Color Date Passed Failed Test Error
2026.1.1 🟩 2026-04-05 3 1 0
2025.4.6 🟦 2026-04-10 2 2 0
2025.4.7 🟧 2026-04-17 1 2 1
2026.1.2 🟥 2026-05-04 0 4 0

Table of Contents


Read (Disk-Only)

Step Samples P90 Read (ms) P99 Read (ms) Throughput (op/s) Best Release
110K 4 1.06 1.69 109,963 🟧 2025.4.7 (1.65 ms)
220K 4 1.30 2.21 219,928 🟩 2026.1.1 (1.99 ms)
330K 4 1.62 5.63 329,829 🟩 2026.1.1 (2.55 ms)
400K 4 2.14 296.70 399,854 🟩 2026.1.1 (4.93 ms)
unthrottled 4 3.80 49.33 523,409 🟩 2026.1.1 (40.14 ms)

P99 Read Latency by Step (log scale)

Step Version P99 (ms) Bar
110K 🟩 1.66 🟩
110K 🟦 1.70 🟦
110K 🟧 1.65 🟧
110K 🟥 1.77 🟥
220K 🟩 1.99 🟩
220K 🟦 2.02 🟦
220K 🟧 2.01 🟧
220K 🟥 2.80 🟥🟥
330K 🟩 2.55 🟩
330K 🟦 2.58 🟦
330K 🟧 2.59 🟧
330K 🟥 14.79 🟥🟥🟥🟥🟥🟥🟥
400K 🟩 4.93 🟩🟩🟩🟩
400K 🟦 292.29 🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦
400K 🟧 92.14 🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧
400K 🟥 797.44 🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥

Unthrottled Throughput

Version Throughput (op/s) Bar
🟩 2026.1.1 546,380 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩
🟦 2025.4.6 515,489 🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦
🟧 2025.4.7 543,609 🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧
🟥 2026.1.2 488,160 🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥

Read (Cache)

Step Samples P90 Read (ms) P99 Read (ms) Throughput (op/s) Best Release
500K 4 0.40 0.70 499,794 🟩 2026.1.1 (0.56 ms)
900K 4 0.62 21.35 899,594 🟥 2026.1.2 (2.58 ms)
1200K 4 0.89 216.04 1,199,538 🟥 2026.1.2 (4.29 ms)
1500K 4 1.44 11.14 1,499,691 🟦 2025.4.6 (6.50 ms)
unthrottled 4 1.53 13.40 1,617,045 🟩 2026.1.1 (2.68 ms)

P99 Read Latency by Step (log scale)

Step Version P99 (ms) Bar
500K 🟩 0.56 🟩
500K 🟦 0.73 🟦
500K 🟧 0.65 🟧
500K 🟥 0.87 🟥
900K 🟩 8.27 🟩🟩🟩🟩🟩🟩🟩
900K 🟦 3.44 🟦🟦🟦🟦🟦
900K 🟧 71.11 🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧
900K 🟥 2.58 🟥🟥🟥🟥
1200K 🟩 4.95 🟩🟩🟩🟩🟩🟩
1200K 🟦 6.61 🟦🟦🟦🟦🟦🟦🟦
1200K 🟧 848.30 🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧
1200K 🟥 4.29 🟥🟥🟥🟥🟥🟥
1500K 🟩 7.40 🟩🟩🟩🟩🟩🟩🟩
1500K 🟦 6.50 🟦🟦🟦🟦🟦🟦🟦
1500K 🟧 8.29 🟧🟧🟧🟧🟧🟧🟧
1500K 🟥 22.36 🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥

Unthrottled Throughput

Version Throughput (op/s) Bar
🟩 2026.1.1 1,768,372 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩
🟦 2025.4.6 1,628,350 🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦
🟧 2025.4.7 1,561,155 🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧
🟥 2026.1.2 1,510,305 🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥

Write

Step Samples P90 Write (ms) P99 Write (ms) Throughput (op/s) Best Release
350K 4 1.63 2.27 349,761 🟦 2025.4.6 (2.15 ms)
600K 4 17097.55 22450.35 595,657 🟦 2025.4.6 (3.02 ms)
unthrottled 4 2.79 12.77 706,547 🟦 2025.4.6 (6.34 ms)

P99 Write Latency by Step (log scale)

Step Version P99 (ms) Bar
350K 🟩 2.23 🟩
350K 🟦 2.15 🟦
350K 🟧 2.21 🟧
350K 🟥 2.51 🟥
600K 🟩 3.51 🟩
600K 🟦 3.02 🟦
600K 🟧 3.21 🟧
600K 🟥 89,791.66 🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥

Unthrottled Throughput

Version Throughput (op/s) Bar
🟩 2026.1.1 702,614 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩
🟦 2025.4.6 742,218 🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦
🟧 2025.4.7 720,203 🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧
🟥 2026.1.2 661,154 🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥

Mixed 50/50 R/W

Step Samples P90 W (ms) P90 R (ms) P99 W (ms) P99 R (ms) Thr W (op/s) Thr R (op/s) Best Release
250K 3 0.40 1.00 2.13 2.38 124,914 124,903 🟦 2025.4.6 (2.14 ms)
480K 3 1.81 1.96 4.68 5.18 239,908 239,928 🟥 2026.1.2 (3.67 ms)
600K 3 1.99 2.26 6991.25 6977.41 299,832 299,846 🟥 2026.1.2 (6.85 ms)
750K 3 1426.16 1428.62 19374.89 19374.89 374,816 374,799 🟥 2026.1.2 (11282.68 ms)
unthrottled 3 3.68 27.60 10.35 186.60 470,417 470,372 🟥 2026.1.2 (170.26 ms)

P99 Read Latency by Step (log scale)

Step Version P99 (ms) Bar
250K 🟩 2.55 🟩
250K 🟦 2.14 🟦
250K 🟥 2.46 🟥
480K 🟩 5.67 🟩🟩
480K 🟦 6.20 🟦🟦
480K 🟥 3.67 🟥
600K 🟩 16,064.18 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩
600K 🟦 4,861.20 🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦
600K 🟥 6.85 🟥🟥
750K 🟩 28,739.37 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩
750K 🟦 18,102.62 🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦
750K 🟥 11,282.68 🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥

⚠️ No data for 🟧 2025.4.7 in mixed workload

Unthrottled Throughput

Version Throughput (op/s) Bar
🟩 2026.1.1 422,946 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩
🟦 2025.4.6 512,838 🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦🟦
🟥 2026.1.2 475,469 🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥

Key Observations

  1. 🟥 2026.1.2 (latest release tested): All 4 runs failed — limited data. Requires investigation.
  2. 🟧 2025.4.7: Only 1 of 4 runs passed. Limited data available.
  3. 🟦 2025.4.6: 2 of 4 passed. Stable baseline. Best write performance across all steps.
  4. 🟩 2026.1.1: 3 of 4 passed. Best read (disk & cache) performance.
  5. Pass rate for official releases: 6/16 (37.5%) — indicates infrastructure or test stability issues beyond code regressions.
  6. Bar widths use logarithmic scale — a bar twice as long means ~10× higher latency, not 2×.

Generated from Argus (argus.scylladb.com) — Test ID: d6ebf1a5-135f-43fc-a7ba-0716b60dfa94

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment