Новая версия моего диагностического пакета почти готова к свободному плаванию. Сегодня я расскажу об изменениях и покажу скрипты PowerShell, лежащие в основе утилиты.
Утилита CheckBootSpeed изначально была рассчитана на исправление проблем, замедляющих загрузку Windows с жесткого диска. Когда утилита создавалась, владельцев SSD было очень мало, к тому же они и без нее довольны скоростью запуска системы. Однако я вижу ценность пакета не только в исправлении проблем, но и сборе данных для дальнейшей диагностики или статистики.
Поэтому я решил не бросать утилиту, а обновить ее в духе времени. Предлагаю вашему вниманию обзор изменений и практические примеры сбора сведений о системе с помощью PowerShell.
[+] Сегодня в программе
Более подробные описания диагностируемых проблем
Букв стало больше, но для меня это еще один способ донести до владельцев SSD назначение функций Windows.
Определение типа диска (SSD или HDD)
В отличие от Windows 7, Windows 8 определяет тип диска еще до проведения оценки производительности, которая теперь выведена за рамки программы установки. Это можно проверить, открыв оптимизатор дисков сразу после первого входа в систему.
Windows определяет тип накопителя на основе спецификаций ACS-2. Система опрашивает диск и интерпретирует полученный результат в соответствии с таблицей, опубликованной на MSDN. Накопитель считается твердотельным, если диск определяется как «не вращающийся» (non-rotational). Однако скриптом извлечь эту информацию невозможно.
Из блога разработчиков Windows 7 я почерпнул, что они отключают дефраг для дисков, на которых скорость случайного чтения выше 8MB/s.
Из 182 протестированных жестких дисков лишь шесть кое-как перевалили через 2MB/s. Я решил использовать этот же прием.
В принципе, оценку производительности диска можно извлечь командлетом Get-WmiObject из объекта Win32_WinSat:
(Get-WmiObject WIN32_WINSAT).DiskScore
Поскольку она учитывает также и другие скорости, было трудно сопоставить ее с порогом в 8MB/s. Поэтому я решил измерить скорость случайного чтения самостоятельно с помощью утилиты winsat. Любые выражения, в том числе командной строки, можно выполнять с помощью командлета Invoke-Expression.
Invoke-Expression 'winsat disk -ran -read -drive $env:systemdrive -xml "$env:temp\ReadSpeed.xml"'
Старожилы блога помнят дело об оценке производительности, раскрытое Холмсом, откуда и взята команда. Суть в том, что утилита winsat не запускается, если не может переключиться на самый производительный план электропитания. Кстати, попутно обнаружилось, что winsat отказывается работать на виртуальной машине Hyper-V.
По иронии судьбы, диагностический пакет это дело не решает автоматически, но по крайней мере учитывает проблему и отражает ее в отчете. В PowerShell есть удобная переменная $LastExitCode, принимающая значение 0 в случае успешного завершения команды. В противном случае скорости диска присваивается значение 8, что ведет к более консервативной оценке требуемых исправлений (как для SSD).
if ($LastExitCode -ne "0") {$ReadSpeed = "8"}
Если же измерение завершилось успешно, из временной папки считывается XML-файл с полученным отчетом WinSat. Здесь содержимое файла считывается с помощью командлета Get-Content.
else { [[xml]]$ReadSpeedXML = Get-Content $WinSatPath $ReadSpeed = [int]$ReadSpeedXML.WinSAT.Metrics.DiskMetrics.AvgThroughput."#text" } $ReadSpeed MB/s
Экспорт результатов в XML позволяет задействовать их в прочих скриптах пакета. А в PowerShell работать с XML – одно удовольствие. Пункты команды просто соответствуют узлам XML-файла, которые надо последовательно раскрыть, чтобы добраться до значения элемента.
Остается лишь сравнить его с порогом. Если скорость не меньше 8, диск считается твердотельным.
if ($ReadSpeed -ge "8") {$SystemDiskType = "SSD"} else {$SystemDiskType = "HDD"} $SystemDiskType
Я не интересовался, может ли скорость превышать этот порог на RAID из жестких дисков, но это не имеет значения для пакета, как вы увидите ниже.
Диагностика SuperFetch, ReadyBoot и Prefetch с учетом типа диска
Определившись с типом диска, пакет дифференцированно подходит к диагностике параметров кэширования запуска Windows и программ. Давайте немного остановимся на этих параметрах, потому что здесь все очень запутано.
SuperFetch
Вкратце, смысл технологии SuperFetch в том, чтобы анализировать ваши сценарии работы и вовремя подгружать в память наиболее востребованные вами программы. Кроме того, SuperFetch оптимизирует сон, гибернацию и быстрое переключение между пользователями.
Представьте, что после нескольких часов напряженной работы в системе вы пошли пообедать. ПК вошел в режим бездействия, что повлекло за собой выполнение задач обслуживания (например, антивирусную проверку). Диспетчер памяти освободил для них место, выкинув ваши приложения (то же самое происходит при работе с любыми приложениями, потребляющими много памяти).
Однако SuperFetch сохранила их в кэш на диске. Когда задачи обслуживания отработали, диспетчер памяти вернул в память ваши программы из кэша SuperFetch. Подкрепившись, вы приступили к работе с приложениями без задержки.
Проверить тип запуска службы можно одной командой PowerShell. В данном случае уже знакомый вам командлет Get-WmiObject извлекает информацию из класса Win32_Service.
(Get-WmiObject -Query "Select StartMode From Win32_Service Where Name='sysmain'").StartMode
Когда технология SuperFetch отключена, данные и код потребуется подгружать с диска без всякого кэша, что выражается в более медленном отклике приложений. Однако на быстрых дисках (например, SSD) технология не дает преимуществ, поэтому Windows отключает ее, но не службу, как вы увидите ниже.
ReadyBoot
Функция ReadyBoot формально возложена на службу ReadyBoost, имеющую свой драйвер rdyboost.sys, который ядро загружает на раннем этапе запуска Windows. Однако по сути ReadyBoost является частью службы SuperFetch (sysmain), как видно на рисунке ниже.
Служба ReadyBoost отслеживает, какие файлы и в каком порядке запускаются при загрузке Windows, сохраняя пять последних отчетов в папке %WinDir%\Prefetch\ReadyBoot. На основе этой информации формируется план следующей загрузки, хранящийся в реестре.
Так или иначе, ReadyBoot призвана ускорять запуск Windows и автозагрузку программ в первую очередь с жесткого диска.
Если по оценке производительности система установлена на достаточно быстрый диск (например, хороший SSD), из реестра удаляется параметр EnableSuperFetch, отвечающий за ее работу.
На моем планшете сразу после установки параметр присутствовал, но после измерения оценки производительности он исчез. Я точно не знаю, на какой параметр опирается Windows, принимая решение, но он должен быть как-то связан с последовательным или случайным чтением. Ведь только эти скорости измеряются во время формальной оценки WinSat.
Prefetch
Но даже когда система установлена на быстром SSD, служба SuperFetch не отключается, вопреки распространенному мнению. Она остается работать для логического префетчинга, появившегося еще в Windows XP. По той же причине в реестре остается параметр EnablePrefetcher.
Вряд ли префетчинг способен улучшить скорость запуска Windows с SSD, но, видимо, в Microsoft сочли, что наряду с твердотельными накопителями в системе могут быть и жесткие диски. Если с них запускаются программы, кэширование может улучшить отлкик.
Алгоритм работы CheckBootSpeed
На жестких дисках утилита проверяет тип запуска службы SuperFetch (см. выше), а также значение параметров реестра EnablePrefetcher и EnableSuperFetch. Сначала раздел реестра закладываются в переменную, а затем отдельные параметры и значения извлекаются с помощью командлета Get-ItemProperty.
$PrefetchPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters" $PrefetchParams = Get-ItemProperty -path $PrefetchPath write-host EnablePrefetcher: $($PrefetchParams).EnablePrefetcher write-host EnableSuperfetch: $($PrefetchParams).EnableSuperFetch
Затем используется условие Switch с регулярным выражением, определяющим, равен ли каждый параметр 2 или 3, либо чему-то другому. Иначе говоря, утилита проверяет, оптимизируется ли запуск системы и/или приложений. .
$EnablePrefetcher = switch -regex ($PrefetchParams.EnablePrefetcher) { "[2-3]" {"on"} default {"off"} } $EnableSuperfetch = switch -regex ($PrefetchParams.EnableSuperfetch) { "[2-3]" {"on"} default {"off"} } write-host Prefetcher is [$EnablePrefetcher] write-host SuperFetch is [$EnableSuperfetch]
Если на жестком диске служба не стартует автоматически или в реестре указаны неверные значения, утилита восстанавливает стандартные параметры.
С твердотельными дисками я не стал городить огород. Когда пакет определяет, что система установлена на SSD, он даже не проверяет параметры SuperFetch, ReadyBoot и Prefetch. В конце концов, если владельцы SSD сами отключают их, «они лучше знают».
Пакет также не проверяет на SSD параметры реестра в разделе BootOptimizeFunction, поскольку дефрагментация загрузочных файлов не выполняется, когда ОС установлена на твердотельный накопитель.
Сбор дополнительной диагностической информации
Утилита построена на платформе диагностики Windows, а с помощью PowerShell можно извлечь самые разнообразные сведения. Это одна из основных причин, по которой я не бросаю развитие пакета.
В частности, в бета-версии осуществляется сбор информации о:
- моделях дисков и раскладе по разделам
- оценке диска на основе формальной оценки WinSat, хранящейся в системе
- последних действиях функций Prefetch и ReadyBoot
- параметрах задания дефрагментации
- событиях дефрагментации и оптимизации дисков в журнале
В следующей записи я подробнее расскажу о том, как PowerShell помогает собирать эти сведения
Сводная таблица диагностики CheckBootSpeed
В таблицу я собрал информацию о том, что конкретно проверяется и исправляется во время работы пакета.
Бета-тестирование CheckBootSpeed
Upd. Ровно 150 человек прислали запросы, и каждому я ответил ссылкой. Далеко не все прислали отчеты, но полученной информации более чем достаточно. Прием заявок прекращен.
Как и что тестировать
Прежде чем приступать к проверке, создайте точку восстановления системы.
- Запустите утилиту.
- Снимите на первом экране флажок автоматического исправления и нажмите «Далее».
Если вы не изменяли системные параметры, которые анализирует утилита, она предложит лишь сбор данных. Все остальные обнаруженные проблемы нужно изучить.
Пакет работает по принципу «найти проблему –> исправить ее –> проверить исправление», причем в большинстве случаев обнаружение и проверку выполняет один и тот же скрипт.
Поэтому нужно обращать внимание на такие моменты:
- Соответствует ли обнаруженная проблема алгоритму в таблице выше.
- Исправлена ли обнаруженная проблема на практике.
- Соответствует ли статус «Исправлено» или «Не исправлено» в результатах работы пакета реальному положению дел в итоге.
Если вы решили исправить проблему, повторите запуск утилиты и посмотрите, обнаружит ли она ее в этот раз.
Что делать с результатами
Здесь все просто! Вставьте отчет в комментарий и поделитесь впечатлениями от работы утилиты. Я буду рад услышать ваши наблюдения и замечания! Если вы не хотите публиковать отчет в комментариях, пришлите мне его на почту ответным письмом.
Сергей
Согласен.
Дмитрий
Вадим, при посещении сайта oszone, а именно страницы
http://forum.oszone.net/post-1379073.html
если щёлкнуть на первый скришнот в статье, то переходим сюда
http://radikal.ru/F/s53.radikal.ru/i140/1003/9a/ed871d466a67.jpg.html
и ловим вирус, блокировщик экрана.
Может я это всё зря пишу, так как на Озон я уже писал много раз, но там нет реакции, извините ещё раз, просто стараюсь быть полезен.
Vadim Sterkin
Дмитрий, я не знаю, где вы писали на OSZone. Я не помню обращений по почте к администрации или в ПМ. И если вы обращались к модераторам, укажите кому и когда.
Все что я могу сделать, это удалить ссылки на картинки из этой темы. Но по всему форуму раскиданы тысячи ссылок на radikal.ru. Если сайт распростраянет вирус (а я не вижу там ничего кроме типичного обилия рекламы), надо писать его администрации…
Дальнейшее обсуждение вопроса предлагаю перенести в почту, ибо это не имеет никакого отношения к теме записи.
Юрий
Прошу прощения за то, что так долго «отмалчивался» — были причины…
Vadim Sterkin
Спасибо!
Дмитрий
Жду релиза новой версии Вашей утилиты. Считаю, верным Ваше решение о ее обновлении.
Владислав Александрович
Возможно что я невпопад, но у меня медленно грузится система на новом ультрабуке Самсунг NP530U3C-A06 13.3 с диском HD500gb + 24gbSSD. Я плохо понял специфику Ваших переговоров, просто прошу сообщить — могу ли я воспользоваться Вашей утилитой для проверки правильности работы при загрузке указанного ноутбука с комбинированным диском?
И какой версией лучше, если это возможно.
Спасибо!
Vadim Sterkin
Владислав Александрович, да, можете воспользоваться утилитой (версия у нее одна сейчас). Кроме того, можете сразу сделать ETL (см. последние комментарии к той записи — увидите, зачем это нужно).
paulkorotoon
Спасибо за обновление.
Полистал отчет и заметил интересную штуку:
Чисто любопытно, что за ключ -$? Гугл пока ничего по делу не выдал.
Vadim Sterkin
В среду в блог заходите :)
Фёдор
Благодаря Вашей утилите нашёл как ускорить скорость случайного чтения HDD. Дело в том что режим ACPI в Win7 по умолчанию отключен. Я в своё время с этим режимом экспериментировал и нашёл как включить его в реестре изменив один параметр
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci]
«Start»=dword:00000003 (по умолчанию) на dword:00000000
После изменения данного параметра перезагрузить машину и обновить оценку производительности
У меня получилось следуещие значения 0.98000 MB/s до применения твика и 1.29000 MB/s после твика.
Microsoft Windows 7 Ultimate 6.1.7601 SP1
HDD WDC WD75 00BPKT-75PK4T0 SATA Disk Device 750GB
Денис Борисыч
Система и железо тоже-самое результат чуток другой
Vadim Sterkin
Странно, что включен ReadyBoot при такой оценке/скорости диска. Возможно, чуть позже система отключит его.
Денис Борисыч
Vadim Sterkin,
живет своей жизнью)))
radio303
Вадим, спасибо, что обновили! попробовал утилиту на W7 Домашняя расширенная с SSD crucial m4 64gb, куда система была перенесена программой Paragon с достаточно старого HDD, утилита решила, что система на HDD:) правильно ли я понимаю, что так и должно быть и мне поможет только заново поставить на SSD?)
Vadim Sterkin
Отчет?
Пётр Попов
Vadim Sterkin,
нажал «повторить оценку» в счётчике производительности Win7, после этого перезапустил утилиту — всё в порядке, утилита увидела SSD, прошу прощения:)
Игорь
Владимир из Ульяновска
Здравствуйте Вадим!
Скажите пожалуйста, Вы написали, что Бета-тестирование утилиты CheckBootSpeed 2.0 (завершено). А когда можно скачать новую версию вместо прежней? У меня есть 1.0, которой я проверяю после запуска операционной системы. Всего хорошего!
Vadim Sterkin
Владимир, нажмите первую жирную ссылку в статье.
Владимир из Ульяновска
Спасибо!
Скачал, попробую, проверю и напишу.
Всего хорошего!
Владимир из Ульяновска
Здравствуйте Вадим!
Запустил вашу новую версию.
Снял галочку, чтобы программа не делала исправления.
Получил отчёт. А как расшифровать Дополнительные данные? Я только по дефрагментации диска и загрузочных файлов понял. А там ведь есть и другие данные. И как сюда помещать отчёт программы? Всего хорошего!
Vadim Sterkin
Владимир, а другие данные вам и так известны. Информация нужна для удаленной диагностики, читайте Сбор и анализ сведений о системе с помощью PowerShell
Владимир из Ульяновска
Vadim Sterkin,
Здравствуйте Вадим!
Прочитал всё, что вы мне написали. Но, мне немного трудновато в этом разобраться. Посылаю вам отчёт за сегодня вашей программой. Дайте пожалуйста оценку по отчёту. Буду вам очень признателен. Всего хорошего!
Vadim Sterkin
Владимир, у вас все хорошо.
Владимир из Ульяновска
Vadim Sterkin,
Спасибо Вадим!
Но, что интересно! Я включаю ноутбук днём, форматирование диска и загрузочных файлов было 2-3 дня назад и делаю один раз Гибернацию вечером, а на ночь ноутбук выключаю. При просмотре в журнале событий код 100 без довесков других кодов. Чистая загрузка системы. А цифры в отчётах всегда разные:
52- 2- 99- 18- 7программ,113-2-67-56-8программ,130-2-110-75-8программ,49-2-97-25-7программ и 133-2-104-110-7программ. Вывод напрашивается такой,что никогда система не будет загружаться постоянно меньше 60сек! Будут всегда скачки-то в минус, то в плюс! Искал причины , что могут влиять на эти скачки, но так и не нашёл их. Толи ноутбук слаб, то ли операционка Windows 7 Start. Махнул рукой и будь что будет! Только заглядываю в Просмотр событий, в Журналы Windows, в Систему. Смотрю весь путь запуска, есть ли коды 101,102,103,106,108 и 109 ? Пока всё чисто! Сбоев нет! И минут через 10 после запуска запускаю вашу программу по проверки и по созданию отчёта запуска системы. Так что Спасибо за ваш Блог и за ваши очень нужные статьи.Буду ждать от вас новых статей. Всего вам хорошего!
Владимир из Ульяновска
Здравствуйте Вадим!
А как расшифровать данные, которые пишутся ниже надписи- Недавняя оценка диска до надписи- Параметры задания дефрагментации ? Помогите пожалуйста. Всего хорошего!
Vadim Sterkin
Владимир,
1. Оценка производительности системы.
2. Параметры задания ScheduledDefrag (поиск в блоге).
Владимир из Ульяновска
Здравствуйте Вадим!
Сегодня у меня была по расписанию Перезагрузка, так как всю неделю я работал с режимом Гибернации. Перед тем, как сделать Перезагрузку я запустил вашу программу CheckBootSpeed 2.0. Она проверила ноутбук, выдала отчёт. Сделал дефрагментацию загрузочных файлов. Затем я сделал Перезагрузку. Код 100 показал длительность загрузки 131.632ms. После этого я сделал ещё 4 раза проверку вашей утилитой и Перезагрузку. Код 100 был всегда больше 130 секунд. Тогда я взял вашу первую утилиту. И сделал 5 раз проверку утилитой и Перезагрузку. И код 100 показал длительность загрузки: 133.888ms, 134.259ms, 117.747ms, 55.071ms и 53.696ms. Поэтому у меня сложилось мнение, что для моего ноутбука подходит первая ваша утилита. Видны сразу положительные результаты в сторону уменьшения длительности загрузки операционной системы Windows 7 Начальная. Чего не скажешь про вторую вашу утилиту, которая даёт более обширную информацию. Результаты показали длительность загрузки почти на одном и том же времени. Тут уже надо выбирать из двух вариантов утилит, только ту, которая нужна в настоящий момент. Извините за такое большое сообщение. Но,благодаря вашим статьям, я по-тихоньку начинаю разбираться во многих тонкостях системы. Всего хорошего!
Vadim Sterkin
Владимир, вы уже не первый месяц носитесь с этой темой как с писаной торбой. Послушайте доброго совета — оставьте в покое свою систему, не мучайте ее дефрагами, перезагрузками, разными версиями утилиты. Так она дольше проживет…
Игорь
У меня в системе 2 накопителя, система на ssd и hdd для файлохранилища
Программа CheckBootSpeed 2.0 написала Служба SuperFetch имеет тип запуска Manual и в настоящий момент Stopped
Это нормально? Как должно быть в моем случае?
И как понять что windows 7 правильно определила диски и не будет форматировать ssd?
Vadim Sterkin
При стандартных настройках ОС служба работает для обеспечения Prefetch, что расписано в статье.
Форматировать она его не будет в любом случае :) Дефраг можно определить задним числом в журнале событий.
Игорь
Про Prefetch понял, но так и не определился нормально ли в моем случае такой вариант или все же лучше полностью отключить службу SuperFetch?
Все программы у меня на ssd, на hdd игры, мультимедиа и дистрибутивы программ
Vadim Sterkin
Игорь, делайте как хотите, вы не заметите разницы в любом случае.
Игорь
Vadim Sterkin,
Спасибо
Vladimir Salmin
Запустил утилиту и по отчёту возник вопросЖ почему диск, на котором установлена система не определился как SSD, хотя установлено всё на mSATA Plextor 256 GB.
Ноутбук Dell Inspiron 7720. Ubuntu 12.04 + Windows 8.1 x64.
Заранее благодарен!!!
Vadim Sterkin
Скачайте новую версию, ссылка обновлена.
Vladimir Salmin
http://bit.ly/GetCheckBootSpeed3 — Page not found 404 :-(
Vadim Sterkin
Сорри, попробуйте снова.
Vladimir Salmin
Огромное спасибо за столь быстрый ответ!!!
Ниже привожу отчёт:
Книгу Вашу уже скачал.
Так же, в соответствии с Вашими статьями, внёс изменения по дефрагментации SSD.
Вот только уже 2-ю неделю никак не могу побороть ошибки при Windows Update. Не хочет ничего обновлять… :-(
Перепробовал все Ваши рекомендации.
И ещё один вопрос не по теме, но может сможете помочь: После обновления до Windows 8.1 ,уже пару месяцев как, внешний HDD FreeCom 3.0 2 GB стал сам по себе отключаться минут через 10 после запуска лаптопа. Чтобы опять его стало видно помогает только выдёргивание и обратное подключение USB провода от него. Штатная утилита Power Green выставлена на отключенный Suspend Disk.
Самое главное, что под Ubuntu всё нормально работает и диск сам по себе не отключается.
Так же на других компьютерах под управлением Windows разных версий.
Проверить под Win 8.1 на других компьютерах возможности нет.
Благодарю за Вашу поддержку!!!
Vadim Sterkin
Владимир, вы точно все перепробовали? :) Тогда вам будет проще.
Драйверы обновите для начала. В диспетчере устройств посмотрите события в свойствах диска.
Vladimir Salmin
Большое спасибо за уделённое мне внимание!
Я точно уже перепробовал всё… :-)
И не по одному разу…
Но не отчаиваюсь!!!
Пытался грешить на интернет — далековато я от цивилизации — двухсторонний спутниковый.
Но другие-то компьютеры, подключенные к роутеру, работают. Правда все на Windows 7.
На форуме уже зарегистрировался, но письмо активации до сих пор не пришло — буду ждать, чтоб появилась возможность писать сообщения.
Ещё раз спасибо!!!
Vladimir Salmin
Забыл написать: драйвера с сайта DELL все обновляю по мере их выхода.
Серж
У меня проблема при загрузке win8.1 настроил автологин и переходит сразу на рабочий стол все ето происходит секунд за 10 ссд рулит, но потом рабочий стол зависает и только после сек 15-30 он развисает и начинаеться загрузка програм с автозагрузки…слип и гибернация мгновенно и безглюков!
Vadim Sterkin
Серж, попробуйте твик StartupDelayInMSec. Если не поможет, выполняйте п. 2 в этой теме.