Skip to content

1.2.61

Choose a tag to compare

@github-actions github-actions released this 01 Oct 07:02
· 31 commits to main since this release
Immutable release. Only release title and notes can be modified.
  • Gzip web and cluster responses with ISA-L when the speedups extra
    installs isal. On Linux it compresses a 500-job /jobs response 3.5
    times as fast as stock zlib, and aiohttp uses it for the gzip exchange
    between cluster peers. Without isal, the daemon uses the standard
    library's zlib. isal installs only from a wheel, so the amd64 and
    arm64 Docker images include it, as do the amd64, amd64v3, and arm64
    binaries for Linux, macOS, and Windows. The webapi.gzip_body_500
    benchmark times the compressor.
  • The amd64 and arm64 Docker images include uvloop, the speedups extra's
    event loop, as the POSIX binaries do. The other image architectures have
    no uvloop wheel and run on stock asyncio.
  • Reduce daemon memory. After parsing its configuration, the daemon frees
    the YAML parse tree, about 20 KB per job, which an idle daemon otherwise
    keeps until its next full garbage collection. An idle daemon with 3,000
    jobs uses 73 MB on Linux instead of 113 MB. On Windows, a finished run
    frees the 64 KiB read buffer of each captured stream once its output is
    drained, so a daemon running 20 jobs every 3 seconds peaks at 69 MB
    instead of 99 MB.

Performance compared with 1.2.60

Regression check: passed. No compared metric exceeded its regression thresholds.

Both versions were benchmarked in alternating rounds on the same machine. Results use the lowest runtime and median memory usage across rounds. Negative changes mean less time or memory; positive changes mean more.

Benchmark comparisons (100 metrics)

Noise (±) estimates run-to-run variation across both versions. A result fails the regression check only if the increase exceeds its percentage limit, its minimum absolute change, and 2 times the noise estimate. n/a means too few rounds to estimate noise; the other limits still apply.

The Regression limit column accounts for the minimum absolute change, expressed as a percentage of the baseline. Not enforced marks informational metrics.

Startup times include Python startup overhead. Their percentage changes exclude that overhead when it can be measured separately and leaves a positive runtime in both versions.

Benchmark 1.2.60 1.2.61 Change Noise (±) Regression limit
webapi.gzip_body_500 226.20 ms 64.05 ms -71.7% 0.3% 15%
mem.gc_pause_100k 130.78 ms 115.09 ms -12.0% 18.1% 25%
webui.log_count_5k 90.0 us 100.0 us +11.1% 4.5% 2222% (declared 25%)
webui.append_line_5k 14.0 us 15.0 us +7.1% 5.8% 25%
webapi.jobs_payload_500 54.49 ms 50.92 ms -6.6% 0.9% 18.35% (declared 15%)
loop.stall_metrics_2000 26.86 ms 26.12 ms -2.7% 4.1% Not enforced
loop.stall_completions_500 9.99 ms 10.25 ms +2.6% 2.2% 50.07% (declared 25%)
cronexpr.parse_simple 44.47 ms 45.49 ms +2.3% 2.6% 22.49% (declared 15%)
prometheus.render_500 16.91 ms 17.17 ms +1.5% 2.1% 59.14% (declared 15%)
cronexpr.next_dst_2k 41.41 ms 40.81 ms -1.4% 1.9% 24.15% (declared 15%)
state.artifact_list_churn 1.47 ms 1.49 ms +1.4% 3.0% 340% (declared 25%)
dag.finish_fanin_1k 3.33 ms 3.28 ms -1.3% 2.4% 150.3% (declared 25%)
schedule.suggest_slot_5k 4.22 ms 4.27 ms +1.3% 2.1% 237.1% (declared 15%)
schedule.cold_build_100k 493.25 ms 499.28 ms +1.2% 0.9% 15%
redact.adversarial_10k 36.62 ms 36.18 ms -1.2% 1.8% 27.31% (declared 15%)
state.lease_renew_200 50.87 ms 50.29 ms -1.1% 0.6% 98.29% (declared 25%)
dag.build_layered_10k 49.50 ms 48.94 ms -1.1% 1.1% 20.2% (declared 15%)
redact.secrets_5k 20.40 ms 20.63 ms +1.1% 1.6% 49.01% (declared 15%)
job.stream_capture_120k 35.26 ms 35.65 ms +1.1% 4.0% 28.36% (declared 15%)
startup.import_daemon 179.45 ms 181.34 ms +1.1% 0.3% 25%
state.list_records_2k 22.57 ms 22.33 ms -1.1% 2.6% 44.3% (declared 15%)
config.parse_yaml_300 198.03 ms 200.15 ms +1.1% 3.1% 15%
config.parse_yaml_3k 1.985 s 1.965 s -1.0% 2.0% 15%
schedule.lint_250_zoned 7.76 ms 7.84 ms +1.0% 2.2% 128.8% (declared 15%)
dag.mapped_drain_256 19.59 ms 19.78 ms +0.9% 1.7% 51.04% (declared 25%)
state.boot_rehydrate_populated 38.96 ms 39.31 ms +0.9% 3.0% 25.67% (declared 15%)
cluster.job_owner_2k 57.31 ms 57.82 ms +0.9% 4.4% 17.45% (declared 15%)
cronexpr.next_simple 38.91 ms 39.25 ms +0.9% 2.2% 25.7% (declared 15%)
cronexpr.test_match_200k 25.12 ms 24.90 ms -0.9% 2.5% 39.81% (declared 15%)
redact.clean_20k 20.63 ms 20.81 ms +0.9% 1.1% 48.47% (declared 15%)
state.kv_roundtrip_200 56.27 ms 55.78 ms -0.9% 0.8% 17.77% (declared 15%)
loop.stall_jobs_500 21.25 ms 21.06 ms -0.9% 1.3% Not enforced
schedule.duplicates_20k 17.02 ms 17.16 ms +0.8% 7.0% 58.74% (declared 15%)
tui.log_restyle_5k 31.82 ms 31.56 ms -0.8% 1.0% 31.43% (declared 15%)
webui.render_fleet_15x400 23.41 ms 23.60 ms +0.8% 1.1% 25%
schedule.reseed_100k 203.77 ms 202.22 ms -0.8% 0.6% 15%
startup.import_cronexpr 25.69 ms 25.75 ms -0.7% 1.2% 25%
startup.python_baseline 17.45 ms 17.58 ms +0.7% 0.1% Not enforced
startup.validate_config_100 219.51 ms 220.99 ms +0.7% 0.6% 25%
ical.render_500x7d 51.61 ms 51.26 ms -0.7% 2.1% 19.38% (declared 15%)
state.derive_max_cold 19.80 ms 19.68 ms -0.6% 2.9% 50.5% (declared 15%)
state.append_1k 126.48 ms 127.24 ms +0.6% 1.0% 39.53% (declared 15%)
schedule.next_fires_2k 25.06 ms 24.91 ms -0.6% 1.1% 39.91% (declared 15%)
tui.log_search_20k 15.34 ms 15.43 ms +0.6% 1.0% 65.18% (declared 15%)
state.gc_sweep_2k_streams 32.71 ms 32.53 ms -0.6% 0.6% 45.85% (declared 25%)
config.jobconfig_3k 67.84 ms 68.20 ms +0.5% 1.3% 15%
state.fanout_gather_100 9.94 ms 9.99 ms +0.5% 4.1% 100.6% (declared 25%)
dag.adopt_scan_500 100.93 ms 101.46 ms +0.5% 1.2% 25%
startup.job_set_id_100 225.86 ms 227.07 ms +0.5% 1.9% 25%
dag.advance_quiescent_1k 72.21 ms 71.84 ms -0.5% 1.0% 25%
cronexpr.parse_complex 24.29 ms 24.41 ms +0.5% 1.1% 41.17% (declared 15%)
statsd.emit_2k 12.97 ms 12.91 ms -0.5% 1.5% 77.1% (declared 25%)
dag.build_chain_10k 28.51 ms 28.65 ms +0.5% 1.4% 35.07% (declared 15%)
loop.idle_wake_rate 22.03 ms 21.93 ms -0.5% 2.2% 25%
job.report_noop_100k 52.81 ms 52.57 ms -0.5% 3.7% 15%
schedule.pressure_20k_48h 16.38 ms 16.31 ms -0.5% 1.5% 61.04% (declared 15%)
state.list_documents_600 55.41 ms 55.17 ms -0.4% 0.6% 21.66% (declared 15%)
dag.list_dags_warm 1.09 ms 1.10 ms +0.4% 1.7% 183.3% (declared 25%)
state.derive_max_warm 147.38 ms 146.79 ms -0.4% 0.2% 15%
cronexpr.occurrences_1k 13.87 ms 13.93 ms +0.4% 1.9% 72.08% (declared 15%)
json.roundtrip_3k 581.93 ms 579.72 ms -0.4% 1.2% 15%
cluster.parse_summaries_6k 85.28 ms 85.58 ms +0.4% 1.4% 15%
push.seal_500 90.53 ms 90.83 ms +0.3% 1.1% 15%
config.interp_2k 65.53 ms 65.71 ms +0.3% 0.5% 15%
startup.version 54.14 ms 54.16 ms -0.3% 0.4% 25%
webui.render_rows_500 16.94 ms 16.98 ms +0.2% 0.8% 25%
mcp.handle_200 156.03 ms 156.40 ms +0.2% 1.0% 15%
state.list_records_warm 107.59 ms 107.82 ms +0.2% 0.7% 15%
webapi.auth_scope_20k 88.47 ms 88.28 ms -0.2% 1.5% 15%
webui.render_term_5k 106.10 ms 105.90 ms -0.2% 0.9% 25%
state.artifact_get_newest 21.78 ms 21.74 ms -0.2% 0.9% 25%
cluster.fleet_view_15x400 84.99 ms 84.85 ms -0.2% 1.3% 25%
json.roundtrip_orjson_3k 208.04 ms 207.71 ms -0.2% 0.7% 15%
webapi.sse_burst_20k 46.45 ms 46.37 ms -0.2% 1.1% 15%
schedule.due_pass_100k 15.82 ms 15.85 ms +0.1% 1.2% 63.19% (declared 25%)
config.reload_warm_50 46.31 ms 46.37 ms +0.1% 2.2% 25%
state.depends_on_past_gate 3.07 ms 3.08 ms +0.1% 3.0% 65.08% (declared 25%)
startup.import_config 96.24 ms 96.44 ms +0.1% 0.1% 25%
mem.rss_daemon_import 37.53 MB 37.50 MB -0.1% 0.1% 25%
cronexpr.next_complex 15.76 ms 15.74 ms -0.1% 2.9% 63.46% (declared 15%)
config.parse_crontab_1k 12.52 ms 12.53 ms +0.1% 0.9% 79.87% (declared 15%)
config.reload_warm_include_50 99.49 ms 99.56 ms +0.1% 1.2% 25%
dag.list_runs_warm 12.94 ms 12.95 ms +0.1% 1.6% 25%
dag.advance_quiescent_chain 71.01 ms 70.96 ms -0.1% 0.4% 25%
schedule.reseed_local_20k 94.04 ms 94.09 ms +0.1% 1.1% 15%
config.reload_gc_100k 2.443 s 2.444 s +0.0% 0.7% 25%
mem.rss_version 14.46 MB 14.45 MB -0.0% 0.1% 25%
tui.dag_graph_paint_2k 228.05 ms 228.13 ms +0.0% 1.3% 15%
dag.plan_claim_10k 13.37 ms 13.37 ms -0.0% 3.2% 74.77% (declared 15%)
tui.drawer_paint_5k 105.21 ms 105.24 ms +0.0% 1.6% 15%
fingerprint.job_set_id_10k 305.22 ms 305.14 ms -0.0% 0.8% 15%
resources.monitor_stop_100 287.70 ms 287.78 ms +0.0% 2.0% 25%
state.mutate_document_1k 143.98 ms 143.97 ms -0.0% 1.3% 34.73% (declared 25%)
webui.week_walk_500 2.95 ms 2.95 ms -0.0% 2.6% 67.8% (declared 25%)
webui.radar_walk_500 320.0 us 320.0 us +0.0% 6.4% 625% (declared 25%)
webapi.jobs_bytes_500 181.42 KB 181.42 KB +0.0% 0.0% 15%
webapi.jobs_gzip_500 5.19 KB 5.19 KB +0.0% 0.0% 15%
mem.crontab_10k 2.80 MB 2.80 MB +0.0% 0.0% 17.85% (declared 15%)
mem.jobconfig_2k 1.54 MB 1.54 MB +0.0% 0.0% 32.36% (declared 15%)
mem.retired_output_1k 0.12 MB 0.12 MB +0.0% 0.0% 433.7% (declared 15%)

Full Changelog: 1.2.60...1.2.61