インストール
必要条件
- Linux または WSL
cargoを含む Rust toolchain- daemon を自動管理したい場合は
systemd --user - GPU の自動検出を使いたい場合は
nvidia-smi
リポジトリを clone する
git clone https://github.com/ymgaq/slotd.git
cd slotd
付属スクリプトによるインストール
リポジトリルートで実行します。
./scripts/install.sh
デフォルトでは次を行います。
slotdを release ビルドするslotdを~/.local/binにインストールするsbatchやsqueueなどのコマンド alias を作成する~/.local/share/slotdに runtime root を作成する~/.config/slotd/slotd.envを生成するsystemd --userservice をインストールして起動する
インストーラのオプション
| オプション | 説明 | デフォルト |
|---|---|---|
--repo-root PATH | 別のリポジトリルートからビルドする | 現在の repo |
--profile NAME | 使用する Cargo profile | release |
--install-bin-dir PATH | バイナリと alias のインストール先 | ~/.local/bin |
--runtime-root PATH | SLOTD_ROOT として使う runtime root | ~/.local/share/slotd |
--config-dir PATH | 設定ディレクトリ | ~/.config/slotd |
--systemd-user-dir PATH | user unit ディレクトリ | ~/.config/systemd/user |
--cpu-partitions VALUE | SLOTD_CPU_PARTITIONS に書く値 | cpu |
--gpu-partitions VALUE | SLOTD_GPU_PARTITIONS に書く値 | gpu |
--features VALUE | SLOTD_FEATURES に書く値 | 未設定 |
--notify-cmd VALUE | SLOTD_NOTIFY_CMD に書く値 | 未設定 |
--cgroup-base PATH | SLOTD_CGROUP_BASE に書く値 | 未設定 |
--skip-build | 既存のビルド成果物を再利用する | off |
--skip-systemd | user service をインストール・起動しない | off |
--uninstall | インストール済みの構成を削除する | off |
--purge-runtime | uninstall 時に永続データも削除する | off |
例:
./scripts/install.sh \
--features cpu,gpu \
--notify-cmd 'notify-send "slotd" "$SLOTD_JOB_ID $SLOTD_JOB_STATE"'
--cgroup-base を使う場合は、writable な cgroup v2 subtree を指定してください。
未設定のままなら CPU とメモリは予約量ベースのままです。
アンインストール
インストール済み構成を削除します。
./scripts/install.sh --uninstall
インストール済み構成と runtime state を両方削除します。
./scripts/install.sh --uninstall --purge-runtime
手動セットアップ
インストーラを使わない場合でも、直接ビルドして実行できます。
cargo build --release
SLOTD_ROOT="$HOME/.local/share/slotd" ./target/release/slotd daemon
別シェルでは同じ SLOTD_ROOT を使います。
SLOTD_ROOT="$HOME/.local/share/slotd" ./target/release/slotd sbatch --wrap 'echo hello'
Runtime Files
デフォルトの runtime root は次です。
~/.local/share/slotd
重要なファイルとディレクトリ:
run/slotd.socklib/state.dblib/jobs/<job_id>/
client と daemon は必ず同じ SLOTD_ROOT を使う必要があります。