A benchmarking dataset for Linux distros — run Phoronix Test Suite across identical hardware on Ubuntu, Fedora, and Debian, captured monthly in CI, with a Rails dashboard and R parsers consuming the same composite XML.
LinuxBenchHub has three components:
- A benchmark dataset and analysis under
benchmarks/— per-distro Phoronix Test Suite results (CPU, memory, network). Each distro has an R parsing script that extracts summary stats from the rawpts/composite.xml. The original bare-metal sample (VMware Fusion Pro on 2× i5-7360U) lives at the root of each distro folder; CI-captured runs land inbenchmarks/<distro>/captures/. - A capture pipeline under
.github/workflows/capture-benchmarks.yml— a monthly GitHub Actions job that runspts/c-ray,pts/tinymembench, andpts/aircrack-nginside Ubuntu, Fedora, and Debian containers on the sameubuntu-latestrunner, then commits the resultingcomposite.xmlback to the repo. Free, reproducible, no cloud bill. - A Rails 8 dashboard under
website/— a web app that lists stored benchmarks, supports Devise auth, exports CSV/JSON, and renders charts with Chartkick. The dashboard reads the samecomposite.xmlfiles the R scripts parse, so it stays in sync with whatever the CI workflow last captured.
The fully parsed sample is Ubuntu 24.04 LTS on 2× Intel Core i5-7360U (3 cores), 4 GB RAM, 21 GB disk, in VMware Fusion Pro 13.6.1:
| Benchmark | Test | Metric | Mean | Median | StdDev |
|---|---|---|---|---|---|
| C-Ray (CPU) | pts/c-ray-2.0.0, 1080p @ 16 rpp |
ms | 1,088.8 | 1,141.1 | 222.5 |
| Tinymembench (memcpy) | pts/tinymembench-1.0.2 |
MB/s | 11,209.5 | 11,873.6 | 2,761.1 |
| Tinymembench (memset) | pts/tinymembench-1.0.2 |
MB/s | 23,480.2 | 25,745.6 | 5,731.1 |
| Aircrack-ng (network) | pts/aircrack-ng-1.3.0 |
k/s | 4,542.6 | 4,943.1 | 835.1 |
Full per-run data and visualizations:
benchmarks/ubuntu/ubuntu.md— Ubuntu 24.04benchmarks/fedora/fedora.md— Fedora Linux 41benchmarks/debian/debian.md— Debian 12
flowchart LR
cron[GitHub Actions<br/>monthly cron]
ubuntu[ubuntu:24.04 container]
fedora[fedora:41 container]
debian[debian:12 container]
pts[Phoronix Test Suite<br/>c-ray, tinymembench, aircrack-ng]
composite[benchmarks/*/composite-latest.xml]
rparser[benchmarks/*/Parse_composite_*.R<br/>summary stats + plots]
md[benchmarks/*/*.md<br/>static writeup]
cron --> ubuntu
cron --> fedora
cron --> debian
ubuntu --> pts
fedora --> pts
debian --> pts
pts --> composite
composite --> rparser
rparser --> md
rails[Rails 8 dashboard<br/>website/]
charts[Chartkick + Groupdate]
composite --> rails
rails --> charts
The R parsers and the Rails app are interchangeable consumers of the same composite.xml — run the static analysis with R alone, or boot the dashboard alone, or both. The capture workflow doesn't care which one downstream uses the files.
.
|-- benchmarks/ # captured Phoronix results, per distro
| |-- ubuntu/ # ubuntu.md + Parse_composite_Ubuntu.R + composite-latest.xml + captures/
| |-- fedora/
| `-- debian/
|-- .github/
| |-- workflows/
| | |-- capture-benchmarks.yml # monthly CI capture per distro
| | |-- ci.yml # Rails test suite gate
| | `-- deploy.yml # Rails app deploy
| `-- scripts/
| `-- pts-batch-config.xml # seeded into PTS before non-interactive runs
|-- site/ # Next.js static showcase (deployed on Vercel)
|-- website/ # Rails 8 dashboard
| |-- app/ # models, controllers, views
| |-- config/ # routes, Whenever schedule
| `-- Dockerfile # production image
|-- linux_benchmarking.rb # standalone CLI script for ad-hoc runs
|-- .lintr # R linter config for the Parse_composite_*.R scripts
`-- assets/ # banner + social card
Captures happen automatically on the 1st of every month via .github/workflows/capture-benchmarks.yml. To trigger an out-of-band run, push the workflow's "Run workflow" button on the Actions tab — you can pick a single distro or all three. The job commits composite-YYYY-MM-DD.xml (a dated archive) and overwrites composite-latest.xml (the stable pointer the dashboard and R scripts read).
To re-derive the summary stats from a fresh composite.xml locally:
Rscript benchmarks/ubuntu/Parse_composite_Ubuntu.R benchmarks/ubuntu/composite-latest.xmlR deps: xml2, dplyr, ggplot2, tidyr. The .lintr at repo root pins the lint rules.
cd website
bundle install
bin/rails db:prepare
bin/rails serverThe dashboard reads the same composite.xml files the R scripts parse. No external services required — SQLite is the only datastore.
Deployment is configured for Kamal — see website/.kamal/ and website/Dockerfile. The Kamal config is the Rails 8 default scaffold with placeholder values; fill in image, servers, proxy.host, and registry.username before bin/kamal setup.
The architecture pivoted from "on-demand Azure VMs per click" to "monthly CI captures into git." That trade dropped the live-VM demo but bought reproducibility, $0 ongoing cost, and a much smaller security surface (no SSH passwords, no public VNC ports, no cloud cleanup races).
- Ubuntu 24.04 / Fedora 41 / Debian 12 — the bare-metal sample sits at the root of each
benchmarks/<distro>/, captured once on VMware Fusion Pro. CI runs capture fresh containerized numbers monthly intobenchmarks/<distro>/captures/. - Cross-distro comparison page — the three writeups exist independently; a side-by-side comparison page is not yet written.
- Rails dashboard — scaffolded with Devise auth and Chartkick. Reads
composite.xmldirectly. Expect rough edges — the most recent ingester rewrite is in flight. - Kamal deploy —
deploy.ymlstill has scaffold placeholders. Fill them in or pick a different host (Fly.io / Render both run the same Dockerfile).
- Benchmarks: Phoronix Test Suite, R (
xml2,dplyr,ggplot2,tidyr) - Capture: GitHub Actions (monthly cron, distro containers on
ubuntu-latest) - Dashboard: Rails 8.0, Ruby 3.3, SQLite, Puma, Hotwire (Turbo + Stimulus), Bootstrap, Chartkick + Groupdate
- Auth: Devise
- Deploy: Docker + Kamal (or any Docker-host PaaS)
Code released under the MIT License. Third-party components retain their upstream licenses: Phoronix Test Suite is GPLv3 (referenced, not bundled); noVNC, embedded under website/noVNC/, is MPL-2.0; Rails and Ruby are MIT. Captured Phoronix outputs under benchmarks/*/ are derivative works of the upstream tests.