AI Infrastructure2026-08-16

The Real Ceiling for Local LLMs on an 8GB Mac Isn't RAM — It's Disk

A follow-up benchmark on the same 8GB Apple M1: a genuine Llama 3.2 3B measurement, then a real, unplanned finding — macOS's own swap file, not GPU memory, is what actually stopped this machine from testing a 7-8B model.

Back to Global Tech Search

AI Snapshot

Market Horizon

2026-2027

Target Sector

AI Engineering, Solo & Indie Developers, Edge AI

Llama 3.2 3B

0.0 tok/s

New, measured on this M1

Swap written

0 MB

During 3 runs, ~600 tokens

Disk before

0.0 GB

Free, cold start

Disk at floor

0.0 GB

Free, mid-benchmark

My earlier benchmark on this machine stopped at 1B parameters and cited someone else's 8B numbers, reasoning that an 8B model "needs roughly 5-6GB just to load the weights, leaving almost nothing for the OS." That was a guess, not a measurement. This post is the actual attempt to push further on the same hardware — and it found a different ceiling than the one I expected.

One more real data point: Llama 3.2 3B

Same methodology as before: Ollama v0.32.4, same fixed prompt, num_predict: 200, temperature 0, three runs, throughput read directly from eval_count / eval_duration via the generate API — no stopwatch, no estimate.

Measured Throughput, Now Three Sizes

Apple M1, 8GB unified memory — all three measured on this machine, not cited

Llama 3.2 3B (Q4_K_M) held 25.05, 25.05, and 25.22 tokens/second across the three runs — averaging ~25.1 tok/s, ollama ps confirming 100% GPU and a 2.5GB resident footprint. That continues the pattern from the first post: throughput drops faster than parameter count alone predicts (0.5B→1B roughly halved it; 1B→3B, a 3x parameter jump, only cost another ~28%), but nowhere near the cliff the earlier post cited for 8B. On raw throughput, 3B is still a genuinely usable model on this hardware tier.

What actually stopped the 8B test wasn't GPU memory

The plan was straightforward: delete the 3B model, pull an 8B Q4 model (roughly 4.7-4.9GB), and get a real number instead of a cited one. Before doing that, I checked free disk space, because this machine — the one I actually write this site on — started the session with only 5.6GB free, not the generous headroom a benchmark machine would have.

Free Disk Space, Checkpoint by Checkpoint

Measured live with `df -h` during this exact benchmark session

Pulling the 3B model alone took free space from 5.6GB to 3.9GB. Then, running just three generations — about 600 tokens total, on a model that reports a 2.5GB resident footprint — dropped it further, to 2.9GB. That second drop isn't disk used by the model; the model was already fully downloaded. I checked vm_stat before and after the three runs specifically: swapouts went from 49,600 pages to 105,128 pages (16KB each), meaning the three short generations wrote roughly 910MB to macOS's swap file in a few seconds. sysctl vm.swapusage confirmed it directly afterward: total = 2048.00M used = 1378.62M free = 669.38M.

Stopping the Ollama server afterward brought free disk back up to 4.8GB — not the full 5.6GB it started at. macOS had already grown a swap file to hold that ~1.4GB, and that allocation doesn't shrink back down until the machine reboots. Deleting the 3B model recovered less disk space than the model itself had used, because the real disk cost of running it was the swap it generated, not the weights it downloaded.

At that point, pulling a ~4.7GB 8B model would have needed the 4.8GB I had — with essentially zero margin, on a machine actively running other software, mid-swap-allocation, that I use for real work. I stopped there rather than force it. That's the honest finding of this post: the 8B model I set out to test wasn't blocked by GPU memory or by Ollama refusing to load it — it was blocked by macOS's own swap file quietly consuming the free disk space a bigger model would have needed, on a laptop that was already running low on storage before the benchmark started.

The lesson isn't "buy more RAM," it's "check disk, not just RAM"

Every local-LLM sizing guide talks about matching model size to unified memory. None of the ones I read before writing either of these two posts mentioned that on a machine already low on disk, three short generations from a mid-size model can eat close to a gigabyte of swap space — space that doesn't come back until reboot, and that a bigger model needs to even finish downloading. If you're planning to test a bigger model on constrained Apple Silicon hardware, df -h before you ollama pull matters as much as checking the model's own memory footprint.

I'm not reporting a fabricated 8B number here, and I'm not retesting the earlier post's cited 9.72 tok/s figure — that's still someone else's measurement, clearly labeled as such in the original post. What's new here is real: a genuine 3B measurement, and a genuine reason this machine's local-LLM ceiling turned out to be about storage headroom, not the number printed on the spec sheet.

Sources

  • Measured directly by the author, Aug 2026: Ollama v0.32.4, llama3.2:3b (Q4_K_M), Apple M1 / 8GB unified memory, 3 runs via the Ollama generate API, ollama ps confirming 100% GPU and 2.5GB resident size
  • Disk and swap telemetry measured directly by the author during the same session: df -h /, vm_stat, sysctl vm.swapusage, checkpointed before the pull, after the pull, after the benchmark runs, and after stopping the Ollama process

Every number in this post — throughput, disk space, and swap usage — was measured on the author's own machine during the writing of this post, not cited or estimated.

Advantages

  • Llama 3.2 3B runs at roughly 25 tokens/second on this same 8GB M1 — still fast enough to be usable, sitting right where the 0.5B→1B→3B throughput curve predicted it would
  • Ollama's own generate API gives exact eval_count/eval_duration numbers, so the throughput measurement itself needed no guessing
  • macOS's swap accounting (vm_stat, sysctl vm.swapusage) is precise enough to show, in real numbers, exactly how much disk a few hundred tokens of generation actually consumed

× Challenges

  • Three benchmark runs of a 2.5GB-resident model wrote roughly 910MB to swap in a few seconds — proof that unified memory pressure shows up as disk I/O first, not as a crash
  • This machine's free disk space fell from 5.6GB to 2.9GB over the course of one benchmark, and didn't fully recover after the model was deleted — a full ~2GB swap file stays allocated until reboot
  • The planned 7-8B test was never run: with under 3GB free and swap already committed, pulling a ~4.7GB model would have left this actual production machine with well under 1GB of headroom

Risk Assessment

A model that 'fits' by parameter-count math can still starve the machine running it — on a nearly-full 8GB Mac, the constraint that actually bites first is disk headroom for swap, not the RAM number printed on the spec sheet.

Abhishek Kushwaha

Written by Abhishek Kushwaha

Founder and writer at Global Tech Search, based in Kathmandu, Nepal. Covers AI, infrastructure, markets, and climate with sourced data and original analysis. More about the author →