В интернетах бытует устойчивое мнение, что служба SysMain (ранее – SuperFetch) абсолютно не нужна в Windows 10, установленной на SSD. Якобы недалекие разработчики Microsoft не понимают, что префетчинг не дает никакого ускорения на твердотельном диске, и нам приходится учить глупую ОС новой реальности, отключая службу.
К сожалению, эти тезисы основаны на устаревшей информации и не учитывают изменений, произошедших в Windows 10. Отчасти в этом виновата Microsoft, ограничившая доступ к документации центром отзывов.
На самом деле служба сокращает объем записи на диск за счет сжатия и объединения страниц памяти, повышая производительность под нагрузкой. Ее отключение прекрасно вписывается в мифы оптимизации SSD. Обновить их в этом контексте меня давно подталкивал читатель блога Арслан, а последней каплей стала пара дискуссий в форуме. Рассказ о сжатии памяти в сокращенном виде и без анонсов я добавил к разбору мифов еще в январе, а сегодня публикую полный материал в качестве отдельной записи.
[+] Сегодня в программе
Сжатие памяти в Windows 10
В Windows 10 отображаемое в графическом интерфейсе имя службы Superfetch сменилось на SysMain, что соответствует фактическому названию службы. Видимо, так Microsoft обозначила смещение основного назначения службы с унаследованного из старых ОС префетчинга приложений к новой функции — сжатию памяти (memory compression).
Компания опубликовала рассказ о технологии еще в августе 2015 года, но почему-то исключительно в приложении Центр отзывов (копия в PDF). Как следствие, информация прошла мимо многих пользователей Windows 10. Ниже мое краткое объяснение и дополнительные сведения.
Принцип работы
Когда диспетчер памяти ощущает недостаток памяти, он не сбрасывает неиспользуемые страницы памяти на диск, а сжимает их. В файл подкачки запись ведется лишь в том случае, когда алгоритмы диспетчера памяти определяют, что сжатие не компенсирует недостаток памяти.
Хранящаяся в памяти коллекция сжатых страниц называется compression store. Система использует единое хранилище для всех приложений (Win32 и UWP), а также индивидуальные хранилища для всех приложений Windows Runtime, обеспечивающие тримминг и своп. Вместо записи страниц в файл подкачки, диспетчер памяти сжимает их и помещает в соответствующее хранилище.
Как ни странно, в документе ничего не говорится про еще одну функцию службы SysMain — объединение страниц памяти (page combining). Диспетчер памяти определяет страницы с одинаковым содержимым и объединяет их. Эта функция работает в рамках службы независимо от сжатия памяти.
Снижение объема записи на диск
За счет сжатия и объединения страниц памяти сокращается число операций ввода-вывода и соответственно снижается объем записи на диск. Поэтому бессмысленно отключать службу SysMain ради экономии ресурса SSD.
В 2019 году эта экономия вызовет усмешку у многих владельцев SSD, особенно у неоднократно сменивших вполне рабочие диски на более емкие и производительные. Но шесть лет назад хватало людей, озабоченных смертью накопителя от исчерпания циклов перезаписи. Думаю, и сейчас они есть (число комментариев к мифам застыло на отметке 991 лишь потому, что я когда-то массово отключил обсуждение старых записей :)
Но сжатие памяти в любом случае внедрялось не для этого.
Повышение производительности под нагрузкой
Польза от оптимизации ОС проявляется в ситуациях, когда аппаратных ресурсов не хватает. Сжатие памяти нацелено на сценарий, когда вся память занята, и приходится сбрасывать ее на диск, теряя производительность при подкачке.
Наибольший эффект от технологии проявляется при сочетании недостатка памяти с существенной дисковой нагрузкой.
Сжатие памяти приносит больше пользы медленным, чувствительным к подкачке дискам — HDD и eMMC. Твердотельный накопитель нагрузить под завязку сложнее, но если вам это удалось, то избавление от лишних операций I/O лишним не будет.
Визуальные индикаторы сжатия памяти
В статье Microsoft вообще не упоминается служба SysMain, однако ее связь со сжатием памяти несложно вычислить экспериментальным путем. Кроме того, документ опубликовали перед выходом первой стабильной версии Windows 10, и лишь спустя год, в версии 1607, добавили наглядные сведения о сжатой памяти в диспетчер задач.
Когда служба SysMain включена, вы можете открыть диспетчер задач на вкладке Производительность и в разделе Память убедиться в использовании сжатой памяти, а также увидеть дополнительные сведения, наведя курсор на область Структура памяти.
Также, в Process Explorer вы можете увидеть в дереве процесса System процесс Memory Compression (это был единственный наглядный способ на момент выхода Windows 10). Наконец, с помощью PowerShell вы можете получить текущий статус сжатия памяти командлетом Get-MMagent.
Если же служба SysMain отключена, сжатая память не работает, что видно по тем же показателям.
Компоненты службы SysMain
У службы пять компонентов, и вы можете проверить их статус в PowerShell от имени администратора командлетом Get-MMagent (MM – Memory Management, т.е. агент управление памятью). На картинке ниже стандартное состояние компонентов.
Управление новыми компонентами SysMain осуществляется командлетами Enable-MMagent и Disable-MMagent. Префетчинг, унаследованный из старых ОС, контролируется только в реестре (для указанных в документации параметров PowerShell запрос не поддерживается). Напомню, что суть префетчинга в том, чтобы ускорять операции, которые регулярно обращаются к одним и тем же данным на диске.
Сводная таблица компонентов службы и методов управления ими.
Компонент | Назначение | Управление |
---|---|---|
MemoryCompression | Сжатие памяти | PowerShell |
PageCombining | Объединение страниц памяти с одинаковым содержимым | |
ApplicationPreLaunch | Предугадывание запуска приложений | |
ApplicationLaunchPrefetching | Системный префетчинг запуска приложений | Реестр |
OperationAPI | Предоставление другим приложениям доступа к системному префетчингу через API |
Вы можете включать и выключать отдельные компоненты службы, и я покажу примеры в контексте диагностики.
Диагностика компонентов службы SysMain
В случае аномального поведения службы (например, высокой нагрузки на CPU или диск), можно попробовать определить, является ли причиной тот или иной компонент SysMain. Если у вас командлет Get-MMagent выдает картинку, отличную от приведенной выше, приведите службу в порядок. Вставьте код ниже в PowerShell от имени администратора и перезагрузитесь.
#если служба не запущена, запустить и установить автоматический тип запуска if ((Get-Service sysmain).status -ne "Running") { Start-Service sysmain Set-Service sysmain -StartupType Automatic } #включить все компоненты службы Enable-MMagent -MemoryCompression Enable-MMagent -PageCombining Enable-MMagent -ApplicationPreLaunch Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters" -Name EnablePrefetcher -Value 3
Скрипт включает службу и все компоненты, а также устанавливает для SysMain автоматический тип запуска. Если ситуация не исправилась, смотрите в сторону проверки компонентов и системных файлов и исключения сторонних факторов.
Когда проблема возникает при стандартном состоянии службы, можно вести диагностику методом половинного деления. Конечно, нет гарантий, что проблема в конкретном компоненте, но попытка – не пытка. Отключите все компоненты службы, а затем включайте их порционно, отслеживая поведение системы (не забывайте перезагружать ОС после каждой операции).
Синтаксис командлетов PowerShell простой – в качестве параметра передается название компонента. Например, команды для отключения и включение сжатия памяти:
Disable-MMagent -MemoryCompression Enable-MMagent -MemoryCompression
Префетчингом управляет параметр EnablePrefetcher в разделе реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
Его стандартное значение 3 включает префетчинг Windows и его API для сторонних приложений, 2 оставляет только API, а 0 отключает полностью.
Заключение
Я исторически ратую за подробную документацию по продуктам Microsoft, и случай с SysMain является одним из худших примеров. Описание главной системной службы погребено в центре отзывов и никак не связано с фрагментами информации в блоге инсайдерской программы и справкой по командлету PowerShell, у которого в свою очередь не работают параметры управления унаследованными компонентами. Все это никак не способствует повышению уровня технических знаний и принятию информированного решения при настройке службы.
Да, у Microsoft есть официальные рекомендации по настройке служб Windows Server 2016 с Desktop Experience, которые с оговорками можно распространить на Windows 10. Там не рекомендуется изменять тип запуска службы (именно это означает ремарка No guidance
). При этом в документе указан ручной тип запуска, а в Server 2019 и Windows 10 он автоматический. Но эти сведения опять же никак не связаны с техническим описанием службы.
Этой статьей я свожу всю известную мне информацию о SysMain воедино и восполняю пробел в документации. Если у вас отключена служба или ее отдельные компоненты, напишите в комментариях, чем вы руководствовались.
Lecron
Во всех рекомендациях, про и контра, катастрофически не хватает метрик и приходится доверяться репутации говорящего. Понимая, что и его мнение, тоже основано в основном на репутации.
Сколько страниц за сутки объединил PageCombining в абсолютном и относительных выражениях? Сколько места занимает в памяти служба и ее компоненты? Учитывается ли это при определении эффективности их работы? Может она сама занимает 50Мб? Думаю профессионалы заинтересуются и другими оценками полезности.
Сам считаю службу никакой. Польза/вред от включения/отключения, на уровне погрешности измерений. На скрине, отсутствие «экономии» 67Мб, лишь сократит кэш на 5%. Извините, но это ниочём. Да, кто-то скажет, что возможно другое распределение памяти, но тут и нужны метрики – как? насколько? как часто бывает?.
Dmitry Shipovalov
Ну тут у кого как — вот у меня в системе такая ситуация — Compressed 4.5GB
https://ibb.co/Jc2WypT
Vadim Sterkin
В этом материале я и не планировал доказывать скептикам полезность службы. Я ставил целью:
• кратко изложить принципы ее работы
• обозначить сценарии, в которых она может быть полезна
• описать способы управления компонентами службы
Статья носит информационный характер, и по-моему спорить тут особо не о чем. Поэтому репутация автора здесь не является фактором.
Я понимаю, что вам хотелось бы увидеть конкретные цифры, демонстрирующие ценность службы. (Оценивать по демонстрационным скриншотам из статьи точно не нужно.)
Однако разработать толковую методику анализа и протестировать различные устройства на практике лично для меня проблематично. Затраты по времени огромные, а польза сомнительна.
При отсутствии экспериментально подтвержденных недостатков надо опираться на рекомендации изготовителя ПО. Исключение — проблемы при работе службы.
Lecron
>>опираться на рекомендации изготовителя ПО
Это и есть репутация. Джентльменам верят на слово…)))
Vadim Sterkin
Я не все принимаю на веру, и иногда могу поковырять (дефраг SSD — хороший пример). В данном случае мне это неинтересно.
Если у вас есть сомнения в полезности службы, а также время и желание провести свой анализ — вперёд. Но отключать службу только на основе скептицизма считаю иррациональным
n2011all n2011all
Давно нервирует систематическое изменение подходов в управлении службамию
ранее было так включена-значит загружаются библиотеки, режим авто — значит библиотеки загружаются в память
и так далее.
сейчас не просто бардак а просто хаос, сравнивая как ведут себя службы в 10-ке winSrv2008, winSrv2016 приходишь к выводу что нет никакой унификации в подходах — видимо каждый майкрософтмен *** как хочет…
Вот этот факт видимо и толкает пользователей (тем более тех кто щупал руками еще 3.11) экспериментировать с службами и увы только с одной целью-снизить дикую прожорливость
мне на 10-ке удалось добиться снизить портребление памяти до 810Мб для компа с 2Гб озу, но это же потребляет 10-ка на которой вы еще ничего НЕ НАЧАЛИ ДЕЛАТЬ!!!!
Для сравнения на том же компе Linux потребляет до 630Мб и это при том что на нем уже развернуты веб сервер, субд, рад систем мониторинга!!!
Кому *** нужна система, которая только жрет ресурсы??? даже в простое…
Теперь о дисках, спасибо за статью, но предлагаю все же посмотреть шире-я сторонник ручного и с пониманием управления дисковой системы. Поэтому советую все у кого дисеи не первой молодости отключать все авто сценарии дефрагментации, проверки целостности дисков — эти штуки убьют ваши диски раньше чем вы успееие выматерить 10-ку
вообщем то впечатление от мелкософта после выхода 10-ки не изменилось-вся цель заключается в дальнейшем наращивание количества *** поколения тач-имбицилов-больше тыкания,больше фотомудачества,больше памяти,мощнее прцы,дороже компы-короче бабки бабки бабки
но согласен содним — нанче их время….
Грубые слова и выражения выпилены. Вадим
Vadim Sterkin
Вы все с ног на голову перевернули. Пройдусь по тезисам без цитирования.
Отключение служб ради повышения производительности раньше действительно было популярным занятием. Но сейчас этим занимаются только ретрограды, школьники и владельцы ПК со слабой аппаратной конфигурацией, не подходящей для современных ОС (планшеты и мини-ПК — отдельная тема).
ПК с 2GB памяти не подходит для комфортной работы ни в одной поддерживаемой Windows, поскольку система становится однозадачной. И да, первым делом туда нужен браузер, который меньше 1GB редко берет.
Потребление ресурсов в простое — нормально в рамках автоматического обслуживания. Так и должно быть, ведь вы в это время не пользуетесь ПК.
Сценарии дефрагментации и проверки дисков отключать не надо, хотя бы потому, что они тоже выполняются только в простое.
P.S. Еще один комментарий с ненормативной лексикой будет последним. Пятый пункт правил — про вас.
Lecron
Плюсую. Но добавлю к причинам отключения прагматизм. Отключение ради повышения производительности делается, чтобы современная конфигурация приносила ускорение, а не оказывалась равной «устаревшей». Или чтобы «устаревшая», получила нужную пользователю функциональность, не потеряв в отзывчивости от ненужной.
Если всегда нужно что-то доустановить, почему такое отношение к удалению — ретрограды, школьники?
Vadim Sterkin
Потому что я не видел практических примеров с доказательствами повышения производительности от отключения служб на адекватной конфигурации. Там все в пределах погрешности / одной вкладки хрома.
Microsoft разрабатывает Windows под современное (не равно мощное) оборудование — например, SSD. Но, к сожалению, уже много лет компания не меняет системные требования.
Это порождает у пользователей (и ответственных за закупки в организациях) ложное ощущение, что их конфигурация подходит для комфортной работы с привычным набором запущенных прикладных программ. Когда выясняется несоответствие ожиданий реальности начинается «оптимизация», в т.ч. отключение служб.
Виктор Ганелес
А сжимается память любых процессов или только компонентов windows?
Vadim Sterkin
Любых
Varzek
Вадим, добрый день. Вопрос не по теме данной статьи. Вы не разбирали причины возникновения ошибок DCOM в журнале Windows? И как их устранить? На данный момент в сборке 1903 в журнале часто появляется ошибка DCOM 10016 с AppID {316CDED5-E4AE-4B15-9113-7055D84DCC97}.
Vadim Sterkin
Вопросы не по теме направляйте в http://forum.oszone.net плиз.
Varzek
Мне просто интересно именно Ваше мнение. С другими пользователями на форуме мы уже обсуждали эти ошибки и всё из них кроме описанной мной выше получилось исправить
Vadim Sterkin
Мое мнение: ошибки в журнале событий — это подспорье для диагностики проблем. Есть проблема — смотрим журнал. Но не наоборот: видим ошибку в журнале — проблемы не знаем — пытаемся избавиться от ошибки.
На этом прошу закончить оффтоп (см. правила).
Валерий
Лучше забейте на это. Эта ошибка сыпется каждый день горами в журнал с самого начала выхода 10-ки, точно не помню, может она была и в 8-ке. После того, как эта ошибка появились, в разных местах появилась инструкция, как от нее избавиться. Все послушно нажимали на кнопки и исполняли эти инструкции. Через какое-то время уже на сайте МС и параллельно от какого-то гуру Винды появилось предупреждение, что на эту ошибку нужно забить. И что выполняя вышеупомянутую инструкцию, пользователь сам дает разрешение неизвестно кому :) Так что горы ошибок 10016 DistributedCOM растут каждый день, как снежный ком, пугая юзеров до усрачки, а МС это пофиг ;)
Инструкция типа такая, которую не нужно делать
https://mywebpc.ru/windows/event-id-10016-distributedcom-windows-10-error/
А это от МС
https://support.microsoft.com/ru-kz/help/4022522/dcom-event-id-10016-is-logged-in-windows-10-windows-server
Эти события можно безопасно игнорировать, поскольку они не влияют на функциональные возможности и предусмотрены конструкцией. Это рекомендуется для этих событий.
При необходимости опытные пользователи и ИТ-специалисты могут отключить эти события от просмотра в окне просмотра событий путем создания фильтра и ручного редактирования запросов XML фильтра следующим образом:
бла-бла-бла
Также можно обойти эту проблему, изменив разрешения для компонентов DCOM, чтобы предотвратить вход в систему. Однако этот метод не рекомендуется, поскольку эти ошибки не влияют на функциональные возможности, а изменение разрешений может привести к побочным эффектам.
PS И что мешает МС при очередном обновлении самим сделать фильтр, чтобы эта 10016 DistributedCOM исчезла из просмотра событий и не пугала юзеров до усрачки?
Юрий
Вадим, добрый вечер!
У меня вопрос, собственно, о самом сжатии — так что сжимает система: данные или программный код?
Vadim Sterkin
Неиспользуемые и помещенные в список измененных страницы памяти частных рабочих наборов процессов.
Читайте док, там все очень понятно объясняется.
LiteForce
Расскажите пожалуйста как работает SFC /scannow.
Vadim Sterkin
Не задавайте вопросов не по теме, плиз. Ищется элементарно же — сначала sfc в Гугле, потом из первой ссылки в результатах имеем
system file checker
илиWindows resource protection
и ищем по docs.microsoft.comВиталий
Мне больше нравится дедупликация памяти. На моей конфигурации с 16ГБ памяти и старым дохлым процессором винда видимо считает, что сжимать смысла нет, а вот дедупликация рабочих наборов svchost позволяет каждому из многочисленных процессов служб кушать около мегабайта. Правда их так много потому, что Windows, видя много памяти, запускает каждую службу в отдельном процессе ))
Ещё бы убить вирусные службы с короткими хешами в конце, и цены этой ОС (в редакции LTSC) не будет.
Vadim Sterkin
Отдельные хосты для сервисов полезны
https://t.me/sterkin_ru/242
https://vk.com/wall-81672804_3794
Пользовательские службы можно отключить https://docs.microsoft.com/en-us/windows/application-management/per-user-services-in-windows
Виталий
Очевидно, я бы не писал, если бы всё было так просто
https://habrastorage.org/webt/hi/ba/wd/hibawdey-rdbj0af4bmyvr7ictg.png
И так на все службы с названиями как у вирусных.
Vadim Sterkin
Очевидно здесь лишь то, что я не телепат. Причем это утверждение относится к обоим вашим постам.
Сергей Морозов
Один из главных доводов за отключение служб — уменьшение открытых портов, а каждый открытый сетевой порт — потенциальная уязвимость.
Vadim Sterkin
Есть такое обоснование, но что-то не припоминаю, чтобы SysMain попадала под раздачу именно ради повышения безопасности. Она сетевые порты открывает? Не интересовался, если честно.