From 505cd4c2d1022daa3d2f83bdf9e37ed9f5e99378 Mon Sep 17 00:00:00 2001 From: richelbilderbeek Date: Wed, 8 May 2024 08:38:59 +0200 Subject: [PATCH] Improve jobstats, progress #35 --- docs/software/img/jobstats_two_nodes.png | Bin 0 -> 48353 bytes docs/software/jobstats.md | 98 ++++++++++++++--------- 2 files changed, 60 insertions(+), 38 deletions(-) create mode 100644 docs/software/img/jobstats_two_nodes.png diff --git a/docs/software/img/jobstats_two_nodes.png b/docs/software/img/jobstats_two_nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..d10391b34faac4e18a1989d88948b2b804c6a5fe GIT binary patch literal 48353 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 literal 0 HcmV?d00001 diff --git a/docs/software/jobstats.md b/docs/software/jobstats.md index a42f63862..e862c0c48 100644 --- a/docs/software/jobstats.md +++ b/docs/software/jobstats.md @@ -2,66 +2,88 @@ ![jobstats plot](./img/jobstats_c_555912-l_1-k_bad_job_01.png) - `jobststats` is an UPPMAX tool to enable discovery of resource usage for jobs submitted to the [Slurm](../cluster_guides/slurm.md) job queue. -``` -jobstats --plot [options] [ -M cluster ] [ jobid [ jobid ... ] | -A project | - ] -``` - -With the -p/--plot option, a plot is produced from the jobstats for each -jobid. Plots contain one panel per booked node showing CPU (blue) and memory -usage (black) traces and include text lines indicating the job number, cluster, -end time and duration, user, project, job name, and usage flags (more on those -below). For memory usage, one or two traces are shown: a solid black line -shows instantaneous memory usage, and a dotted black line -shows overall maximum memory usage if this information is available. - -Plots are saved to the current directory with the name +The most common use is `jobstats --plot` +to see resource use in a graphical plot. -cluster-project-user-jobid.png +## `jobstats --plot` -To view the images you can either download them from UPPMAX, or use Xforwarding. The latter is the quickest way. To do this you will need to connect to UPPMAX with the -Y option +With the `--plot` (or `-p`) option, +a plot is produced showing the resource use per node +for a job that completed successfully and took longer than 5 minutes. -# connect - -To be able to see the plots generated by `jobstats`, -either use [SSH with X-forwarding](../software/ssh_x_forwarding.md) -or [login to a remote desktop](../getting_started/login.md) - -# generate the plots +There are many ways to use `--plot`, a minimal use could be: ``` -$ jobstats --plot -A b2015999 +jobstats --plot [job_id] ``` -and then you can use the image viewer eog to view the files. +for example: ``` -$ eog *.png +jobstats --plot 12345678 ``` -For this to work you will have to use a computer that has a X-server. Most linux systems have this by default, and Macs used to have it as default before they removed it during 2014. To get this feature back you have to install Xquartz. If you are using a Windows computer you can download the program MobaXterm which is a ssh client with a built-in X-server. +The produced plot will be produced in the local folder +with name +`[cluster_name]-[project_name]-[user_name]-[jobid].png`, +for example `rackham-uppmax1234-sven-876543.png`. +Use any image viewer, e.g. [eog](eog.md) to see it. -An example plot, this was named milou-b2010042-douglas-8769275.png: +Each plot shows: -![](./img/jobstats_c_555912-l_1-k_milou-b2010042-douglas-8769275.png) + * detailed information in the title. + * CPU usage in blue + * current memory usage in solid black + * overall memory usage in dotted black (if available) -For multiple-node jobs, plots have a two-column format. +For example, in this plot: -Note that not all jobs will produce jobstats files, particularly if the job was cancelled or ran for less than 5 minutes. Also, if a job booked nodes inefficiently by not using nodes it asked for, jobstats files will not be available for the booked but unused nodes. In this case the plot will contain a blank panel for each such node together with the message 'node booked but unused'. +![jobstats showing a single-node job](./img/jobstats_c_555912-l_1-k_milou-b2010042-douglas-8769275.png) -## Interpretation guidelines + * the title shows the detailed info. `milou` is the name of a former UPPMAX cluster. + * CPU usage in blue, which is around 1000%, which is the equivalent of 10 cores + being used 100% + * current memory usage in solid black, which is around 20 GB + * overall memory usage in dotted black, which is around 340 GB -When you are looking through the plots you just created you can start thinking of how you can change your bookings so that the jobs are more efficient. Usually it's just a matter of changing how many cores you book and the problem is solved. Here are some guidelines that you can follow when looking for inefficient jobs: +For jobs running on multiple nodes, plots have multiple columns: -Is the blue line (the jobs cpu usage) at the top of the graph most of the time (>80%)? If so, no need to do anything, no need to check the rest of this list. -Is the horizontal dotted black line (the jobs max memory usage) close to the top of the graph (>80%)? If so, no need to do anything, no need to check the rest of this list. -If neither of 1 or 2 is true, you should adjust the number of cores you book. Look at where the horizontal dotted black line usually is in the jobs of this type. Check how many GiB of RAM that point represents. Book enough cores, maybe 1-2 cores extra to avoid being too close to the limit if the variance is high, to keep your jobs from exceeding the allowed used RAM. You get 8GiB RAM per core you book. -If you follow these guidelines you will be using the resources efficiently. If everyone did this there would probably not even be a queue to run your jobs most of the time. Of course there are grey areas and jobs that have a very random ram requirements. In these cases it is hard to get efficient usage, but they are few and far between. +![jobstats showing a job that used two nodes](./img/jobstats_two_nodes.png) + +## Interpretation guidelines -Here are some examples of how inefficient jobs can look and what you can do to make them more efficient. +When you are looking through the plots you just created, +you can start thinking of how you can change your bookings +so that the jobs are more efficient. +Usually it's just a matter of changing how many cores you book +and the problem is solved. + +Here are some guidelines that you can follow when looking for inefficient jobs: + + * Is the blue line (the jobs cpu usage) at the top of the graph most of the time (>80%)? + If so, no need to do anything, no need to check the rest of this list. + * Is the horizontal dotted black line (the jobs max memory usage) + close to the top of the graph (>80%)? + If so, no need to do anything, no need to check the rest of this list. + +If neither of 1 or 2 is true, you should adjust the number of cores you book. +Look at where the horizontal dotted black line usually is in the jobs of this type. +Check how many GiB of RAM that point represents. +Book enough cores, maybe 1-2 cores extra to avoid being too close to the limit if the variance is high, +to keep your jobs from exceeding the allowed used RAM. +You get 8GiB RAM per core you book. + +If you follow these guidelines you will be using the resources efficiently. +If everyone did this there would probably not even be a queue +to run your jobs most of the time. +Of course there are grey areas and jobs that have a very random ram requirements. +In these cases it is hard to get efficient usage, but they are few and far between. + +Here are some examples of how inefficient jobs can look +and what you can do to make them more efficient. ### Inefficient job example 1