ci: update registry auth and improve adaptive worker scaling
Refactor the release workflow to use a structured container object with authenticated pulls for macOS ARM64 builds. Replace single-worker activation with dynamic upfront provisioning based on node and worker counts. Implement an absolute efficiency gain threshold for scaling checks and add early termination to improve adaptive scaling stability. Bump obikmer crate version to 1.1.27.
This commit is contained in:
@@ -86,7 +86,11 @@ jobs:
|
|||||||
build-macos-arm64:
|
build-macos-arm64:
|
||||||
needs: create-release
|
needs: create-release
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container: registry.metabarcoding.org/cibuilder/rustcrossosx:latest
|
container:
|
||||||
|
image: registry.metabarcoding.org/cibuilder/rustcrossosx:latest
|
||||||
|
credentials:
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.REGISTRYTOKEN }}
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: src
|
working-directory: src
|
||||||
|
|||||||
Generated
+1
-1
@@ -1704,7 +1704,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "obikmer"
|
name = "obikmer"
|
||||||
version = "1.1.26"
|
version = "1.1.27"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"csv",
|
"csv",
|
||||||
|
|||||||
@@ -287,8 +287,9 @@ impl PartitionRunner {
|
|||||||
drop(event_tx);
|
drop(event_tx);
|
||||||
|
|
||||||
// ── Controller ────────────────────────────────────────────────────
|
// ── Controller ────────────────────────────────────────────────────
|
||||||
activate_tx.send(()).ok();
|
let initial_workers = n_nodes.min(max_workers).min(n_total);
|
||||||
let mut n_active = 1usize;
|
for _ in 0..initial_workers { activate_tx.send(()).ok(); }
|
||||||
|
let mut n_active = initial_workers;
|
||||||
let mut cpu_sample = CpuSample::now();
|
let mut cpu_sample = CpuSample::now();
|
||||||
let mut eff_at_last_spawn = 0.0f64; // 0 = no previous spawn to evaluate
|
let mut eff_at_last_spawn = 0.0f64; // 0 = no previous spawn to evaluate
|
||||||
let mut completed = 0usize;
|
let mut completed = 0usize;
|
||||||
@@ -361,13 +362,13 @@ fn maybe_activate(
|
|||||||
// Going from k-1 → k workers, the minimum acceptable speedup is (k-1+0.2)/(k-1).
|
// Going from k-1 → k workers, the minimum acceptable speedup is (k-1+0.2)/(k-1).
|
||||||
// For the very first extra worker (n_active == 1, no previous spawn), skip this
|
// For the very first extra worker (n_active == 1, no previous spawn), skip this
|
||||||
// check: eff_at_last_spawn == 0 acts as the sentinel.
|
// check: eff_at_last_spawn == 0 acts as the sentinel.
|
||||||
let last_spawn_was_beneficial = if *eff_at_last_spawn < 1e-9 {
|
let last_spawn_was_beneficial = if *eff_at_last_spawn < 1e-9 || eff < 1e-9 {
|
||||||
true // first additional worker: no prior data to evaluate
|
true // first additional worker, or measurement too short: no prior data to evaluate
|
||||||
} else {
|
} else {
|
||||||
let k_before = (*n_active - 1) as f64;
|
let k_new = *n_active as f64; // worker count after the last spawn
|
||||||
let min_speedup = (k_before + 0.2) / k_before;
|
let min_gain = 0.2 / k_new;
|
||||||
let actual_speedup = eff / *eff_at_last_spawn;
|
let actual_gain = (eff - *eff_at_last_spawn) / eff;
|
||||||
actual_speedup >= min_speedup
|
actual_gain >= min_gain
|
||||||
};
|
};
|
||||||
|
|
||||||
if last_spawn_was_beneficial {
|
if last_spawn_was_beneficial {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "obikmer"
|
name = "obikmer"
|
||||||
version = "1.1.26"
|
version = "1.1.27"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
|
|||||||
Reference in New Issue
Block a user