Некоторые аспекты энергосбережения Intel Core i* and Windows (страница 4)
реклама
Различия планов электропитания
В операционных системах «Windows Vista» и последующих, представлено несколько планов электропитания, присутствующих изначально. Это «Экономия энергии», «Сбалансированный» и «Высокая производительность». Кроме названия, эти планы отличаются свойствами, которые можно изменить через настройку плана электропитания. К сожалению, характеристик слишком много, да и большая часть их «попрятана», поэтому использование такого пути оптимизации крайне неприятно и вызывает лишь негативные эмоции. Посмотрите, сколько настроек находится в разделе «Управление питанием процессора». А на самом деле их 35. С помощью правки реестра все эти параметры можно сделать видимыми, но использовать подобный интерфейс для просмотра и редактирования 35 параметров ... я попробовал, и категорически не советую. Что же, пришлось сесть и написать простенький редактор:
Программа может управлять как самими планами (копировать, переименовывать, удалять), так и менять настройки любого из них. Т.к. параметров очень много и их свойства подчас трудно отождествить, то основной акцент программы направлен на получение максимума полезной информации. Для этого все свойства представлены на одной странице в виде списка, а в верхнем окне выводится описание того, что сейчас выполняется. Вся справочная информация представлена компанией Microsoft, я лишь ее вывожу, поэтому ... увы, что есть, то и есть. Кроме этого, в редактируемой строке приводятся начальные значения этого параметра для трех стандартных планов («Экономия энергии», «Сбалансированный» и «Высокая производительность»). Думаю, разберетесь, только одно пожелание - вначале сделайте тестовый план и уж затем его правьте. Приведу ссылку на программу - PowerSchemeEd. Можно много говорить, но проще и ценнее попробовать всё самому. Редактор есть, дерзайте.
Посмотрим на страницу настроек столь 'ненавистного' плана «Экономия энергии» в сравнении с более-менее адекватным «Сбалансированный»:
реклама
По большей части планы совпадают, но если присмотреться к деталям, то для «Экономия энергии» наблюдается следующее:
- Порог повышения производительности процессора (№01) составляет 90%, что означает - только в том случае, когда задача выполняется всё время кванта, засчитывать за «загруженный»;
- Сброс загрузки (№04) считается, когда задача выполняется менее 60 % кванта;
- Время, которое требуется для принятия решения о том, что ядро занято (№25) составляет 3 отсчета, а не 1;
- Время до понижения частоты (№33) равно 2 против 10 для «Сбалансированный», что означает агрессивный сброс частот.
Существуют и другие отличия, они выделены цветом, но самые важные я перечислил. В качестве одного из терминов используется понятие «квант». Это то время, которое дается задаче (потоку) на выполнение. Подробнее по этому и другим сопутствующим вопросам можно почитать в интересной статье Крис Касперски «Разгон и торможение Windows NT». По окончанию кванта процессор (ядро) начинает выполнять другую задачу, если она имеется, или возобновляет выполнение прежней. Квант - это то время, когда задача не может быть прервана, как правило. Если задаче делать нечего, то она может вернуть процессорное время в операционную систему отправившись «спать» по какому-нибудь критерию. Понятно, что при этом задача не будет выполняться весь квант и операционная система запустит другую задачу в оставшееся время кванта, или отправит «спать» ядро, если нет ничего на исполнение. Так и получается «низкая» загрузка процессора, например в «Media Player Classic», использовавшаяся ранее. Программа должна формировать 25 кадров в секунду, но что ей делать после того, когда целевое количество кадров сформировано? Правильно, отправлять кадр на вывод и «спать» до вывода следующего кадра. При этом процессор (ядро) загружается полностью, но на очень короткий интервал времени, почти всегда меньше кванта. С точки зрения контроля электропитания это означает, что загрузка менее кванта (для плана «Экономия энергии» этот порог 90%), а потому может засчитываться как «низкая». В принципе, всё логично и правильно - если операционная система загружает ядро полностью, то частоту следует повышать. Аналогичный процесс следует производить при снижении загрузки ядра.
Переходим ко второму моменту - «Переопределение ядра приостановки» (№27). По умолчанию во всех планах переопределение включено. Это позволяет операционной системе переключать выполняемую задачу по ядрам. Здесь можно пропустить очевидную глупость со сбросом и перезагрузкой кешированных данных в старом-новом ядрах исполнения, о такой 'мелочи' великие M$ давно уже не задумываются, скорость работы программ для Microsoft не является приоритетным. Итак, к чему приводит ... стоп-стоп, далеко не все знают о механизме переключения. Для каждого выполняемого потока формируется таблица описания свойств и регистров, в которую входит аппаратные ресурсы (например TSS) и чисто программные, описательные. По окончанию кванта операционная система (планировщик) останавливает и сохраняет контекст текущего потока в заданной области памяти. После этого выбирает следующий поток (или этот же) и запускает его на выполнение. Но, операционной системе совершенно не важно на каком процессоре начать выполнение потока - есть контекст с регистрами, ОС может загрузить указатель в любой свободный процессор. Настройка «Переопределение ядра приостановки» говорит о том, стараться ли использовать прежний номер ядра, или 'пнуть куда-нибудь'. С этим вроде бы просто и переходим к третьему нюансу.
Задача может постоянно загружать процессор, но различные программы мониторинга, в том числе и «Диспетчер задач Windows» покажут странную картину - загрузка разбрасывается по ядрам, причем неравномерно и весьма случайно. Отчего это происходит? Задача может исполняться квант времени, обычно ее не тревожат, но по его окончании никто не гарантирует, что операционная система не сменит ядро исполнения на другое. Но это не всё, ядро исполнения могут сменить и в пределах исполнения кванта! При своей работе программа вызывает функции Windows и других приложений. Фактически, это означает применение каких-то 'исполнительных модулей', для запуска и возврата из них используется тот же контекст потока, который упоминался ранее. Что мешает при возврате из 'внешней библиотеки' запустить контекст на другом ядре? Да ничего, причем так и происходит. Это означает, что исполняемая задача начинает «гулять по ядрам». Это не важно при полностью загруженном процессоре, но когда установлен многоядерный процессор, а задача однопотоковая, то скачки по ядрам приведут к тому, что ни на одном ядре не будет полностью исполняться квант. А именно, операционная система будет считать загрузку менее 100%. Парадокс, однопоточная задача, на 100% занимает одно ядро, но из-за постоянного перекидывания ни одно из исполнительных ядер не считается занятым. Господа из Microsoft считают это правильным. Ну ... им виднее. Но не на моем компьютере, пожалуйста.
Возвращаемся к планам электропитания. Для «Экономия энергии» установлен порог загрузки 90% для признания ядра загруженным. Только в специальных программах тестов производительности используются алгоритмы БЕЗ вызова функций операционной системы в основном вычислительном цикле, в остальных программах запросы Win32API (DirectX и прочие) следуют постоянно. Это означает, что поток не всегда сможет исполняться весь квант на одном и том же ядре. Впрочем, 'иногда' цикл выполнения может не захватывать вызов сторонних функций и весь квант поток останется на своем ядре.
Краткие выводы - исполняемый поток может выполняться на одном ядре как весь квант, так и лишь его часть. В последнем случае загрузка этого ядра окажется менее 100% (при условии, что других задач не выполняется).
Кроме порога загрузки в плане электропитания указывается еще время до принятия решения. Для «Экономия энергии» порог повышения указан как 90%, а время = 3. Это означает, что загруженным считается ядро, которое занято не менее 90 процентов времени кванта на протяжении трех последовательных квантов. Для одноядерного процессора противоречий нет - если три кванта процессор был загружен полностью, то следует повышать его частоту. Но, если ядер больше одного, скажем два? Положим, выполняется однопоточная задача, один квант на №0 ядре, второй на №1 ядре, третий снова на №0 ядре. В результате, хотя имеется и полная однопоточная загрузка, но по 0 и 1 ядру в трех соседних квантах нет полной загрузки. Как следствие, система электропитания говорит, что процессор не загружен и оставляет частоту низкой. Нечто подобное мы уже наблюдали в тестировании. Для обхода этого недостатка надо уменьшить время реакции системы до одного кванта, как это установлено в других планах («Сбалансированный», «Высокая производительность»
). Впрочем, это не обеспечивает полной гарантии, что Windows не посчитает нагрузку «низкой»! Как отмечал ранее, планировщик может переключить ядро исполнения до окончания кванта по вызову функции (точнее, не 'может', а 'делает', но не для всех функций). А это приводит к тому, что загрузка ядер может быть постоянно не полной. И чем больше ядер в процессоре, тем выше мера «разбрасывания» и шанс получить «низкая загрузка». Для обхода этого можно снизить «порог увеличения производительности» (№01) с 60% до, скажем, 100%/N. Где "N" - количество ядер в процессоре. К примеру, для плана «Высокая производительность» этот параметр установлен в 30% («Сбалансированный» = 60%). Короче, сами можете оценить, насколько это оптимально для современных четырехядерных процессоров, я уж не говорю о включенной «HT» (Hyper-Threading). В последнем случае число ядер удваивается и план электропитания вполне может честно снизить частоту, посчитав загрузку процессора «низкой». Что же, еще один вариант провала процессоров при включении «HT».
реклама
Чтобы завершить вопрос о плане «Экономия энергии» обратите внимание еще и на порог понижения производительности, он установлен в 60 %. При этом время снижения производительности составляет 2 тика, против 10 у «Сбалансированный». Фактически это означает, что система электропитания будет легко и быстро скидывать частоту процессора при установке не-максимальной загрузки. Короче говоря, план «Экономия энергии» неохотно повышает частоту под сильной нагрузкой и очень быстро ее скидывает при малейшем снижении нагрузки.
Послесловие
Несмотря на название раздела, хочется рассказать, с чего все началось. Есть такая игра, «Borderlands», которой я посвятил много времени. Графика и сюжет обычный, можно сказать 'скучный', но разработчики вложили столько юмора, что очень хочется в нее играть. Можно это назвать 'фанатизмом', но ... жанр юмористических игр класса «Action» крайне ограничен, вспоминается только «MDK» (номер 1 и 2) и всё. «Стрелялок» много, но всякие Doom2 быстро приедаются, не смотря на их высокое качество исполнения. Впрочем, я не собираюсь никого агитировать, гиблое это дело.
После очередного 'upgrade' я запустил игрушку и получил какие-то неочевидные результаты. Нет, 'FPS' выросли, тесты проходят на 'все хорошо', но уровень играбельности мне что-то не понравился. Т.к. я играю в эту игру, гм, довольно давно, то отчетливо ощущаю, как должно прорисовываться окружение. Вначале подумал о проблемах с драйверами и (далее следует долгий список 'призраков', которые могут быть в компьютере). Думаю, все с таким сталкивались, сие называется «пляска с бубном». К слову, это состояние обычно заканчивается тем, что проблема или сама собой рассасывается или решение не обнаруживается и приходится смириться. Но не в этом случае. При игре отмечались случаи падения FPS с довольно медленным восстановлением, а такое поведение не свойственно играм. Обычно скорость прорисовки напрямую зависит от сложности картинки или происходящих действий. Иногда игра выполняет подгрузку уровней или другую 'незапланированную' деятельность, но к таким дефектам быстро привыкаешь и они легко отождествляются. В моем случае снижение FPS было 'странным'. Это очевидно однопоточное приложение, к тому же включена опция Vsync, что приводило к загрузке процессора в районе 60-100% (приведенная к одному ядру). Как вы уже догадываетесь по материалу статьи, это приводило к понижению множителя, ибо план электропитания («Сбалансированный», у всех установлен именно он) считал эту нагрузку низкой и понижал частоту процессора. Как следствие, FPS в игре проваливались ниже 60. Понятно, что при этом план электропитания получал полную загрузку и множитель процессора повышался, чем и сопровождался плавный рост FPS до номинала, но это происходило уже 'после', и провал играбельности был четко заметен. Дело в том, что снижение частоты работы видеокарты сказывается на скорость формирования кадров почти линейно и других последствий не содержит, а вот с процессором всё сложнее - кроме графики он обсчитывает очень много других вещей (положение объектов, их 'жизнь'), поэтому снижение и последующее повышение частоты процессора сказываются на все процессы самым причудливым образом. В принципе, именно это я и наблюдал - игра шла 'странно', очень неприятно.
Для обхода этого дефекта можно заблокировать управление множителем в Windows и управлять им самостоятельно, что было реализовано в одном моем проекте C&Q***, но программа поддерживала только процессоры Core2, что давно уже пенрестало быть актуальным (хотя, я продолжаю ею пользоваться на компьютере на работе). Что же, делать для себя, а потому и время потратить не зазорно. Адаптировал программу под Core i (SB*/IB), получилось что-то работоспособное и удовлетворяло требованиям. Но, хотелось разобраться с проблемой, тем более, что обходной способ (с помощью C&QCPU) у меня уже был. Что же, я 'полез' в планы электропитания "и тут волосы встали дыбом". Жуть. Век какой, а технологии до сих пор расчитаны на одноядерный процессор! План «Экономия энергии» из экономного стал просто "опусти свой компьютер", ибо постоянные 1.6 ГГц для слегка разогнанного до 4.2 ГГц процессора - как это назвать? С планом «Сбалансированный», который установлен активным у всех пользователей Windows, тоже 'всё хорошо'. Скажем так - именно на нем я получил проблемы в игре. Поставить план «Высокая производительность» и понадеяться, что загрузка ядер постоянно будет держаться выше 30% ? Кроме того, «Переопределение ядра приостановки» явно вредная настройка, ее очевидно надо вЫключать. Я понимаю, что Microsoft хотели сделать равномерную распределение нагрузки по ядрам, но - давайте я сам буду распоряжаться своим процессором, хорошо? К слову, я немного посмотрел, как ведет себя операционная система с отключенным переопределением ядра исполнения. Как следует из логики, так и выполняется (что странно) - эта настройка не является догмой, а лишь пожеланием. При занятости целевого ядра операционная система перекинет ядро исполнения на свободное. Это не «Affinity» (маска соответствия) ядер, а лишь критерий - оставлять исполняться на том ядре, что было, или сменить на другое свободное.
Впрочем, план электропитания - это просто и довольно прозрачно, а вот работа «C1E» откровенно разочаровала. Настолько медленно устанавливается, что все «импульсные» нагрузки проходят очень плохо. Фактически, процессор работает на нижней границе VID (множитель 28), что было бы «неплохо» для неразогнанного Core i5 3570. Сколько там, 3.4 ГГц + турборазгон? Но для фиксированных 4.2 ГГц без каких либо ‘турбо-фич’ переход к 2.8 ГГц означает падение производительности в 4.2/2.8=1.5 раза. Гм, а если разогнали больше? «Импульсные» нагрузки не такая уж и редкость. Поиск файла, переписывание, особенно через интерфейс USB - всё это весьма обыденно. Да и, по большей части компьютер не загружен полностью и, практически, находится в простое. Но это не значит, что на нем не выполняются задачи, требующие быстрой реакции, а "разогнанный по самое" процессор работает на сниженной частоте. Помнится, в древние времена для процессоров Athlon на nForce2 существовала проблема с отключением шины EV67 в состоянии простоя (т.н. "Bus Disconnect"), что не позволяла процессору полноценно уйти в состояние простоя «С1». Включение этой опции снижала температуру процессора, но приводила к скоростным проблемам для «импульсной» нагрузки типа USB Flash, в некоторых случаях скорость обмена резко снижалась. Зачем я об этом вспомнил? На отключение-подключение шины требовалось какое-то время, хоть и ничтожное, но это уже сказывалось на быстродействии компьютера в некоторых областях применения. К слову, для «нагруженных» задач включение "BD" никак не влияло. Дело в том, что «C1E» работает схожим образом и потенциально может привести к аналогичным рудиментам. Конечно, можно провести расширенное тестирование и получить примеры резкого падения производительности в определенных и распространенных областях применения, но надо ли? Деструктивность функции «C1E» показана достаточно четко, ее надо выключить и всё. Будет ли при этом понижаться напряжение в простое? Хороший вопрос, ведь без снижения напряжения утечки в процессоре обеспечат весьма значительную мощность тепловыделения, чего крайне желательно избежать. С точки зрения логики, отключение механизмов «C1E» и «EIST» неизбежно должно привести к отсутствию управления напряжением и оно не должно изменяться (всегда максимум). Результат - повышенные обороты системы охлаждения процессора. Предложить вам самим проверить, будет ли при этом меняться напряжение, или ответить самому? Предлагаю тем, кто хочет самостоятельно разбираться с состояниями, заканчивать читать этот раздел и переходить к выводам.
Для остальных я хочу сказать, что вы слишком ленивы. Интересно же попробовать что-то своими руками. Отключение «C1E» и «EIST» должно приводить к отсутствию управления напряжением, ибо таково трактование соответствующих технологий фирмы Intel. Но это не происходит, напряжение в простое снижается. Причина? Попробую предположить, что контроллер энергосбережения процессора работает несколько «ширше» чем это описано в технологиях «C1E» и «EIST». А именно, по переходу в «C1» (т.к. «C1E» заблокирован, то в состояние «C1E» переключиться нельзя) контроллер начинает медленный процесс автоматического перехода в разновидность состояния «C3», возможно и дальше («C6-7»). Это вытекает из того факта, что при отключенном «C1E» напряжение в простое падает для любого плана электропитания, и при этом нет тех негативных моментов падения производительности для «импульсной» нагрузке, что свойственны включенной «C1E». Кроме того, отключение состояний «C3» - «C7» блокирует снижение напряжения в простое.
Как же можно и управлять напряжением и не получать негативных моментов от замедленного установления номинального значения множителя? Дело в том, что состояние ядер и всего процессора - это не одно и то же. Перевод ядер в простой не означает, что надо снижать напряжение на весть процессор, ведь часть ядер может быть активно. Кроме того, политика работы «C1E» может отличаться от правил функционирования внутреннего контроллера энергосбережения процессора. Технология «C1E» требует, чтобы по этому состоянию ядро (весь процессор) немедленно понижало напряжение. Контроллер может поступать более адекватно, например хранить историю предыдущих состояний и не снижать напряжение в некоторых случаях, если это приводит к падению производительности. Если компьютер находится в простое, то большую часть времени процессор «спит». При очень кратковременных «пробуждениях» какая разница, на сколько времени будет повышено напряжение? Фактически, среднее напряжение так и останется низким. Впрочем, всё это лишь предположения, а не конкретные факты.
Знаете, вспоминается один из дорожных знаков в «Borderlands», очень подходит к современным энергосберегающим технологиям:
Выводы
Для полноценной работы процессора следует обязательно выполнить два условия:
- В BIOS отключить «C1E», оставив включенным поддержку состояний «C3-C7»;
- Никогда не устанавливать план электропитания «Экономия энергии».
реклама
Страницы материала
Лента материалов раздела
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила