Skip to content

Builder106/LinuxBenchHub

Repository files navigation

LinuxBenchHub — compare Linux distros under identical virtual hardware, with a Rails dashboard and live noVNC view.

CI Ruby Rails License Status

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.

What this is

LinuxBenchHub has three components:

  1. 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 raw pts/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 in benchmarks/<distro>/captures/.
  2. A capture pipeline under .github/workflows/capture-benchmarks.yml — a monthly GitHub Actions job that runs pts/c-ray, pts/tinymembench, and pts/aircrack-ng inside Ubuntu, Fedora, and Debian containers on the same ubuntu-latest runner, then commits the resulting composite.xml back to the repo. Free, reproducible, no cloud bill.
  3. 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 same composite.xml files the R scripts parse, so it stays in sync with whatever the CI workflow last captured.

Sample results — Ubuntu 24.04

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:

How the pieces fit

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
Loading

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.

Repo layout

.
|-- 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

Setup

Capturing fresh benchmarks

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.xml

R deps: xml2, dplyr, ggplot2, tidyr. The .lintr at repo root pins the lint rules.

Running the Rails dashboard

cd website
bundle install
bin/rails db:prepare
bin/rails server

The 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.

Project status

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 into benchmarks/<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.xml directly. Expect rough edges — the most recent ingester rewrite is in flight.
  • Kamal deploydeploy.yml still has scaffold placeholders. Fill them in or pick a different host (Fly.io / Render both run the same Dockerfile).

Tech stack

  • 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)

License

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.

About

VM benchmarking platform — Phoronix Test Suite across Ubuntu, Fedora, and Debian under identical virtual hardware, with a Rails 8 dashboard and embedded noVNC live view.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors