🛠 Survivre avec 512 Mo : zram, swap compressé et services légers
Objectifs
512 MB de DDR3 partagés avec le GPU Mali-400 : c'est le plafond du BPI-M2 Zero, et la revue de référence qui a fait tourner Geekbench 5 sur la carte a dû activer zram et le pousser vers 350 MB pour finir la mesure. zram crée un bloc de swap compressé dans la RAM : on gagne des octets sans user la microSD (le seul stockage de la carte, encore plus précieuse qu'ailleurs). Vous allez mettre en place zram proprement, alléger les services et vérifier que la carte tient une charge réelle.
Matériel
- BPI-M2 Zero sous Armbian (certaines images Armbian livrent déjà un service zram : vérifier avant d'empiler)
- Console (SSH, CON3 ou OTG)
- Aucune carte supplémentaire : tout se passe dans la RAM
Code complet
# 1) État des lieux : y a-t-il déjà un swap ? (ne pas doubler les dispositifs)
free -h && swapon --show && lsmod | grep zram
# 2) Créer un zram de 384 Mo en LZ4 et l'activer comme swap
sudo modprobe zram
echo lz4 | sudo tee /sys/block/zram0/comp_algorithm
sudo zramctl /dev/zram0 --size 384M
sudo mkswap /dev/zram0 && sudo swapon /dev/zram0
# 3) Le rendre résistant au reboot via un service systemd
sudo tee /etc/systemd/system/zram-swap.service >/dev/null <<'EOF'
[Unit]
Before=swap.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c 'modprobe zram && echo lz4 > /sys/block/zram0/comp_algorithm && zramctl /dev/zram0 --size 384M && mkswap /dev/zram0 && swapon /dev/zram0'
ExecStop=/bin/sh -c 'swapoff /dev/zram0 && zramctl /dev/zram0 --reset'
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now zram-swap.service
# 4) Alléger : désactiver ce qui est inutile sur un rôle précis
systemctl list-unit-files --state=enabled | head -30
sudo systemctl disable --now bluetooth # si le BT ne sert pas
# 5) Épreuve de feu
sudo apt install -y stress-ng && stress-ng --vm 2 --vm-bytes 200M --timeout 60s
free -h && dmesg | tail # aucun OOM-killer sur sshd
Vérification attendue
swapon --show liste /dev/zram0 (priorité élevée, pas de fichier sur la SD) ; pendant stress-ng, le swap se remplit mais la session SSH reste vivante et dmesg ne clame pas l'OOM-killer ; zramctl affiche la compression réelle (souvent 3 à 4×).
Erreurs fréquentes
- Empiler un fichier swap classique sur la microSD en plus de zram : l'usure de la carte et la latence 4k de la SD ruinent l'expérience.
- Régler zram à 512 MB : la décompression consomme elle-même de la RAM, 350 à 400 MB est l'ordre de grandeur qui a permis les gros benchmarks sur cette carte.
- Lancer un bureau complet sur 512 MB : rester sur les images server/headless.
- Oublier que le GPU mange la même barrette : après un usage vidéo, le disponible chute.
- Cacher l'OOM-killer : sshd tué en premier, puis panique silencieuse — garder vm.swappiness modéré et surveiller dmesg.
Autres tutoriels pour cette carte
- Flasher Armbian et premier boot du BPI-M2 Zero
- LED et bouton avec libgpiod sur le port 40 broches
- Wi-Fi AP6212 : le piège de l'antenne U.FL non fournie
- Console série sur USB-OTG : dépanner sans réseau ni câble UART
- Activer le bus SPI0 et piloter un petit écran TFT
- Câbler l'Ethernet 10/100 EMAC avec le carrier Zero-EPHY
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash