From 1d28642675093a6edfd28889384c3f288679f9a9 Mon Sep 17 00:00:00 2001 From: Nikolay Simakov Date: Thu, 30 May 2024 13:32:44 -0400 Subject: [PATCH] tutorial updates --- README.md | 6 ++-- doc/install.md | 30 ----------------- doc/readme.md | 1 + doc/utilities.Rmd | 48 --------------------------- doc/utilities.pdf | Bin 34759 -> 0 bytes doc/{ => v1.0}/slurm_sim_manual.Rmd | 0 doc/{ => v1.0}/slurm_sim_manual.html | 0 doc/{ => v1.0}/slurm_sim_manual.pdf | Bin 8 files changed, 4 insertions(+), 81 deletions(-) delete mode 100644 doc/install.md create mode 100644 doc/readme.md delete mode 100644 doc/utilities.Rmd delete mode 100644 doc/utilities.pdf rename doc/{ => v1.0}/slurm_sim_manual.Rmd (100%) rename doc/{ => v1.0}/slurm_sim_manual.html (100%) rename doc/{ => v1.0}/slurm_sim_manual.pdf (100%) diff --git a/README.md b/README.md index 54acedd..c78ba32 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,14 @@ Center for Computational Research, University at Buffalo, SUNY ## News -- 05/30/2024. The new version (v3.0) of Slurm Simulation is out. It is based on Slurm 23.02. The goal of the new version is to be sufficiently faster and reasonably accurate. See Figure 1 for comparison of Slurm simulator results with unmodified Slurm run. +- 05/30/2024. The new version (v3.0) of Slurm Simulation is out. It is based on Slurm 23.02. The goal of the new version is to be sufficiently fast and reasonably accurate. See Figure 1 for comparison of Slurm simulator results with unmodified Slurm run. - To run Slurm Simulator user docker container [nsimakov/slurm_sim:v3.0](https://hub.docker.com/repository/docker/nsimakov/slurm_sim/general). - See [tutorials](tutorials/) on how to run it. - Use [v3.0-branch](https://github.com/ubccr-slurm-simulator/slurm_sim_tools/tree/v3.0-branch) for the toolkit and [slurm-23-02-sim branch](https://github.com/ubccr-slurm-simulator/slurm_simulator/tree/slurm-23-02-sim) for Slurm simulator. Use ## Overview -Slurm is an open source job scheduling system that is widely used in many small and large-scale HPC resources, including almost all current XSEDE resources. Like all resource management programs, Slurm is highly tunable, with many parametric settings that can significantly influence job throughput, overall system utilization and job wait times. Unfortunately, in many cases it is difficult to judge how modification of these parameters will affect the overall performance of the HPC resource. For example, a given policy choice which changes a single Slurm parameter may have unintended and perhaps undesirable consequences for the overall performance of the HPC system. Also, it may take days or even weeks to see what, if any, impact certain changes have on the scheduler performance and operation. For these reasons, attempting to tune system performance or implement new policy choices through changes in the Slurm parameters on a production HPC system is not practical. In a real sense, HPC center personnel are often times operating in the dark with respect to tuning the Slurm parameter space to optimize job throughput or resource efficiency. The ability to simulate a Slurm operating environment can therefore provide a means to improve an existing production system or predict the performance of a newly planned HPC system, without impacting the production instance of Slurm +Slurm is an open source job scheduling system that is widely used in many small and large-scale HPC resources, including almost all current [ACCESS](https://access-ci.org/) resources. Like all resource management programs, Slurm is highly tunable, with many parametric settings that can significantly influence job throughput, overall system utilization and job wait times. Unfortunately, in many cases it is difficult to judge how modification of these parameters will affect the overall performance of the HPC resource. For example, a given policy choice which changes a single Slurm parameter may have unintended and perhaps undesirable consequences for the overall performance of the HPC system. Also, it may take days or even weeks to see what, if any, impact certain changes have on the scheduler performance and operation. For these reasons, attempting to tune system performance or implement new policy choices through changes in the Slurm parameters on a production HPC system is not practical. In a real sense, HPC center personnel are often times operating in the dark with respect to tuning the Slurm parameter space to optimize job throughput or resource efficiency. The ability to simulate a Slurm operating environment can therefore provide a means to improve an existing production system or predict the performance of a newly planned HPC system, without impacting the production instance of Slurm We have developed a standalone Slurm Simulator, which runs on a workstation or a single HPC node, that allows time accelerated simulation of workloads on HPC resources. Based on a modification of the actual Slurm code, the simulator can be used to study the effects of different Slurm parameters on HPC resource performance and to optimize these parameters to fit a particular need or policy, for example, maximizing throughput for a particular range of job sizes. In the current implementation, the Slurm simulator can model historic or synthetic workloads of a single cluster. For small clusters, the simulator can simulate as many as 17 days per hour depending on the job composition, and the Slurm configuration. @@ -19,7 +19,7 @@ We have developed a standalone Slurm Simulator, which runs on a workstation or a **Figure 1.** Mean over independent runs of mean over jobs wait-time. Virtual Cluster is an unmodified Slurm installation on Docker containers where each node (head and compute) is represented by a separate Docker container. -Toolkit and documentation for Slurm simulator repository: +Toolkit and documentation for Slurm simulator repository (this repository): > diff --git a/doc/install.md b/doc/install.md deleted file mode 100644 index ec0c2e4..0000000 --- a/doc/install.md +++ /dev/null @@ -1,30 +0,0 @@ -# Slurm Simulator - -`slurm_sim_tools` is a repo for slurm simulator. -It includes necessary tools and `slurm_simulator` repo as a git-submodule - -## Getting Source-Code - -```bash -# create -mkdir ~/slurm_sim_ws -cd ~/slurm_sim_ws - -# --recursive is important to get slurm_simulator copy automatically -git clone --recursive https://github.com/ubccr-slurm-simulator/slurm_sim_tools.git -``` - -If you didn't use `--recursive` then you can get slurm_simulator manually: - -```bash -git clone https://github.com/ubccr-slurm-simulator/slurm_sim_tools.git -cd slurm_sim_tool -git submodule update --init --recursive -``` - -# In source Installation - -Build cython -```bash -python setup.py build_ext --inplace -``` diff --git a/doc/readme.md b/doc/readme.md new file mode 100644 index 0000000..78fdc6a --- /dev/null +++ b/doc/readme.md @@ -0,0 +1 @@ +For Slurm Simulator usage examples, see [tutorials](../tutorials). diff --git a/doc/utilities.Rmd b/doc/utilities.Rmd deleted file mode 100644 index 8c7af47..0000000 --- a/doc/utilities.Rmd +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: "Slurm Simulator Toolkit" -output: - pdf_document: - latex_engine: xelatex -monofont: "DejaVu Sans Mono" ---- - -```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) -``` - -# Python Command Line Utilities - -## cp_slurm_conf_dir.py - Slurm etc Directory Copying and Paths Update - -cp_slurm_conf_dir.py copy Slurm configuration from one location to new and updates pathways withing that configuration to new location. -Can be used to initiate new simulation from previous configuration. - -Slurm configuration has several parameters which specified as absolute file-system path, cp_slurm_conf_dir.py allows copying of the slurm configuration with modification of such parameters to new file-system location. - -**Usage:** -```{bash,eval=FALSE} -cp_slurm_conf_dir.py [-h] -s SLURM_BIN [-o] [-v] old_etc new_slurm_topdir -``` - -**Positional Arguments:** - -old_etc -: etc directory for copied Slurm configuration - -new_slurm_topdir -: new location of slurm topdir - -**Optional Arguments** - --h, --help -: show help message and exit - --s SLURM_BIN_, --slurm-bin SLURM_BIN -: top directory of slurm binaries installation - --o, --overwrite -: overwrite existing files - --v, --verbose -: turn on verbose logging - diff --git a/doc/utilities.pdf b/doc/utilities.pdf deleted file mode 100644 index 48f1b6ebde4bf6340bf5e0cbbf6a93d9181fb153..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34759 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 diff --git a/doc/slurm_sim_manual.Rmd b/doc/v1.0/slurm_sim_manual.Rmd similarity index 100% rename from doc/slurm_sim_manual.Rmd rename to doc/v1.0/slurm_sim_manual.Rmd diff --git a/doc/slurm_sim_manual.html b/doc/v1.0/slurm_sim_manual.html similarity index 100% rename from doc/slurm_sim_manual.html rename to doc/v1.0/slurm_sim_manual.html diff --git a/doc/slurm_sim_manual.pdf b/doc/v1.0/slurm_sim_manual.pdf similarity index 100% rename from doc/slurm_sim_manual.pdf rename to doc/v1.0/slurm_sim_manual.pdf