blob: 577d1fd176c567e0e3361d6300bbef3c4524e47e [file] [edit]
############################################################################
# Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
############################################################################
"""Overcommit with cpus-per-task across a topology-configured cluster.
Ticket 25536: -cN sets tres_per_task=cpu=N. The topology node-evaluation
path (eval_nodes) must keep the overcommit placement for a cpu-only
tres_per_task so the reported multi-node -N8 -n272 -c1 -O request runs
instead of remaining pending with Reason Resources.
"""
import pytest
import atf
@pytest.fixture(scope="module", autouse=True)
def setup():
atf.require_version(
(26, 11),
"sbin/slurmctld",
reason="Ticket 25536: overcommit with cpus-per-task placement fix",
)
atf.require_nodes(8, [("CPUs", 1)])
atf.require_config_parameter("SelectType", "select/cons_tres")
atf.require_config_parameter("SelectTypeParameters", "CR_CPU")
atf.require_config_parameter("TopologyPlugin", "topology/block")
topology_config = """
BlockName=b1 Nodes=node[1-4]
BlockName=b2 Nodes=node[5-8]
BlockSizes=4,8
"""
atf.require_config_file("topology.conf", topology_config)
atf.require_slurm_running()
def test_overcommit_cpus_per_task_multinode():
"""Verify -N8 -n272 -c1 --overcommit runs across a topology cluster.
With one CPU per node the 272 tasks cannot fit unless overcommit
relaxes the per-node CPU requirement in the topology eval_nodes path.
"""
job_id = atf.submit_job_sbatch(
"-N8 -n272 -c1 -O -t1 --wrap '/bin/true'", fatal=True
)
atf.wait_for_job_state(job_id, "COMPLETED", fatal=True)