👋 Когда "достаточно" памяти никогда не бывает достаточно
Привет, цифровые кочевники! На связи команда T.E.X.H.O.
Сегодня у нас на операционном столе тема, которая делит IT-сообщество на два непримиримых лагеря. Одни кричат: "Отключай всё, память должна быть сырой и быстрой!", другие крутят пальцем у виска: "Ты что, хочешь убить свой SSD своппингом?". Речь пойдет о Memory Compression (сжатии памяти).
На дворе декабрь 2025 года. Вышла Windows 11 25H2 с обновленным Диспетчером задач, который теперь показывает "CPU Utility" вместо старого доброго usage, окончательно запутав пользователей. В мире Linux стабильным стало ядро 6.17, где механизм MGLRU (Multi-Gen LRU) наконец-то начал работать так, как задумывали в Google, перевернув представление о том, как нужно "выкидывать" данные из RAM.
Почему эта статья получилась такой большой? Потому что в интернете полно советов уровня "нажми эту кнопку", но никто не объясняет, какой ценой это работает. Мы разберем физику процесса на уровне атомов кремния, залезем в недокументированные ветки реестра Windows и параметры ядра Linux, о которых молчат мануалы.
Мы не просто "покрутим настройки". Мы настроим агрессивность сжатия — тот самый невидимый параметр, который определяет, будет ли ваша система летать как истребитель или задыхаться, как курильщик на марафоне.
🔬 Глубокая механика: Что происходит в наносекундах?
Чтобы понять, зачем нам регулировать агрессивность, нужно представить путь данных.
Иерархия боли (Latency Hierarchy)
- Регистры CPU: Доступ мгновенный (менее 1 нс). Это "мысли" процессора.
- Кэш L1/L2/L3: Очень быстро (1-10 нс). Это "краткосрочная память".
- Оперативная память (RAM): Быстро (50-100 нс). Ваш рабочий стол.
- Сжатая память (ZRAM/Compression Store):
- Запись (сжатие): Требует тактов CPU. Задержка зависит от алгоритма (LZ4 ~микросекунды, ZSTD ~чуть дольше).
- Чтение (разжатие): Вызывает Soft Page Fault. Процессор должен бросить всё, схватить сжатый кусок, разжать его в новую область памяти и только потом отдать программе. Это добавляет задержку.
- Накопитель (SSD/NVMe): Медленно (10,000+ нс). Даже самые быстрые Gen5 SSD — это черепахи по сравнению с RAM.
- HDD: Вечность (миллионы нс).
В чем суть "Агрессивности"?
Агрессивность — это порог, при котором менеджер памяти (Memory Manager) принимает решение: "Этот кусок данных не использовался уже 30 секунд. Сжать его или оставить?"
- Высокая агрессивность: Система параноидально сжимает всё, что не активно прямо сейчас.
- Плюс: У вас всегда много свободной "физической" памяти. Диск почти не используется.
- Минус: Огромные накладные расходы CPU. Микрофризы (stuttering) в играх и GUI, когда вы переключаетесь между окнами, потому что окну нужно время на "разжатие".
- Низкая агрессивность: Система держит данные в "сыром" виде до последнего.
- Плюс: Мгновенный отклик (Alt+Tab работает за 0 мс).
- Минус: Память заканчивается внезапно. Когда это происходит, система начинает экстренно сбрасывать данные на диск (Hard Faults), и компьютер встает колом на несколько секунд.
Наша задача в 2025 году — найти точку, где сжатие уже работает (спасая SSD), но CPU еще не перегружен.
🪟 Windows 11 25H2: Скрытые рычаги управления
В обновлении 25H2 Microsoft переработала логику отображения нагрузки, но под капотом остался старый добрый (и злой) Memory Manager.
1. Диагностика "До" (Не верьте Диспетчеру задач)
Новый Task Manager в 25H2 показывает "CPU Utility", что может скрывать реальные пики нагрузки от сжатия.
Используйте PowerShell для честного анализа.
Запустите от админа:
Get-Process | Where-Object {$_.Name -eq "Memory Compression"} | Select-Object Name, @{Name="MemUsage(MB)";Expression={[math]::round($_.WorkingSet/1MB,2)}}
Если вы видите, что процесс потребляет более 1-2 ГБ на машине с 32 ГБ RAM в простое — агрессивность слишком высока.
2. Реестр: Тонкая настройка (Beyond MMAgent)
Мы все знаем команду Disable-MMAgent -mc. Это рубильник. Но нам нужен диммер (регулятор).
Мы будем править параметры в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management.
А. FeatureSettingsOverride (Скрытый множитель)
Этот параметр часто используется для управления патчами безопасности (Spectre/Meltdown), но в 25H2 он влияет и на поведение компрессора памяти в связке с VBS (Virtualization-Based Security).
- Путь: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel
- Логика: Если у вас включена изоляция ядра (Core Isolation), сжатие работает в защищенном анклаве. Это безопаснее, но медленнее.
- Совет: Если вы геймер и готовы рискнуть, отключение VBS снизит накладные расходы на сжатие.
Б. StoreCompression (Агрессивность упаковки)
Хотя прямого ключа "Aggressiveness" нет, есть параметр StoreCompression в ветке PrefetchParameters (не путать с основной).
- Путь: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
- Параметр: EnableSuperfetch (DWORD) — да, он всё еще тут в 2025.
- 3 — Кэшировать всё (максимальная агрессивность префетча, который потом сжимается).
- 1 — Только программы.
- 0 — Выкл.
- Твик: Установите EnableSuperfetch в 1. Это снизит нагрузку на компрессор, так как он перестанет пытаться сжимать загрузочные файлы Windows, которые и так лежат на быстром SSD.
В. SystemResponsiveness (Приоритет перед сжатием)
Этот твик перекочевал из Windows 10, но в 25H2 работает иначе. Теперь он управляет планировщиком энергоэффективных ядер (E-cores) на процессорах Intel (12-15th gen) и AMD Zen 5c.
- Путь: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile
- Параметр: SystemResponsiveness
- Значение: По умолчанию 14 (резерв 20% CPU под фоновые задачи, включая сжатие).
- Совет: Ставим 0.
- Эффект: Мы запрещаем системе тормозить активную игру ради фонового сжатия памяти. Компрессия будет происходить только тогда, когда CPU действительно простаивает.
🔖Дорогие гости и подписчики канала. Если наши материалы приносят вам пользу, вы всегда можете поддержать команду символическим переводом. Любая помощь мотивирует писать для Вас больше полезного и качественного контента безо всяких подписок.🙏🤝🙏🤝🙏
💰ПОДДЕРЖАТЬ КАНАЛ МОЖНО ТУТ ( ОТ 50 РУБЛЕЙ )💰
Или сделать любой перевод по QR-коду через СБП. Быстро, безопасно и без комиссии.(Александр Г.)
С уважением, Команда "Т.Е.Х.Н.О Windows & Linux".
3. Секретный босс: LargeSystemCache
В серверных версиях Windows этот параметр включен (1), в десктопных — выключен (0).
- Суть: При 1 система отдает почти всю RAM под кэш файловой системы. А сжатие памяти пытается этот кэш ужать.
- Конфликт: Если включить LargeSystemCache на десктопе с включенным сжатием, вы получите постоянную борьбу: Файловая система тянет данные в RAM -> Компрессор их сжимает -> ФС снова тянет.
- Вердикт: Убедитесь, что LargeSystemCache стоит в 0 (по умолчанию). Не слушайте старые гайды по "оптимизации XP", которые советуют его включать. В 2025 году это убьет производительность.
4. Пошаговая инструкция: "Профиль Киберспорт"
Если вам важен каждый кадр и минимальный Input Lag:
PowerShell (Admin):
# Отключаем сжатие полностью. В 2025 году на 32ГБ+ это оправдано.
Disable-MMAgent -mc
# Перезагружаем службу SysMain, чтобы сбросить кэш
Restart-Service SysMain
Реестр:
Перейдите в HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management.
Создайте/измените DWORD DisablePagingExecutive на 1.
Что делает: Запрещает ядру сбрасывать свои драйверы в файл подкачки. Драйверы всегда будут в физической RAM. Это убирает микро-лаги при обращении к железу.
5. Пошаговая инструкция: "Профиль Воркстейшн" (3D, Видео, Код)
Вам нельзя отключать сжатие, иначе вылет After Effects гарантирован. Но нужно снизить его влияние.
- Оставляем MMAgent включенным.
- Настраиваем Pagefile:
- Установите фиксированный размер файла подкачки (например, 16 ГБ) на самом быстром NVMe. Не давайте Windows выбирать размер "Автоматически" — процесс расширения файла подкачки вызывает дикие тормоза.
- Реестр:
- SystemResponsiveness = 10 (Баланс).
🐧 Linux Kernel 6.17+: Эра MGLRU и ZRAM
Если в Windows мы боремся с черным ящиком, то в Linux мы инженеры ядерного реактора. В 2025 году ядро 6.17 принесло окончательную полировку MGLRU (Multi-Generational Least Recently Used).
Старый алгоритм LRU (используемый десятилетиями) был плох тем, что он часто выкидывал "нужные" страницы и оставлял "мусор", просто потому что мусор был затронут недавно. MGLRU делит память на "поколения" и гораздо умнее определяет, кого казнить (сжать), а кого помиловать.
1. MGLRU: Главный рубильник агрессивности
В ядре 6.17 MGLRU включен по умолчанию в большинстве дистрибутивов (Fedora 43, Ubuntu 25.10).
Проверьте статус:
cat /sys/kernel/mm/lru_gen/enabled
Если ответ 0x0007 (или похожий hex) — включено.
Регулировка агрессивности через min_ttl_ms
Это "святой грааль" настройки в 2025 году. Параметр определяет минимальное время (в миллисекундах), которое страница должна прожить в "активном" поколении, прежде чем её сочтут кандидатом на выселение (сжатие).
- Файл: /sys/kernel/mm/lru_gen/min_ttl_ms
- По умолчанию: 1000 (1 секунда).
Сценарий "Мягкий":
Если вы хотите, чтобы система реже дергала сжатие и реже выкидывала данные:
echo 5000 | sudo tee /sys/kernel/mm/lru_gen/min_ttl_ms
Мы говорим ядру: "Не трогай данные, если они живут меньше 5 секунд". Это снижает CPU usage на короткоживущих процессах (компиляция, скрипты).
Сценарий "Агрессивный" (для слабых ПК):
echo 0 | sudo tee /sys/kernel/mm/lru_gen/min_ttl_ms
Ядро будет пытаться выселять страницы в ZRAM максимально быстро, освобождая физическую память под кэш диска. Система будет казаться более отзывчивой при запуске приложений, но CPU будет нагружен.
Канал «Каморка Программиста» — это простые разборы программирования, языков, фреймворков и веб-дизайна. Всё для новичков и профессионалов.
Присоединяйся прямо сейчас.
. ZRAM Tuning 2025: ZSTD vs LZ4 (Снова)
В 2025 году процессоры стали мощнее (AVX-512 в консьюмерском сегменте). Это меняет расклад сил.
- LZ4: Всё еще король скорости. Используйте его, если у вас старый CPU, но много RAM.
- ZSTD: Теперь можно использовать с более высокими уровнями сжатия без потери производительности.
- ZSTD-Move (новинка): В новых версиях zram-generator появляются экспериментальные алгоритмы, оптимизированные под перемещение страниц.
Конфиг "Ультра" для 2025 года:
Файл /etc/systemd/zram-generator.conf:
[zram0]
# Создаем ZRAM размером 1.5 от объема RAM (да, можно больше физики, ведь оно сжимается!)
zram-size = ram * 1.5
# Используем zstd с приоритетом скорости
compression-algorithm = zstd
# Опции для ZSTD (уровень 1 - самый быстрый)
options = level=1
3. Swappiness в эпоху MGLRU
Многие спорят: "Нужен ли swappiness, если есть MGLRU?".
Ответ: Да, но значения изменились.
MGLRU использует swappiness как весовой коэффициент.
- vm.swappiness = 100: Равноправие между файловым кэшем и анонимной памятью (программами).
- vm.swappiness = 60: Предпочтение сохранению программ в RAM (стандарт).
- vm.swappiness = 150+: Предпочтение сжатию программ ради чистого файлового кэша.
Секретный твик: vm.vfs_cache_pressure
В 2025 году веб-браузеры создают миллионы мелких файлов в кэше. Увеличение этого параметра заставляет ядро быстрее "забывать" о структуре каталогов, которые вы посещали.
Рекомендуем: vm.vfs_cache_pressure = 50 (вместо 100).
Почему: Мы хотим, чтобы ядро помнило иноды (файловую структуру), потому что повторное обращение к диску за метаданными — это очень дорого. Лучше сжать пару мегабайт RAM через ZRAM, чем лишний раз будить SSD.
🎮 Практические сценарии: Живые примеры
Сценарий 1: Геймер с 16 ГБ RAM (Cyberpunk 2077 Phantom Liberty)
Трагедия: Игра вылетает через 30 минут из-за утечки памяти, либо фризит при езде по городу.
- Windows: Включите сжатие (Enable-MMAgent). Отключите SysMain, чтобы он не грузил лишнее. Поставьте фиксированный файл подкачки 16-32 ГБ на SSD.
- Linux (Steam Deck/Bazzite): ZRAM size = 200% RAM. Алгоритм lz4 (чтобы не тратить батарею). vm.swappiness = 133.
Сценарий 2: Разработчик Python/Docker (64 ГБ RAM)
Ситуация: Запущено 50 контейнеров. Память забита, но CPU простаивает.
- Windows: Отключите сжатие полностью. Вашему CPU нужно заниматься Docker-ом, а не упаковкой памяти. У вас 64 ГБ — этого хватит.
- Linux: vm.swappiness = 10. Пусть ядро сбрасывает файловый кэш, но держит контейнеры в "горячей" памяти. Отклик API будет быстрее.
Сценарий 3: Старый ноутбук "для мамы" (4 ГБ RAM)
Задача: Чтобы браузер открывался быстрее 10 секунд.
- Windows: Безнадежно. Ставьте Linux.
- Linux: ZRAM + ZSTD (уровень 3). vm.page-cluster = 0. vm.watermark_scale_factor = 200 (агрессивно держать свободное место). Это "волшебная таблетка" для старого железа.
🛑 Безопасность и Риски (Федеральный закон напоминает)
Коллеги, напоминаем о требованиях законодательства РФ при работе с информацией.
- Шифрование свопа: Если вы используете ZSWAP или сброс на диск, помните: в файле подкачки могут оказаться пароли, токены сессий и ключи шифрования в открытом виде.
- Linux: Используйте LUKS для swap-раздела. ZRAM безопасен, так как данные исчезают при выключении питания.
- Windows: fsutil behavior set encryptpagingfile 1. Это включит шифрование файла подкачки, но добавит нагрузку на CPU.
- Целостность данных: Чрезмерный разгон памяти (XMP/EXPO) в сочетании с агрессивным сжатием может привести к незаметному повреждению данных. Сжатый блок с одним битым битом при разжатии превращается в мусор. Если вы работаете с критическими данными (гостайна, бухгалтерия 1С) — проведите суточный тест MemTest86 перед включением агрессивного ZRAM.
🛠 Код и Конфиги (Copy-Paste Ready)
Windows: Скрипт "Оптимизатор 2025" (PowerShell)
Сохраните как Optimize-Mem.ps1. Запускать от админа.
# Проверка прав
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Warning "Запусти от админа!"; exit }
Write-Host "🔍 Анализ текущего состояния..." -ForegroundColor Cyan
$mm = Get-MMAgent
Write-Host "Memory Compression: $($mm.MemoryCompression)"
# Настройка SystemResponsiveness
$path = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile"
$val = Get-ItemProperty -Path $path -Name "SystemResponsiveness" -ErrorAction SilentlyContinue
if ($val.SystemResponsiveness -ne 0) {
Write-Host "🛠 Меняем SystemResponsiveness на 0 (Приоритет играм)..." -ForegroundColor Yellow
Set-ItemProperty -Path $path -Name "SystemResponsiveness" -Value 0
}
# Отключение SysMain для SSD
$sysmain = Get-Service "SysMain"
if ($sysmain.Status -eq 'Running') {
Write-Host "⚠️ Выключаем SysMain (Superfetch) для экономии ресурсов..." -ForegroundColor Red
Stop-Service "SysMain"
Set-Service "SysMain" -StartupType Disabled
}
Write-Host "✅ Готово. Перезагрузись, сталкер." -ForegroundColor Green
Linux: Systemd Unit для MGLRU (Для тех, у кого нет mglru-helper)
Создайте файл /etc/systemd/system/mglru-tune.service:
[Unit]
Description=Configure MGLRU Aggressiveness
After=multi-user.target
[Service]
Type=oneshot
# Включаем MGLRU
ExecStart=/bin/sh -c 'echo y > /sys/kernel/mm/lru_gen/enabled'
# Устанавливаем TTL 3000ms (баланс)
ExecStart=/bin/sh -c 'echo 3000 > /sys/kernel/mm/lru_gen/min_ttl_ms'
# Защита от трэшинга (thrashing prevention)
ExecStart=/bin/sh -c 'echo 0 > /sys/kernel/mm/lru_gen/thrashing_prevention'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Активация: systemctl enable --now mglru-tune.service
🐛 Типичные ошибки и Диагностика
- Ошибка: "Система фризит на 1-2 секунды каждые полчаса".
- Диагноз: Это сброс "грязных" страниц. Проверьте vm.dirty_ratio в Linux. Если он слишком большой (по умолчанию 20%), система копит гигабайты данных, а потом разом пишет их на диск.
- Лечение: Поставьте vm.dirty_background_ratio = 5 и vm.dirty_ratio = 10. Пусть пишет чаще, но мелкими порциями.
- Ошибка: Windows показывает BSOD MEMORY_MANAGEMENT.
- Диагноз: Обычно это битая память, но иногда — конфликт драйверов с функцией сжатия.
- Лечение: Disable-MMAgent -mc. Если BSOD пропали — виноват драйвер (часто старые драйверы видеокарт или античиты).
✅ Чек-лист применения
- ОЗУ < 16 ГБ: Включаем сжатие, агрессивность MAX (swappiness=150).
- ОЗУ 16-32 ГБ: Сжатие ВКЛ, агрессивность СРЕДНЯЯ (SystemResponsiveness=0).
- ОЗУ > 64 ГБ: Сжатие ВЫКЛ (если CPU узкое место) или МИНИМУМ.
- Сервер БД: Сжатие ВЫКЛ (Latency критична).
- Веб-сервер: ZRAM + ZSTD (экономия денег на RAM).
❓ FAQ
Вопрос: Я слышал, что сжатие памяти изнашивает процессор. Это правда?
Ответ: Кремний не изнашивается от вычислений (в отличие от SSD от записи). Единственный риск — перегрев, если у вас плохое охлаждение. Но нагрузка от сжатия обычно составляет 1-3%, что ничтожно мало.
Вопрос: MGLRU доступен на старых ядрах (5.15)?
Ответ: Только если вы сами пропатчите ядро или используете кастомные ядра (XanMod, Liquorix). Официально — с версии 6.1+. В 2025 году сидеть на 5.x — это моветон, обновляйтесь.
Вопрос: Почему Microsoft не дает нам ползунок настройки в GUI?
Ответ: Философия Windows: "Мы знаем лучше". Они оптимизируют систему под "среднего Джо", который открывает 10 вкладок в Edge и Word. Шаг влево-вправо — это наша с вами территория, территория энтузиастов.
Вопрос: Работает ли это на CXL-памяти (Memory Expander)?
Ответ: О, вы богаты! Да, в ядре 6.17 появилась поддержка tiered memory с прозрачным сжатием. Вы можете настроить так, чтобы "горячие" данные жили в DDR5, а "теплые" сжимались и улетали в CXL-модуль. Это высший пилотаж оптимизации серверов.
🏁 Вывод
Управление агрессивностью сжатия памяти в 2025 году — это искусство. Мы перестали просто добавлять планки RAM. Мы начали думать о том, как эффективно использовать то, что есть.
- Если вы на Windows 25H2 — ваша сила в реестре и понимании того, что скрывает новый Диспетчер задач.
- Если вы на Linux Kernel 6.17 — вы вооружены MGLRU и ZRAM, инструментами, которые делают 16 ГБ памяти эквивалентными 24 ГБ.
Не бойтесь экспериментировать. Память — это всего лишь ресурс, и только вам решать, как его тратить: на быстрый запуск браузера или на стабильный FPS в рейде.
Понравился глубокий разбор? Подписывайся на "T.E.X.H.O Windows & Linux". Мы копаем там, где другие боятся испачкать руки. 🛠
#MemoryCompression #Windows11_25H2 #LinuxKernel617 #MGLRU #ZRAM #Optimization2025 #SysAdmin #DevOps #PCBuild #RegistryTweaks #PowerShell #Bash #TechDeepDive #Latency #GamingSetup #ITPro #RussianIT #Cyberpunk2077 #DockerOptimization #HardwareUnboxed #MemoryManagement #ZSTD #LZ4 #SwapTuning #HighPerformanceComputing #ServerAdmin #WindowsInternals #LinuxHacks #TechGuide #T.E.X.H.O