Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Limits and measurements

All numbers from 2026-10-07, QEMU 11.1 with TCG on an Apple M-series host (x86-64 emulated), 2 vCPUs. KVM numbers will be considerably better.

Memory

KernelMinimum guest RAM for all probesNotes
Linux 6.1128 MBOOM below that
Asterinas144 MBthe kernel is loaded at physical 0x8000000 (128 MB); a 128 MB guest cannot hold it. 136 MB prints nothing

beam.smp RSS with the sample app, -mode interactive (default): 62 MB, 234 modules loaded. With -mode embedded: 116 MB, 742 modules. erlang:memory(total) is 38 MB versus 63 MB.

Boot time

LinuxAsterinas
kernel entry to /init1.04 s0.45 s
/init to application start, interactive mode~3.2 s~2.6 s
/init to application start, embedded mode~8 s~5.5 s

Under TCG every instruction is emulated; most of the application-start time is the JIT compiling modules on first load. The GOALS.md target of 2 s from kernel entry to prompt has not been measured with KVM yet.

Size

Shipped image 15.2 MB (9.4 MB initramfs + 5.8 MB kernel) against a 40 MB budget. Adding Phoenix costs 4 to 6 MB compressed.

Not supported

  • Erlang distribution and epmd: nothing in the image, no -name/-sname.
  • Port.open/2 with external programs, System.cmd/3, os:cmd/1: there are no programs. erl_child_setup is present, so the mechanism works; there is just nothing to execute.
  • NIFs loaded at runtime: no dlopen. OTP’s crypto and asn1 are linked statically.
  • Persistent storage: the initramfs is read-only; /tmp is RAM. ext2 data volumes can be mounted (uniapp.data=, uniapp.mounts=); no journal (periodic sync, fsync for critical writes), no online resize, one NVMe I/O queue of 32 entries on EBS.
  • Hot code upgrades: no writable release directory (and -mode interactive loads from the read-only tree anyway).
  • Terminfo: TERM=dumb, no colours in IEx.
  • IPv6: sockets and loopback work; no SLAAC/DHCPv6, so no global address without static configuration. DHCP: IPv4 only, one lease per boot (renewals are handled by the kernel client on Asterinas; /init on Linux does not renew).
  • EC2: x86-64 Nitro instances with ENA only (tested on t3.small). The ENA driver has checksum offload and up to 8 queue pairs with RSS but no LLQ or TSO; about 100 MB/s NIC to NIC with one pair. One NVMe I/O queue. No IPv6.
  • Power: the ACPI power button and S5 work (EC2 stop/reboot/terminate); other ACPI events (sleep button, lid, thermal) are ignored.
  • Asterinas only: interface configuration from the command line (the address is compiled into the kernel), binding a socket to 0.0.0.0 and reaching it over loopback, hardware other than virtio.