Jun 6, 2025
Оптимизация управления памятью на Raspberry Pi в Linux системах
Введение
Raspberry Pi — это маломощный одноплатный компьютер с ограниченным объёмом оперативной памяти (от 512MB до 8GB). Эффективное использование памяти — критично при запуске сервисов, приложений или даже лёгких графических окружений. Эта статья — техническое руководство по всем ключевым аспектам управления памятью на Raspberry Pi: swap, ZRAM, slab, кеш, OOM killer и даже NUMA-эффекты.
1. Обзор памяти на Raspberry Pi
- Используется LPDDR2/LPDDR4 RAM, припаянная на плату.
- Устройства с 1–2GB подвержены нехватке памяти при использовании графики или веб-браузера.
- Системы с 8GB RAM (например, Raspberry Pi 4/5) могут демонстрировать NUMA-подобное поведение, особенно при высокой нагрузке на память.
2. Swap и ZRAM на Raspberry Pi
Когда оперативная память исчерпана, Linux может выгружать данные во вторичную память. Это называется подкачкой (swap).
Swap — это механизм, позволяющий временно переместить неиспользуемые страницы памяти на диск или в сжатое пространство, освобождая RAM для более активных задач.
На Raspberry Pi обычно не рекомендуется использовать swap на SD-карте: он изнашивает носитель. Вместо этого можно использовать ZRAM.
ZRAM — модуль ядра, создающий сжатое swap-пространство в оперативной памяти. Это быстрее и безопаснее для SD-карты.
Установка ZRAM
sudo apt install zram-tools
Проверьте, что он активен:
swapon --show
3. Настройки ядра: vm.* параметры
Linux имеет множество параметров, влияющих на то, как именно происходит управление памятью. Они хранятся в /proc/sys/vm/
и настраиваются через sysctl
.
Ключевые параметры:
vm.swappiness=100
— агрессивность использования swap. Снижайте до 10–30 для замедления подкачки.vm.dirty_ratio=20
— процент RAM, который может содержать “грязные” (не сброшенные) страницы.vm.dirty_background_ratio=10
— после этого порога запускается фоновая очистка dirty-страниц.vm.vfs_cache_pressure=100
— как быстро ядро будет очищать кеш inodes и dentries.
vfs_cache_pressure = 100 означает “нормальное” поведение. Увеличение приводит к более быстрой очистке кеша структуры ФС, уменьшение — к агрессивному кешированию.
Настройка временно:
sudo sysctl -w vm.swappiness=20
Для постоянной настройки: редактируйте /etc/sysctl.conf
или создайте отдельный файл в /etc/sysctl.d/
.
4. OOM Killer: когда памяти совсем не хватает
OOM Killer (Out-of-Memory Killer) — механизм ядра, который завершает “наименее ценные” процессы при критической нехватке памяти.
Для выбора процессов OOM Killer использует oom_score
и oom_score_adj
. Вы можете влиять на приоритеты:
echo -100 > /proc/$(pidof your_important_process)/oom_score_adj
Значения:
-1000
: защищённый от убийства+1000
: убить в первую очередь
Смотреть текущие значения:
cat /proc/<pid>/oom_score
5. Slab-аллокаторы и кэш структуры ФС
Linux кэширует структуру каталогов, inodes и dentries, чтобы ускорить доступ к ФС. Этот кэш называется Slab Cache.
Посмотреть его размер:
free -h
cat /proc/meminfo | grep -i slab
Этот кэш полезен, но может занимать много RAM. Снижать его агрессивно не рекомендуется, если нет критической нехватки памяти.
6. NUMA: архитектурные эффекты на 8GB Raspberry Pi
Raspberry Pi не использует полноценную NUMA, но на моделях с 8GB RAM и двумя чипами памяти могут проявляться NUMA-подобные задержки доступа к RAM.
NUMA (Non-Uniform Memory Access) — архитектура, где время доступа к разным участкам памяти может отличаться. Особенно это влияет на многопоточные задачи.
Инструменты для анализа (могут не работать на ARM, но полезны для справки):
numactl --hardware
hwloc-ls
На практике: старайтесь не запускать высоко-NUMA-чувствительные приложения (например, PostgreSQL с NUMA-aware настройками), если они не протестированы на ARM.
7. Диагностика использования памяти
htop
илиtop
— общий обзор процессов и памятиfree -m
— свободная/занятая памятьvmstat 1
— своп, грязные страницы, кэшdmesg | grep -i oom
— следы работы OOM Killer
Дополнительно:
smem
— анализ распределения памятиcat /proc/meminfo
— подробные показатели ядра
🔚 Заключение
Управление памятью на Raspberry Pi — это не только борьба за мегабайты, но и тонкая настройка поведения ядра Linux. Swap и ZRAM уменьшают износ SD-карты, vm-параметры регулируют агрессивность кеширования, а понимание slab и OOM Killer помогает избежать внезапных сбоев. На старших моделях полезно учитывать NUMA-подобные эффекты.
Грамотная конфигурация памяти — один из ключевых факторов, делающих Raspberry Pi пригодным для продвинутых задач: от серверов до автоматизации и edge-компьютинга.