|
13 | 13 | import reframe.utility.osext as osext |
14 | 14 | import reframe.utility.sanity as sn |
15 | 15 |
|
16 | | -sys.path.append(str(pathlib.Path(__file__).parent / 'mixins')) |
| 16 | +sys.path.append(str(pathlib.Path(__file__).parent.parent.parent / 'mixins')) |
17 | 17 | from uenv_slurm_mpi_options import UenvSlurmMpiOptionsMixin # noqa: E402 |
18 | 18 |
|
19 | 19 |
|
@@ -197,7 +197,8 @@ def assert_found_exceeded_memory(self): |
197 | 197 |
|
198 | 198 |
|
199 | 199 | @rfm.simple_test |
200 | | -class MemoryOverconsumptionCheckMPI(SlurmCompiledBaseCheck, UenvSlurmMpiOptionsMixin): |
| 200 | +class MemoryOverconsumptionCheckMPI(SlurmCompiledBaseCheck, |
| 201 | + UenvSlurmMpiOptionsMixin): |
201 | 202 | # TODO: maintainers = ['@jgphpc', '@ekouts'] |
202 | 203 | descr = 'Tests for max allocatable memory' |
203 | 204 | valid_systems = ['+remote'] |
@@ -550,6 +551,28 @@ def validate(self): |
550 | 551 | return sn.assert_not_found(r'\bisolcpus=', self.stdout) |
551 | 552 |
|
552 | 553 |
|
| 554 | +@rfm.simple_test |
| 555 | +class SlurmNoUvmPerfAccessCounterMigration(rfm.RunOnlyRegressionTest): |
| 556 | + valid_systems = ['+remote +scontrol +nvgpu'] |
| 557 | + valid_prog_environs = ['builtin'] |
| 558 | + maintainers = ['msimberg', 'SSA'] |
| 559 | + descr = ''' |
| 560 | + Check that uvm_perf_access_counter_mimc_migration_enable is set to 0 |
| 561 | + as it is buggy in older drivers. |
| 562 | + ''' |
| 563 | + time_limit = '1m' |
| 564 | + num_tasks_per_node = 1 |
| 565 | + sourcesdir = None |
| 566 | + executable = 'cat' |
| 567 | + executable_opts = [('/sys/module/nvidia_uvm/parameters/' |
| 568 | + 'uvm_perf_access_counter_mimc_migration_enable')] |
| 569 | + tags = {'production', 'maintenance', 'slurm'} |
| 570 | + |
| 571 | + @sanity_function |
| 572 | + def validate(self): |
| 573 | + return sn.assert_found(r'0', self.stdout) |
| 574 | + |
| 575 | + |
553 | 576 | @rfm.simple_test |
554 | 577 | class SlurmGPUGresTest(SlurmSimpleBaseCheck): |
555 | 578 | descr = ''' |
@@ -585,13 +608,13 @@ def assert_gres_valid(self): |
585 | 608 | ) |
586 | 609 | good_nodes = sn.evaluate( |
587 | 610 | sn.extractall(rf'{node_re}.*{part_re}.*{gres_re}', |
588 | | - self.stdout, 1) |
| 611 | + self.stdout, 1) |
589 | 612 | ) |
590 | 613 | bad_nodes = ','.join(sorted(set(all_nodes) - set(good_nodes))) |
591 | 614 |
|
592 | 615 | return sn.assert_true( |
593 | 616 | len(bad_nodes) == 0, |
594 | 617 | msg=(f'{len(good_nodes)}/{len(all_nodes)} of ' |
595 | | - f'{partition_name} nodes satisfy {gres_re}. Bad nodes: ' |
596 | | - f'{bad_nodes}') |
| 618 | + f'{partition_name} nodes satisfy {gres_re}. Bad nodes: ' |
| 619 | + f'{bad_nodes}') |
597 | 620 | ) |
0 commit comments