Skip to content
Lu-Fi edited this page Oct 6, 2026 · 1 revision

Memory: rmem, ispmem and the MMAP pool

The three pools

Pool Owner Set by Used for
rmem OpenIMP (/dev/rmem) kernel command line rmem=<n>M@<base> from the boot loader frame pools, encoder reference and bitstream buffers, JPEG buffers
ispmem open-tx-isp kernel command line ispmem=<n>M@<base> temporal noise (temper), WDR, raw snapshot buffers
V4L2 MMAP pool (T10/T20) open-tx-isp module parameter isp_mmap_pool_kb frame buffers for V4L2 MMAP capture; USERPTR (used by OpenIMP) needs no pool

Linux keeps whatever is not reserved. Reserving too much starves the system (an out-of-memory kill, then a watchdog reset); reserving too little makes features fail or switch off.

Reading the numbers

OpenIMP logs the rmem peak at stream start and on every new peak (peak versus total reserved). Example from a T21 test camera: a peak of 18.4 MB of 23.5 MB. Watch the peak with your real stream set (main, sub, JPEG snapshots, IVS), not just one stream.

Shortfall log lines and what to do

Log (component) Meaning Action
raise rmem by at least M KB (suggest rmem=<n>M) (OpenIMP, on allocation failure) rmem is too small for the streams you opened Raise rmem on the kernel command line by at least M KB, or run fewer or smaller streams.
rmem peak line close to the total (OpenIMP) no headroom Add headroom before adding streams.
set ispmem >= N KB (T10/T20 driver) temper or WDR would be switched off because ispmem is too small Raise ispmem, or accept that these blocks stay off.
set isp_mmap_pool_kb=<n> with have/need/missing (T10/T20 driver) the MMAP pool is smaller than needed for the requested capture mode Raise the parameter, or use USERPTR capture (OpenIMP does).
no N KiB MMAP frame pool (dma_alloc_coherent failed); USERPTR only (driver) the 8 MiB pool could not be allocated on a small or fragmented heap (typical for T10) Normal for OpenIMP. The pool is off by default (isp_mmap_pool_kb=0) since 2026-10-04; the line only appears if a non-zero pool was set explicitly, so remove that setting.
a startup warning that pools plus fixed buffers exceed video memory (OpenIMP) the stream set you asked for cannot fit Reduce streams or resolution, or raise rmem.

The driver logs each shortfall once, with the numbers (have/need/missing) and a concrete value.

Sizing hints from the test campaign

  • T20/T10: with isp_mmap_pool_kb=0, free RAM with streams running rose by about 8 MB (T20 from 46.7 to 55 MB, T10 from 1.9 to about 9.7 MB).
  • T20/T10: JPEG bitstream buffer is 1 MiB (saves 328 KiB). Smaller ispmem values (T20 11 to 8 MB, T10 8 to 4 MB) are an idea that needs image checks first.
  • T21/T23: reference sharing saves about 1.5 MB. T23: JPEG shares the H.264 bitstream area (-1.44 MB).
  • T41: rmem=30M left too little for Linux with three parallel streams plus snapshots (OOM, watchdog reset); about 24 MB worked in tests, 26 MB is used in the current test image. Changing the kernel command line on T41 may require an environment-partition image, see Troubleshooting.
  • Do not allocate encoder buffers at channel creation: measured to raise the peak.

How to change the sizes

rmem and ispmem are part of the kernel command line, which the boot loader takes from its environment (or from a built-in default). Change the value in the image/boot configuration and reboot; see the thingino documentation of your camera. Never change the sizes without checking the peak afterwards.

Clone this wiki locally