shm
bwa-mem3 shm stages an FM-index into POSIX shared memory so that subsequent
bwa-mem3 mem invocations on the same machine attach to the in-memory segment
instead of re-reading the index files from disk. For workloads that align many
small samples back-to-back against the same reference — such as clinical
panels or amplicon sequencing — this removes the dominant I/O bottleneck.
shm also lists and destroys staged segments.
Synopsis
Usage: bwa-mem3 shm [-d|-l|--help] [--meth] [idxbase]
Options:
-d destroy all indices in shared memory (matches bwa v1 behavior)
-l list names of indices in shared memory
--meth stage a `bwa-mem3 index --meth` index — auto-appends
`.bwameth.c2t` to <idxbase>, mirroring `mem --meth`
-h --help print this help and exit
Stage with no flags: `bwa-mem3 shm <idxbase>` loads the index into
POSIX shared memory; subsequent `bwa-mem3 mem <idxbase> ...` runs
auto-attach instead of re-reading from disk. For meth indices, pass
the same plain `<idxbase>` to all three commands plus `--meth` on
`index`, `shm`, and `mem` (the c2t suffix is auto-appended).
Footgun: if you re-build the index, run `bwa-mem3 shm -d` first.
There is no staleness check -- a stale segment will silently mis-align.
macOS: POSIX shm has implementation-defined per-segment caps; large
indices may simply fail to stage. Prefer Linux for production.
Linux: /dev/shm defaults to ~50% of RAM on bare metal; in containers
it is often much smaller and may need raising via --shm-size
(Docker) or an emptyDir tmpfs (Kubernetes).
Common usage
Stage a standard index, align two samples, then release the segment:
bwa-mem3 shm ref.fa
bwa-mem3 mem -t 16 ref.fa sample1_R1.fq sample1_R2.fq > sample1.sam
bwa-mem3 mem -t 16 ref.fa sample2_R1.fq sample2_R2.fq > sample2.sam
bwa-mem3 shm -d
Stage a methylation index and align:
bwa-mem3 shm --meth ref.fa
bwa-mem3 mem --meth -t 16 ref.fa R1.fq R2.fq | samtools sort -o out.bam -
bwa-mem3 shm -d
List all currently staged segments:
bwa-mem3 shm -l
Flag reference
(no flags) <idxbase> — stage an index
Loads all index files for <idxbase> into a POSIX shared-memory segment.
After staging, any bwa-mem3 mem <idxbase> ... on the same machine
auto-attaches and reads from memory rather than disk.
-d — destroy all segments
Removes every bwa-mem3 shared-memory segment on the machine. This is the correct clean-up command after a batch job and the required step before re-building the index (see the footgun warning below).
-l — list staged indices
Prints the names of all currently staged segments. Useful to confirm that staging succeeded before launching alignment jobs.
--meth — stage a methylation index
Auto-appends .bwameth.c2t to <idxbase> before staging, mirroring the
behavior of bwa-mem3 index --meth and bwa-mem3 mem --meth. Pass the
same plain <idxbase> to all three commands; the c2t suffix is handled
transparently.
Notes / Gotchas
Warning — No staleness check — always destroy before re-indexing
There is no staleness check. If you re-run
bwa-mem3 index ref.faafter staging, the on-disk index files will not match the in-memory segment, butbwa-mem3 memwill still attach to the stale segment and silently produce incorrect alignments. Always runbwa-mem3 shm -dbefore re-indexing.Note — Platform limits
macOS: POSIX shared memory has implementation-defined per-segment size caps. Staging a full hg38 index (~28 GB) may fail silently or with a cryptic error. Prefer Linux for production use with large references.
Linux containers:
/dev/shmtypically defaults to ~50% of physical RAM on bare metal but is often much smaller inside Docker containers or Kubernetes pods. Raise the limit with--shm-size(Docker) or anemptyDirtmpfs volume with an explicit size (Kubernetes) before attempting to stage a large index.
See also: Getting Started — Quick start: shared-memory index · CLI Reference — index · CLI Reference — mem · Best Practices — Multi-sample workflows · Best Practices — Anti-patterns