Migrating from Slurm#
Spur is drop-in compatible with Slurm’s command-line interface, REST API, and C FFI. Most Slurm workloads move over unchanged. This page covers what works as-is, where the configuration model differs, and the behavioral differences a Slurm user should know about before switching.
What Works Unchanged#
The following work without modification:
Commands —
sbatch,srun,salloc,squeue,sinfo,sacct,scancel,scontrol, andsacctmgr(via the symlinks described in Slurm Compatibility).Job script directives —
#SBATCHdirectives in batch scripts are parsed the same way.#PBSdirectives are also converted on a best-effort basis.Environment variables — Spur sets a
SLURM_*twin for everySPUR_*variable it injects into a job, so Slurm-aware software (MPI launchers, training frameworks) sees theSLURM_*names it expects.REST API and C FFI — the REST surface and the FFI library remain Slurm-compatible.
Configuration Differences#
Slurm’s slurm.conf and slurmdbd.conf are replaced by a single TOML file,
spur.conf (default location /etc/spur/spur.conf). Key differences:
One config file, one set of daemons. There is no
slurmdbdand noslurmrestd— accounting and the REST API are served by the controller (spurctld). Accounting storage is configured under[accounting]inspur.confrather than in a separateslurmdbd.conf.Raft-based state. Controller state is replicated through Raft and persists across restarts, so there is no
StateSaveLocationhandling to manage separately.Built-in high availability. HA is provided by Raft (openraft) and is always on — even a single controller runs a one-member cluster. There is no separate backup-controller configuration; add controllers to the Raft cluster instead.
See Configuration Reference (spur.conf) for the full spur.conf reference.
Behavioral Differences and Current Limitations#
The commands below accept Slurm syntax, but the following differences apply. Flags noted as “accepted for compatibility” parse without error but have no effect yet.
Area |
Difference |
|---|---|
Partitions |
Defined in |
|
Accepted for compatibility; result ordering is not yet applied. |
|
Accepted for compatibility; the state filter is not yet applied (all node states are returned). |
|
Accepted for compatibility; the job-id filter is not yet applied server-side. |
|
The |
|
The |
|
Per-process |
|
The |
|
Array-element syntax ( |
|
Output is always the multi-line |
Accounting and QOS Mapping#
Accounting entities map directly from Slurm:
sacctmgr add account,sacctmgr add user, andsacctmgr add qoswork as in Slurm, following the samecluster → account → user → association → QOSordering.The
[accounting] require_qossetting is the equivalent of Slurm’sAccountingStorageEnforce=qos.The
default_qossetting is the equivalent of Slurm’s fallback QOS.
See Accounting, Accounts, Users, and QOS for the accounting concept guide.
Tip
Before migrating a production workload, test the golden path on a small cluster
first: submit a job (sbatch), check the queue (squeue), cancel a job
(scancel), and review accounting history (sacct).