blob: dda5af8a6fad16808afcf7f07e70e5af0da4c290 [file] [log] [blame] [edit]
/*****************************************************************************\
* slurm_opt.h - definitions for salloc/sbatch/srun option processing
*****************************************************************************
* Copyright (C) 2002-2007 The Regents of the University of California.
* Copyright (C) 2008-2010 Lawrence Livermore National Security.
* Portions Copyright (C) 2010-2017 SchedMD LLC <https://www.schedmd.com>
* Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
* Written by Mark Grondona <grondona1@llnl.gov>,
* Christopher J. Morrone <morrone2@llnl.gov>, et. al.
* CODE-OCEC-09-009. All rights reserved.
*
* This file is part of Slurm, a resource management program.
* For details, see <https://slurm.schedmd.com/>.
* Please also read the included file: DISCLAIMER.
*
* Slurm is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* In addition, as a special exception, the copyright holders give permission
* to link the code of portions of this program with the OpenSSL library under
* certain conditions as described in each individual source file, and
* distribute linked combinations including the two. You must obey the GNU
* General Public License in all respects for all of the code used other than
* OpenSSL. If you modify file(s) with this exception, you may extend this
* exception to your version of the file(s), but you are not obligated to do
* so. If you do not wish to do so, delete this exception statement from your
* version. If you delete this exception statement from all source files in
* the program, then also delete it here.
*
* Slurm is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along
* with Slurm; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\*****************************************************************************/
#ifndef _SLURM_OPT_H_
#define _SLURM_OPT_H_
#include <inttypes.h>
#include <stdbool.h>
#include <time.h>
#include "config.h"
#include "slurm/slurm.h"
#ifndef SYSTEM_DIMENSIONS
#define SYSTEM_DIMENSIONS 1
#endif
#define DEFAULT_IMMEDIATE 1
#define DEFAULT_BELL_DELAY 10
typedef enum {BELL_NEVER, BELL_AFTER_DELAY, BELL_ALWAYS} bell_flag_t;
/*
* options only processed by salloc
*/
typedef struct salloc_opt {
bell_flag_t bell; /* --bell, --no-bell */
bool default_job_name; /* set if no command or job name specified */
int kill_command_signal; /* --kill-command */
bool kill_command_signal_set;
bool no_shell; /* --no-shell */
uint16_t wait_all_nodes; /* --wait-nodes-ready=val */
} salloc_opt_t;
/*
* options only processed by sbatch
*/
typedef struct sbatch_opt {
/* batch script argv and argc, if provided on the command line */
int script_argc;
char **script_argv;
char *ifname; /* input file name */
char *ofname; /* output file name */
char *efname; /* error file name */
char *array_inx; /* --array */
char *batch_features; /* --batch */
char *burst_buffer_file; /* --bbf */
int ckpt_interval; /* --checkpoint (int minutes) */
char *ckpt_interval_str; /* --checkpoint */
char *ckpt_dir; /* --checkpoint-dir */
char *export_env; /* --export */
char *export_file; /* --export-file=file */
int minsockets; /* --minsockets=n */
int mincores; /* --mincores=n */
int minthreads; /* --minthreads=n */
bool parsable; /* --parsable */
char *propagate; /* --propagate[=RLIMIT_CORE,...]*/
uint8_t open_mode; /* --open-mode */
int requeue; /* --requeue and --no-requeue */
bool test_only; /* --test-only */
int umask; /* job umask for PBS */
bool wait; /* --wait */
uint16_t wait_all_nodes; /* --wait-nodes-ready=val */
char *wrap;
} sbatch_opt_t;
/*
* options only processed by srun
*/
typedef struct srun_opt {
int argc; /* length of argv array */
char **argv; /* left over on command line */
char *ifname; /* input file name */
char *ofname; /* output file name */
char *efname; /* error file name */
uint16_t accel_bind_type; /* --accel-bind */
bool allocate; /* --allocate */
char *alloc_nodelist; /* grabbed from the environment */
char *bcast_file; /* --bcast, copy executable to compute nodes */
bool bcast_flag; /* --bcast, copy executable to compute nodes */
int ckpt_interval; /* --checkpoint, in minutes */
char *ckpt_interval_str; /* --checkpoint */
char *ckpt_dir; /* --checkpoint-dir */
char *cmd_name; /* name of command to execute */
uint16_t compress; /* --compress (for --bcast option) */
bool core_spec_set; /* core_spec explicitly set */
char *cpu_bind; /* binding map for map/mask_cpu */
cpu_bind_type_t cpu_bind_type; /* --cpu-bind */
bool cpu_bind_type_set; /* --cpu-bind explicitly set */
bool cwd_set; /* --cwd explicitly set */
bool debugger_test; /* --debugger-test */
bool disable_status; /* --disable-status */
char *epilog; /* --epilog */
bool exclusive; /* --exclusive */
char *export_env; /* --export */
char *hostfile; /* location of hostfile if there is one */
bool job_name_set_cmd; /* true if job_name set by cmd line option */
bool job_name_set_env; /* true if job_name set by env var */
int32_t kill_bad_exit; /* --kill-on-bad-exit */
bool labelio; /* --label-output */
bool launch_cmd; /* --launch_cmd */
char *launcher_opts; /* --launcher-opts commands to be sent
* to the external launcher command if
* not Slurm */
int32_t max_threads; /* --threads */
int max_wait; /* --wait */
int msg_timeout; /* undocumented */
bool multi_prog; /* multiple programs to execute */
int32_t multi_prog_cmds; /* number of commands in multi prog file */
bool network_set_env; /* true if network set by env var */
bool no_alloc; /* --no-allocate */
bool nodes_set_env; /* true if nodes set via SLURM_NNODES */
bool nodes_set_opt; /* true if nodes explicitly set using
command line option */
bool noshell; /* --no-shell */
uint8_t open_mode; /* --open-mode=append|truncate */
char *pack_group; /* --pack-group */
bitstr_t *pack_grp_bits; /* --pack-group in bitmap form */
int pack_step_cnt; /* Total count of pack groups to launch */
bool parallel_debug; /* srun controlled by debugger */
bool preserve_env; /* --preserve-env */
char *prolog; /* --prolog */
char *propagate; /* --propagate[=RLIMIT_CORE,...]*/
bool pty; /* --pty */
bool quit_on_intr; /* --quit-on-interrupt */
int relative; /* --relative */
bool relative_set;
char *restart_dir; /* --restart */
int resv_port_cnt; /* --resv_ports */
int slurmd_debug; /* --slurmd-debug */
char *task_epilog; /* --task-epilog */
char *task_prolog; /* --task-prolog */
bool test_exec; /* test_exec set */
bool test_only; /* --test-only */
bool unbuffered; /* --unbuffered */
bool user_managed_io; /* 0 for "normal" IO, */
/* 1 for "user manged" IO */
} srun_opt_t;
typedef struct slurm_options {
salloc_opt_t *salloc_opt;
sbatch_opt_t *sbatch_opt;
srun_opt_t *srun_opt;
char *progname; /* argv[0] of this program or */
char *burst_buffer; /* --bb */
char *clusters; /* cluster to run this on. */
char *user; /* local username */
uid_t uid; /* local uid */
gid_t gid; /* local gid */
uid_t euid; /* effective user --uid=user */
gid_t egid; /* effective group --gid=group */
char *cwd; /* current working directory */
int ntasks; /* --ntasks */
bool ntasks_set; /* ntasks explicitly set */
int cpus_per_task; /* --cpus-per-task=n */
bool cpus_set; /* cpus_per_task explicitly set */
int min_nodes; /* --nodes=n */
int max_nodes; /* --nodes=x-n */
bool nodes_set; /* nodes explicitly set */
int sockets_per_node; /* --sockets-per-node=n */
int cores_per_socket; /* --cores-per-socket=n */
uint32_t job_flags; /* --kill_invalid_dep, --gres-flags */
int threads_per_core; /* --threads-per-core=n */
bool threads_per_core_set; /* --threads-per-core explicitly set */
int ntasks_per_node; /* --ntasks-per-node=n */
int ntasks_per_socket; /* --ntasks-per-socket=n */
int ntasks_per_core; /* --ntasks-per-core=n */
bool ntasks_per_core_set; /* ntasks-per-core explicitly set */
char *hint_env; /* SLURM_HINT env var setting */
bool hint_set; /* --hint set explicitly set */
mem_bind_type_t mem_bind_type; /* --mem-bind= */
char *mem_bind; /* binding map for map/mask_mem */
bool extra_set; /* extra node info explicitly set */
int time_limit; /* --time, in minutes */
char *time_limit_str; /* --time */
int time_min; /* --min-time, in minutes */
char *time_min_str; /* --min-time */
char *partition; /* --partition */
uint32_t profile; /* --profile=[all | none] */
enum task_dist_states distribution;
/* --distribution */
uint32_t plane_size; /* lllp distribution -> plane_size for
* when -m plane=<# of lllp per
* plane> */
char *job_name; /* --job-name */
uint32_t jobid; /* --jobid */
bool jobid_set; /* jobid explicitly set */
char *mpi_type; /* --mpi=type */
char *dependency; /* --dependency */
int nice; /* --nice */
uint32_t priority; /* --priority */
char *account; /* --account */
char *comment; /* --comment */
char *qos; /* --qos */
int immediate; /* --immediate */
uint16_t warn_flags; /* --signal=flags:<int>@<time> */
uint16_t warn_signal; /* --signal=flags:<int>@<time> */
uint16_t warn_time; /* --signal=flags:<int>@<time> */
bool hold; /* --hold */
bool no_kill; /* --no-kill */
char *acctg_freq; /* --acctg-freq=<type1>=<freq1>,... */
bool overcommit; /* --overcommit */
uint16_t shared; /* --share */
char *licenses; /* --licenses */
char *network; /* --network */
int quiet;
int verbose;
/* constraint options */
int cpus_per_gpu; /* --cpus-per-gpu */
char *gpus; /* --gpus */
char *gpu_bind; /* --gpu_bind */
char *gpu_freq; /* --gpu_freq */
char *gpus_per_node; /* --gpus_per_node */
char *gpus_per_socket; /* --gpus_per_socket */
char *gpus_per_task; /* --gpus_per_task */
int pn_min_cpus; /* --mincpus */
int64_t mem_per_cpu; /* --mem-per-cpu */
int64_t mem_per_gpu; /* --mem-per-gpu */
int64_t pn_min_memory; /* --mem */
long pn_min_tmp_disk; /* --tmp */
char *constraints; /* --constraints */
char *c_constraints; /* --cluster-constraints */
char *gres; /* --gres */
bool contiguous; /* --contiguous */
char *nodelist; /* --nodelist=node1,node2,... */
char *exc_nodes; /* --exclude=node1,node2,... */
bool reboot; /* --reboot */
time_t begin; /* --begin */
char *extra; /* unused */
uint16_t mail_type; /* --mail-type */
char *mail_user; /* --mail-user */
int get_user_env_time; /* --get-user-env[=timeout] */
int get_user_env_mode; /* --get-user-env=[S|L] */
char *wckey; /* workload characterization key */
char *reservation; /* --reservation */
int req_switch; /* min number of switches */
int wait4switch; /* max time to wait for min switches */
char **spank_job_env; /* SPANK controlled environment for job
* Prolog and Epilog */
int spank_job_env_size; /* size of spank_job_env */
int core_spec; /* --core-spec */
uint32_t cpu_freq_min; /* Minimum cpu frequency */
uint32_t cpu_freq_max; /* Maximum cpu frequency */
uint32_t cpu_freq_gov; /* cpu frequency governor */
uint8_t power_flags; /* Power management options */
char *mcs_label; /* mcs label */
time_t deadline; /* ---deadline */
uint32_t delay_boot; /* --delay-boot */
char *tres_bind; /* derived from gpu_bind */
char *tres_freq; /* derived from gpu_freq */
uint16_t x11; /* --x11 */
char *x11_magic_cookie; /* cookie retrieved from xauth */
/* no x11_target_host here, alloc_host will be equivalent */
uint16_t x11_target_port; /* target display TCP port on localhost */
} slurm_opt_t;
#endif /* _SLURM_OPT_H_ */