From e0fcb88d02856a72f032dac5c2815d67ad361665 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 29 Aug 2017 13:12:28 -0600 Subject: [PATCH 1/2] allow user to adjust ulimits --- config/cesm/machines/config_machines.xml | 3 +++ config/xml_schemas/config_machines.xsd | 18 +++++++++++++ .../xml_schemas/config_machines_template.xml | 4 +++ config/xml_schemas/env_mach_specific.xsd | 19 +++++++++++++ scripts/lib/CIME/XML/env_mach_specific.py | 27 +++++++++++++++++-- 5 files changed, 69 insertions(+), 2 deletions(-) diff --git a/config/cesm/machines/config_machines.xml b/config/cesm/machines/config_machines.xml index 888b319eb1d..0960de8e9dd 100644 --- a/config/cesm/machines/config_machines.xml +++ b/config/cesm/machines/config_machines.xml @@ -292,6 +292,9 @@ --> false + + -1 + diff --git a/config/xml_schemas/config_machines.xsd b/config/xml_schemas/config_machines.xsd index 94b866b2df9..cf21d34fbd1 100644 --- a/config/xml_schemas/config_machines.xsd +++ b/config/xml_schemas/config_machines.xsd @@ -116,6 +116,7 @@ + @@ -187,11 +188,28 @@ + + + + + + + + + + + + + + + + + diff --git a/config/xml_schemas/config_machines_template.xml b/config/xml_schemas/config_machines_template.xml index 1da51e29154..a93a5391c18 100644 --- a/config/xml_schemas/config_machines_template.xml +++ b/config/xml_schemas/config_machines_template.xml @@ -143,5 +143,9 @@ 256M 16 + + + -1 + diff --git a/config/xml_schemas/env_mach_specific.xsd b/config/xml_schemas/env_mach_specific.xsd index a8a35b58181..3e85521aac1 100644 --- a/config/xml_schemas/env_mach_specific.xsd +++ b/config/xml_schemas/env_mach_specific.xsd @@ -25,6 +25,7 @@ + @@ -90,6 +91,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/scripts/lib/CIME/XML/env_mach_specific.py b/scripts/lib/CIME/XML/env_mach_specific.py index ca834bc6172..de706e2a616 100644 --- a/scripts/lib/CIME/XML/env_mach_specific.py +++ b/scripts/lib/CIME/XML/env_mach_specific.py @@ -5,7 +5,7 @@ from CIME.XML.env_base import EnvBase from CIME.utils import transform_vars, get_cime_root -import string +import string, resource logger = logging.getLogger(__name__) @@ -25,7 +25,7 @@ def __init__(self, caseroot=None, infile="env_mach_specific.xml", def populate(self, machobj): """Add entries to the file using information from a Machines object.""" - items = ("module_system", "environment_variables", "mpirun", "run_exe","run_misc_suffix") + items = ("module_system", "environment_variables", "resource_limits", "mpirun", "run_exe","run_misc_suffix") default_run_exe_node = machobj.get_node("default_run_exe") default_run_misc_suffix_node = machobj.get_node("default_run_misc_suffix") @@ -85,6 +85,24 @@ def load_env(self, compiler, debug, mpilib): if (envs_to_set is not None): self.load_envs(envs_to_set) + + self._get_resources_for_case(compiler, debug, mpilib) + + def _get_resources_for_case(self, compiler, debug, mpilib): + resource_nodes = self.get_nodes("resource_limits") + if resource_nodes is not None: + nodes = self._compute_resource_actions(resource_nodes, compiler, debug, mpilib) + for name, val in nodes: + try: + attr = getattr(resource, name) + limits = resource.getrlimit(attr) + logger.info("Setting resource.{} to {} from {}".format(name, val, limits)) + limits = (int(val), limits[1]) + resource.setrlimit(attr, limits) + except: + raise + + def load_modules(self, modules_to_load): module_system = self.get_module_system_type() if (module_system == "module"): @@ -163,6 +181,11 @@ def _compute_module_actions(self, module_nodes, compiler, debug, mpilib): def _compute_env_actions(self, env_nodes, compiler, debug, mpilib): return self._compute_actions(env_nodes, "env", compiler, debug, mpilib) + def _compute_resource_actions(self, resource_nodes, compiler, debug, mpilib): + return self._compute_actions(resource_nodes, "resource", compiler, debug, mpilib) + + + def _compute_actions(self, nodes, child_tag, compiler, debug, mpilib): result = [] # list of tuples ("name", "argument") From 70df1e75b9aaaa1808ad1530582534977995f437 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 29 Aug 2017 15:16:11 -0600 Subject: [PATCH 2/2] remove try except code --- scripts/lib/CIME/XML/env_mach_specific.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/scripts/lib/CIME/XML/env_mach_specific.py b/scripts/lib/CIME/XML/env_mach_specific.py index de706e2a616..84f3abc092a 100644 --- a/scripts/lib/CIME/XML/env_mach_specific.py +++ b/scripts/lib/CIME/XML/env_mach_specific.py @@ -93,15 +93,11 @@ def _get_resources_for_case(self, compiler, debug, mpilib): if resource_nodes is not None: nodes = self._compute_resource_actions(resource_nodes, compiler, debug, mpilib) for name, val in nodes: - try: - attr = getattr(resource, name) - limits = resource.getrlimit(attr) - logger.info("Setting resource.{} to {} from {}".format(name, val, limits)) - limits = (int(val), limits[1]) - resource.setrlimit(attr, limits) - except: - raise - + attr = getattr(resource, name) + limits = resource.getrlimit(attr) + logger.info("Setting resource.{} to {} from {}".format(name, val, limits)) + limits = (int(val), limits[1]) + resource.setrlimit(attr, limits) def load_modules(self, modules_to_load): module_system = self.get_module_system_type()