Skip to content

Unified memory is not VRAM

knowledge base · hardware notes·reviewed 2026-08-09·suggest an edit ↗

A Strix Halo box reports 128 GB of system memory and addresses roughly 96 GB of it from the iGPU. That number is a pool, not a card, and treating it like dedicated VRAM is how loadouts end up thrashing.

GTT (Graphics Translation Table) is the portion of system memory the GPU may address. On the reference box that’s roughly 96 GB of the 128 GB installed, and it’s shared with everything else the machine is doing — page cache, ZFS ARC if you run one, the container runtime.

A model that reports 19 GB resident isn’t taking 19 GB away from a dedicated card. It’s taking it from the same pool your file cache lives in, which is why a sweep that looks stable at the first request can drift by the tenth. See Size the GTT pool for the kernel command-line parameters that set the ceiling in the first place.

  • Add the resident size of every slot you want co-resident, then add the KV cache at your target context length.
  • Leave 8–12 GB of headroom for the host. Below that, eviction starts and the slot lifecycle churns — a slot can unload mid-conversation because a larger one asked for room.
  • q8_0 KV cache roughly halves cache memory against f16 for a small decode-speed cost — see q4 vs q8 KV cache for the tradeoff.

The failure mode isn’t an out-of-memory error. It’s a slot that unloads while you’re mid-conversation, because a larger slot asked for room and the scheduler took it from the least-recently-used one. hal0 slots --memory shows what’s actually resident right now — reach for it before you reach for a bigger box.