This is an automated email from the ASF dual-hosted git repository. potiuk pushed a commit to branch runs-on-drop-evicted-families in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 47b42392a7e06a6e96fc90505296f003dd70a1f7 Author: Jarek Potiuk <[email protected]> AuthorDate: Fri Oct 30 20:26:26 2026 +0100 Keep RunsOn runners off the Spot pools reclaimed most often From 2026-10-25 to 2026-10-30 about half of the Spot interruptions of RunsOn runners in us-east-2 came from a few instance families that made up only an eighth of the Spot launches: m5 (and the m5n, m5d, m5ad, m5dn pools its prefix pulls in), m6a, and the r6a, r7a and r6i pools of the in-memory runners were reclaimed 13-54% of the time, the other families 1-4%. Each interruption reruns the whole job. AWS Spot Advisor rates r7i above 20% in the region too. Generated-by: Claude Opus 5 --- dev/breeze/src/airflow_breeze/global_constants.py | 7 +++++-- dev/breeze/tests/test_selective_checks.py | 5 ++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py index d61cf9b9bec..12c449068f2 100644 --- a/dev/breeze/src/airflow_breeze/global_constants.py +++ b/dev/breeze/src/airflow_breeze/global_constants.py @@ -43,8 +43,11 @@ PUBLIC_ARM_RUNNERS = '["ubuntu-22.04-arm"]' # `spot=co` (capacity-optimized) takes Spot from the pools least likely to run out or be reclaimed # instead of RunsOn's default price-capacity-optimized: a capacity miss or an interruption sends the # runner to on-demand (and reruns the whole job), which costs more than the higher Spot price. +# A family matches as a prefix (`m5` also takes m5n, m5d, ...). Left out because their us-east-2 Spot +# runners were reclaimed far more often than the rest (13-54% vs. 1-4%, Oct 2026): m5, m5a, m6a and, +# for the in-memory runners, r7a, r6a, r6i; r7i, which AWS Spot Advisor rates >20% there, too. RUNS_ON_AMD_RUNNER_TEMPLATE = ( - "runs-on={run_id}/family=m8a+m8i+m7a+m7i+m6a+m6i+m5a+m5/image=ubuntu22-full-x64/volume=150gb/spot=co" + "runs-on={run_id}/family=m8a+m8i+m7a+m7i+m6i/image=ubuntu22-full-x64/volume=150gb/spot=co" "/cpu={{0}}/ram={{1}}" ) RUNS_ON_ARM_RUNNER_TEMPLATE = ( @@ -54,7 +57,7 @@ RUNS_ON_ARM_RUNNER_TEMPLATE = ( # databases wait on disk syncs. The RAM disk is capped at 100% of RAM before RunsOn v3.5.0, so these jobs # ask for memory headroom and also accept the memory-optimized r-family. RUNS_ON_AMD_IN_MEMORY_RUNNER_TEMPLATE = ( - "runs-on={run_id}/family=m8a+m8i+m7a+m7i+m6a+m6i+m5a+m5+r8i+r7a+r7i+r6a+r6i" + "runs-on={run_id}/family=m8a+m8i+m7a+m7i+m6i+r8i" "/image=ubuntu22-full-x64/volume=150gb/spot=co" "/cpu={{0}}/ram={{1}}/extras=tmpfs" ) diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py index fd36a7c4975..47d3913f8b9 100644 --- a/dev/breeze/tests/test_selective_checks.py +++ b/dev/breeze/tests/test_selective_checks.py @@ -5198,14 +5198,13 @@ def test_providers_with_test_side_effects_are_shared_process_providers(): RUNS_ON_AMD = ( - '["runs-on=42/family=m8a+m8i+m7a+m7i+m6a+m6i+m5a+m5/image=ubuntu22-full-x64/volume=150gb/spot=co' - '/cpu={0}/ram={1}"]' + '["runs-on=42/family=m8a+m8i+m7a+m7i+m6i/image=ubuntu22-full-x64/volume=150gb/spot=co/cpu={0}/ram={1}"]' ) RUNS_ON_ARM = ( '["runs-on=42/family=m8g+m7g+m6g/image=ubuntu22-full-arm64/volume=150gb/spot=co/cpu={0}/ram={1}"]' ) RUNS_ON_AMD_IN_MEMORY = ( - '["runs-on=42/family=m8a+m8i+m7a+m7i+m6a+m6i+m5a+m5+r8i+r7a+r7i+r6a+r6i' + '["runs-on=42/family=m8a+m8i+m7a+m7i+m6i+r8i' "/image=ubuntu22-full-x64/volume=150gb/spot=co" '/cpu={0}/ram={1}/extras=tmpfs"]' )
