From d593a671aac7a41d1577cab9b61abb8a61ba41d3 Mon Sep 17 00:00:00 2001 From: GitLab CI Date: Fri, 23 Jan 2026 05:01:41 -0500 Subject: [PATCH] perf - Add performance report for 4.2.8 [ci skip] --- reports/4.2.8/perf.json | 407 +++++++++++++++++++++++++++++++++ reports/4.2.8/perf.md | 146 ++++++++++++ reports/PERFORMANCE-HISTORY.md | 1 + 3 files changed, 554 insertions(+) create mode 100644 reports/4.2.8/perf.json create mode 100644 reports/4.2.8/perf.md diff --git a/reports/4.2.8/perf.json b/reports/4.2.8/perf.json new file mode 100644 index 0000000..67ae0f2 --- /dev/null +++ b/reports/4.2.8/perf.json @@ -0,0 +1,407 @@ +{ + "tag": "4.2.8", + "generated_at": "2026-01-23T10:01:33Z", + "parent_pipeline_id": 12053, + "child_pipeline_id": 12055, + "summary": { + "total_tests": 645, + "passed_tests": 644, + "failed_tests": 1, + "total_languages": 43, + "passed_languages": 42, + "avg_duration_seconds": 111, + "max_duration_seconds": 313, + "min_duration_seconds": 28, + "slowest_language": "kotlin", + "fastest_language": "fortran" + }, + "languages": [ + { + "language": "kotlin", + "status": "Passed", + "queued_duration": 136.590526, + "started_at": "2026-01-23T09:55:08Z", + "updated_at": "2026-01-23T10:00:21Z", + "job_id": 29036, + "duration_seconds": 313 + }, + { + "language": "python", + "status": "Passed", + "queued_duration": 9.593506, + "started_at": "2026-01-23T09:52:54Z", + "updated_at": "2026-01-23T09:57:07Z", + "job_id": 29010, + "duration_seconds": 253 + }, + { + "language": "javascript", + "status": "Passed", + "queued_duration": 10.202969, + "started_at": "2026-01-23T09:52:55Z", + "updated_at": "2026-01-23T09:57:08Z", + "job_id": 29011, + "duration_seconds": 253 + }, + { + "language": "tcl", + "status": "Passed", + "queued_duration": 14.281513, + "started_at": "2026-01-23T09:53:03Z", + "updated_at": "2026-01-23T09:57:10Z", + "job_id": 29021, + "duration_seconds": 247 + }, + { + "language": "raku", + "status": "Passed", + "queued_duration": 99.988881, + "started_at": "2026-01-23T09:54:31Z", + "updated_at": "2026-01-23T09:58:31Z", + "job_id": 29030, + "duration_seconds": 240 + }, + { + "language": "cobol", + "status": "Passed", + "queued_duration": 137.186053, + "started_at": "2026-01-23T09:55:09Z", + "updated_at": "2026-01-23T09:58:28Z", + "job_id": 29037, + "duration_seconds": 199 + }, + { + "language": "zig", + "status": "Passed", + "queued_duration": 148.575918, + "started_at": "2026-01-23T09:55:21Z", + "updated_at": "2026-01-23T09:58:28Z", + "job_id": 29040, + "duration_seconds": 187 + }, + { + "language": "haskell", + "status": "Passed", + "queued_duration": 167.574684, + "started_at": "2026-01-23T09:55:40Z", + "updated_at": "2026-01-23T09:58:28Z", + "job_id": 29046, + "duration_seconds": 168 + }, + { + "language": "ocaml", + "status": "Passed", + "queued_duration": 167.976524, + "started_at": "2026-01-23T09:55:41Z", + "updated_at": "2026-01-23T09:58:28Z", + "job_id": 29047, + "duration_seconds": 167 + }, + { + "language": "fsharp", + "status": "Passed", + "queued_duration": 168.515898, + "started_at": "2026-01-23T09:55:42Z", + "updated_at": "2026-01-23T09:58:27Z", + "job_id": 29048, + "duration_seconds": 165 + }, + { + "language": "bash", + "status": "Passed", + "queued_duration": 13.411241, + "started_at": "2026-01-23T09:53:01Z", + "updated_at": "2026-01-23T09:55:36Z", + "job_id": 29017, + "duration_seconds": 155 + }, + { + "language": "elixir", + "status": "Passed", + "queued_duration": 13.785121, + "started_at": "2026-01-23T09:53:02Z", + "updated_at": "2026-01-23T09:55:09Z", + "job_id": 29019, + "duration_seconds": 127 + }, + { + "language": "r", + "status": "Passed", + "queued_duration": 13.654547, + "started_at": "2026-01-23T09:53:02Z", + "updated_at": "2026-01-23T09:55:08Z", + "job_id": 29018, + "duration_seconds": 126 + }, + { + "language": "d", + "status": "Passed", + "queued_duration": 138.183743, + "started_at": "2026-01-23T09:55:10Z", + "updated_at": "2026-01-23T09:57:10Z", + "job_id": 29039, + "duration_seconds": 120 + }, + { + "language": "v", + "status": "Passed", + "queued_duration": 165.325427, + "started_at": "2026-01-23T09:55:38Z", + "updated_at": "2026-01-23T09:57:27Z", + "job_id": 29042, + "duration_seconds": 109 + }, + { + "language": "dotnet", + "status": "Passed", + "queued_duration": 169.702089, + "started_at": "2026-01-23T09:55:43Z", + "updated_at": "2026-01-23T09:57:25Z", + "job_id": 29050, + "duration_seconds": 102 + }, + { + "language": "typescript", + "status": "Passed", + "queued_duration": 11.175115, + "started_at": "2026-01-23T09:52:56Z", + "updated_at": "2026-01-23T09:54:30Z", + "job_id": 29012, + "duration_seconds": 94 + }, + { + "language": "ruby", + "status": "Passed", + "queued_duration": 11.592752, + "started_at": "2026-01-23T09:52:57Z", + "updated_at": "2026-01-23T09:54:30Z", + "job_id": 29013, + "duration_seconds": 93 + }, + { + "language": "nim", + "status": "Passed", + "queued_duration": 163.317663, + "started_at": "2026-01-23T09:55:36Z", + "updated_at": "2026-01-23T09:57:09Z", + "job_id": 29041, + "duration_seconds": 93 + }, + { + "language": "php", + "status": "Passed", + "queued_duration": 12.971526, + "started_at": "2026-01-23T09:52:59Z", + "updated_at": "2026-01-23T09:54:30Z", + "job_id": 29015, + "duration_seconds": 91 + }, + { + "language": "perl", + "status": "Passed", + "queued_duration": 12.049815, + "started_at": "2026-01-23T09:52:58Z", + "updated_at": "2026-01-23T09:54:29Z", + "job_id": 29014, + "duration_seconds": 91 + }, + { + "language": "dart", + "status": "Passed", + "queued_duration": 166.482207, + "started_at": "2026-01-23T09:55:39Z", + "updated_at": "2026-01-23T09:57:09Z", + "job_id": 29044, + "duration_seconds": 90 + }, + { + "language": "objc", + "status": "Passed", + "queued_duration": 166.035637, + "started_at": "2026-01-23T09:55:39Z", + "updated_at": "2026-01-23T09:57:08Z", + "job_id": 29043, + "duration_seconds": 89 + }, + { + "language": "julia", + "status": "Passed", + "queued_duration": 167.035877, + "started_at": "2026-01-23T09:55:40Z", + "updated_at": "2026-01-23T09:57:08Z", + "job_id": 29045, + "duration_seconds": 88 + }, + { + "language": "csharp", + "status": "Passed", + "queued_duration": 168.981467, + "started_at": "2026-01-23T09:55:42Z", + "updated_at": "2026-01-23T09:57:09Z", + "job_id": 29049, + "duration_seconds": 87 + }, + { + "language": "lua", + "status": "Passed", + "queued_duration": 12.699485, + "started_at": "2026-01-23T09:53:00Z", + "updated_at": "2026-01-23T09:54:24Z", + "job_id": 29016, + "duration_seconds": 84 + }, + { + "language": "prolog", + "status": "Passed", + "queued_duration": 254.011773, + "started_at": "2026-01-23T09:57:07Z", + "updated_at": "2026-01-23T09:58:28Z", + "job_id": 29051, + "duration_seconds": 81 + }, + { + "language": "forth", + "status": "Passed", + "queued_duration": 255.663611, + "started_at": "2026-01-23T09:57:09Z", + "updated_at": "2026-01-23T09:58:27Z", + "job_id": 29052, + "duration_seconds": 78 + }, + { + "language": "erlang", + "status": "Failed", + "queued_duration": 97.250125, + "started_at": "2026-01-23T09:57:13Z", + "updated_at": "2026-01-23T09:58:28Z", + "job_id": 29077, + "duration_seconds": 75 + }, + { + "language": "cpp", + "status": "Passed", + "queued_duration": 101.0849, + "started_at": "2026-01-23T09:54:32Z", + "updated_at": "2026-01-23T09:55:38Z", + "job_id": 29032, + "duration_seconds": 66 + }, + { + "language": "c", + "status": "Passed", + "queued_duration": 100.476592, + "started_at": "2026-01-23T09:54:32Z", + "updated_at": "2026-01-23T09:55:38Z", + "job_id": 29031, + "duration_seconds": 66 + }, + { + "language": "go", + "status": "Passed", + "queued_duration": 101.50214, + "started_at": "2026-01-23T09:54:33Z", + "updated_at": "2026-01-23T09:55:37Z", + "job_id": 29033, + "duration_seconds": 64 + }, + { + "language": "awk", + "status": "Passed", + "queued_duration": 99.622835, + "started_at": "2026-01-23T09:54:31Z", + "updated_at": "2026-01-23T09:55:35Z", + "job_id": 29029, + "duration_seconds": 64 + }, + { + "language": "rust", + "status": "Passed", + "queued_duration": 103.812598, + "started_at": "2026-01-23T09:54:35Z", + "updated_at": "2026-01-23T09:55:38Z", + "job_id": 29034, + "duration_seconds": 63 + }, + { + "language": "scheme", + "status": "Passed", + "queued_duration": 43.345603, + "started_at": "2026-01-23T09:53:33Z", + "updated_at": "2026-01-23T09:54:28Z", + "job_id": 29022, + "duration_seconds": 55 + }, + { + "language": "commonlisp", + "status": "Passed", + "queued_duration": 43.892737, + "started_at": "2026-01-23T09:53:34Z", + "updated_at": "2026-01-23T09:54:27Z", + "job_id": 29025, + "duration_seconds": 53 + }, + { + "language": "clojure", + "status": "Passed", + "queued_duration": 44.021692, + "started_at": "2026-01-23T09:53:34Z", + "updated_at": "2026-01-23T09:54:27Z", + "job_id": 29024, + "duration_seconds": 53 + }, + { + "language": "deno", + "status": "Passed", + "queued_duration": 98.583371, + "started_at": "2026-01-23T09:54:29Z", + "updated_at": "2026-01-23T09:55:21Z", + "job_id": 29028, + "duration_seconds": 52 + }, + { + "language": "powershell", + "status": "Passed", + "queued_duration": 43.813771, + "started_at": "2026-01-23T09:53:33Z", + "updated_at": "2026-01-23T09:54:24Z", + "job_id": 29023, + "duration_seconds": 51 + }, + { + "language": "java", + "status": "Passed", + "queued_duration": 121.067188, + "started_at": "2026-01-23T09:54:53Z", + "updated_at": "2026-01-23T09:55:38Z", + "job_id": 29035, + "duration_seconds": 45 + }, + { + "language": "crystal", + "status": "Passed", + "queued_duration": 94.247114, + "started_at": "2026-01-23T09:54:25Z", + "updated_at": "2026-01-23T09:55:09Z", + "job_id": 29026, + "duration_seconds": 44 + }, + { + "language": "groovy", + "status": "Passed", + "queued_duration": 96.81373, + "started_at": "2026-01-23T09:54:28Z", + "updated_at": "2026-01-23T09:55:09Z", + "job_id": 29027, + "duration_seconds": 41 + }, + { + "language": "fortran", + "status": "Passed", + "queued_duration": 137.615979, + "started_at": "2026-01-23T09:55:10Z", + "updated_at": "2026-01-23T09:55:38Z", + "job_id": 29038, + "duration_seconds": 28 + } +] +} diff --git a/reports/4.2.8/perf.md b/reports/4.2.8/perf.md new file mode 100644 index 0000000..ae893ea --- /dev/null +++ b/reports/4.2.8/perf.md @@ -0,0 +1,146 @@ +# Performance Report: 4.2.8 + +**Generated:** 2026-01-23T10:01:33Z +**Pipeline:** [#12055](https://git.unturf.com/engineering/unturf/un-inception/-/pipelines/12055) + +## Summary + +| Metric | Value | +|--------|-------| +| Total Tests | 645 | +| Passed | 644 | +| Failed | 1 | +| Pass Rate | 99.8% | +| Languages | 43 | +| Avg Duration | 111s | +| Slowest | kotlin (313s) | +| Fastest | fortran (28s) | + +--- + +## Test Duration by Language + +The primary performance metric - how long each language takes to run its full test suite (15 tests per language). + +![Duration by Language](chart-duration-by-language.png) + +**Key observations:** +- **KOTLIN** and **PYTHON** are outliers at 90+ seconds +- Most languages cluster between 20-40 seconds +- Compiled languages (red) tend to be faster than interpreted (blue) +- **FORTRAN** is the fastest at 28 seconds + +--- + +## Compiled vs Interpreted + +Comparing performance between compiled languages (C, Go, Rust, etc.) and interpreted languages (Python, Ruby, JavaScript, etc.). + +![Category Comparison](chart-category-comparison.png) + +**Findings:** +- 20 compiled languages vs 22 interpreted +- Compiled languages have lower median execution time +- Interpreted languages show more variance (wider spread) +- The white diamond marks the mean for each category + +--- + +## Duration Distribution + +Histogram showing how test durations are distributed across all 43 languages. + +![Duration Histogram](chart-duration-histogram.png) + +**Distribution analysis:** +- Most languages complete in 20-35 seconds (the peak) +- Mean (green dashed) and median (blue dotted) are close together +- Long tail on the right from slow outliers (kotlin, python) + +--- + +## Speed Leaders + +Side-by-side comparison of the 10 slowest and 10 fastest languages. + +![Speed Leaders](chart-speed-leaders.png) + +**Slowest (left):** KOTLIN, PYTHON, JAVASCRIPT, TCL, RAKU +**Fastest (right):** FORTRAN, GROOVY, CRYSTAL, JAVA, POWERSHELL + +--- + +## Queue vs Execution Time + +Scatter plot showing the relationship between CI queue wait time and actual test execution time. + +![Queue vs Execution](chart-queue-vs-execution.png) + +**Notes:** +- Queue time is how long the job waited for a runner +- Most jobs had similar queue times (clustered vertically) +- Outliers labeled - kotlin and python took longest to execute regardless of queue time + +--- + +## Dashboard + +Summary dashboard combining key metrics and visualizations. + +![Dashboard](chart-dashboard.png) + +--- + +## Raw Data + +### Per-Language Performance + +| Language | Status | Duration | +|----------|--------|----------| +| kotlin | Passed | 313s | +| python | Passed | 253s | +| javascript | Passed | 253s | +| tcl | Passed | 247s | +| raku | Passed | 240s | +| cobol | Passed | 199s | +| zig | Passed | 187s | +| haskell | Passed | 168s | +| ocaml | Passed | 167s | +| fsharp | Passed | 165s | +| bash | Passed | 155s | +| elixir | Passed | 127s | +| r | Passed | 126s | +| d | Passed | 120s | +| v | Passed | 109s | +| dotnet | Passed | 102s | +| typescript | Passed | 94s | +| ruby | Passed | 93s | +| nim | Passed | 93s | +| php | Passed | 91s | +| perl | Passed | 91s | +| dart | Passed | 90s | +| objc | Passed | 89s | +| julia | Passed | 88s | +| csharp | Passed | 87s | +| lua | Passed | 84s | +| prolog | Passed | 81s | +| forth | Passed | 78s | +| erlang | Failed | 75s | +| cpp | Passed | 66s | +| c | Passed | 66s | +| go | Passed | 64s | +| awk | Passed | 64s | +| rust | Passed | 63s | +| scheme | Passed | 55s | +| commonlisp | Passed | 53s | +| clojure | Passed | 53s | +| deno | Passed | 52s | +| powershell | Passed | 51s | +| java | Passed | 45s | +| crystal | Passed | 44s | +| groovy | Passed | 41s | +| fortran | Passed | 28s | + +--- + +*Report generated by UN Inception CI pipeline* diff --git a/reports/PERFORMANCE-HISTORY.md b/reports/PERFORMANCE-HISTORY.md index 95f0ba0..ffc5172 100644 --- a/reports/PERFORMANCE-HISTORY.md +++ b/reports/PERFORMANCE-HISTORY.md @@ -12,3 +12,4 @@ Tracking compile and test execution times across releases. | 4.2.5 | 2026-01-19 | 658 | 100.0% | 67s | v | erlang | | 4.2.6 | 2026-01-19 | 642 | 100.0% | 54s | haskell | awk | | 4.2.7 | 2026-01-23 | 631 | 99.8% | 117s | typescript | dotnet | +| 4.2.8 | 2026-01-23 | 645 | 99.8% | 111s | kotlin | fortran |