Skip to content

Latest commit

 

History

87 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Julia Performance Tracking

Dashboard for Julia language performance: Nanosoldier benchmark reports every 2 to 3 days, CI build/test timing, TTFX, PkgEval and package-server downloads. The Overview tab sums up every source, the Commit tab gathers everything recorded for one commit or PR (/commit?c=<sha or PR number>), and the other tabs go deep.

Live: https://perf.julialang.org/

Short paths open a tab directly and forward any other query parameters: /overview, /commit, /diff, /history, /timing, /builds, /workers, /ttfx, /downloads, /pkgeval. Each is a small redirect page under a directory of that name; the ?tab= URLs they resolve to keep working as before.

How it works

One EC2 host (infra/terraform/, see its README) runs everything from one container image (Dockerfile):

  • Six fetchers write a SQLite database every hour (db/schema.sql):
    • fetch_timing.jl: Buildkite job timings (julia-ci, plus the legacy julia-master and julia-master-scheduled pipelines, which stopped receiving builds in July 2026)
    • fetch_benchmarks.jl: Nanosoldier benchmark history, every estimate of every benchmark and Nanosoldier's own verdicts
    • fetch_pkgeval.jl: PkgEval reports, with every package's outcome
    • fetch_ttfx.jl: TTFX results (package precompile, load and run times of the Julia-TTFX-Snippets tasks, the load and run times also from repeats with the GC disabled) from the TTFX job on every julia-ci master build, see julia-buildkite/utilities/ttfx
    • fetch_packages.jl: package-server download rollups, per package too, with names from the General registry
    • fetch_agents.jl: a snapshot of the connected Buildkite agents on every run, and the queue and run times of every julia-pr and julia-ci job for the queue backlog (the token needs the read_agents and read_builds scopes)
  • db/serve.jl is the site's API (/api/): the shapes in db/Render.jl, served with a time window so the browser loads what it shows.
  • db/export.jl renders the same shapes to files after every run, published at /data/ for scripts; analysis/fetch_data.jl downloads them.
  • Datasette serves the database read-only at /db/, and /data/ci-timing.sqlite.gz is a snapshot of the whole thing.

To use the data yourself, docs/querying.md covers the API (/api/ lists its routes), SQL and the snapshot, with example queries; /llms.txt is the short version for agents.

Pushing to main builds the image and deploys it (.github/workflows/deploy.yml); health.yml checks the host once a day. The plan and its history: docs/database-migration.md.

To run the site locally, download the snapshot and serve it:

curl -O https://perf.julialang.org/data/ci-timing.sqlite.gz && gunzip ci-timing.sqlite.gz
julia --project db/serve.jl --db ci-timing.sqlite --site .

Related

The "Benchmarks" tab embeds julia-perf, a fork of rust-lang/rustc-perf adapted for Julia. Thanks to the Rust team for their work on that project.

Analytics

The site counts visits with Google Analytics, one page view per tab shown (/overview, /timing, ...). Filters and selections, which live in the query string, are never sent. Nothing is loaded when the browser sends Do Not Track or Global Privacy Control, or on a local checkout.

License

MIT, see LICENSE.

About

Julia Performance Tracking

Resources

Stars

2 stars

Watchers

1 watching

Forks

Contributors

Languages