Одной из областей Windows, которая подвергается пристальному вниманию и значительному количеству тестов, является производительность графики, которая крайне важна в CAD-приложениях и играх. Широчайший спектр поддерживаемых устройств и сценариев использования постоянно вносят свой вклад в экосистему, порой имея совершенно разные задачи: от базовых возможностей до высочайшей частоты смены кадров на максимально возможном количестве мониторов. В разработке Windows 7 мы поставили перед собой задачу увеличить производительность при выполнении каждодневных задач, но и другие приложения не были забыты. Собственно, в Windows 7 мы и наши партнеры приложили все свои усилия, чтобы увеличить производительность: мы несли соответствующие изменения в код, они - подготовили устройства и драйверы (обратите внимание, что драйвера, работающие в Windows Vista, продолжат работать в Windows 7, при этом мы продолжаем работать с партнерами над драйвера для Windows 7, многие из которых уже размещены на Windows Update). В сегодняшней статье мы окинем взглядом спектр инженерных работ, а также наши методы измерения графической производительности. Мы хотели обратить ваше внимание на проделанную в Windows 7 работу, хотя мы оставляем место для различных форумов, сравнивающих производительность Windows 7 на различных конфигурациях и в различных сценариях. Автором сегодняшней статьи является Амит Читре (Ameet Chitre), программный менеджер команды Desktop Graphics. --Стивен
Если вы отправитесь в путешествие по онлайн-магазинам с целью приобрести новый компьютер, вы заметите, что высокие графическая и общая производительность являются одними из основных аргументов при покупке и, соответственно, продаже. Увидев подобные характеристики, покупатели ждут от таких систем возможности редактировать фотографии, смотреть видео в высоком разрешении и играть в новейшие игры, а иногда переключаться между этими задачами. Очень немногие из этих пользователей заглядывают на различные форумы и сайты, на которых публикуются результаты графических тестов. Традиционно графическая производительность измерялась и анализировалась по 3D-играм, но необходимо учитывать и сценарии обычной работы, к примеру, при открытии окон или скроллинге в Word или IE. Требования к графической производительности в таких сценариях в существенной степени отличается от требований к производительности в 3D-играх. На самом деле, именно поэтому в Windows Vista Experience Index (WinEI) мы решили разделить эти сценарии:
Рис. 1. Пример окна WEI с выделенными графическими характеристиками.
Графическая производительность, как правило, оценивается через различные тесты, которые можно условно поделить на 2 категории:
Тестирование сценариев: такие тесты оценивают производительность в конкретных сценариях, например, количество кадров в секунду при полете над поверхностью земли в авиа-симуляторе. Во многих популярных играх есть встроенные тесты, демонстрирующие насколько производительна та или иная графическая карта в типичных сценах игры.
Синтетическое тестирование: подобные тесты позволяют оценить производительность в конкретном аспекте графики, к примеру, скорость прорисовки определенного набора линий.
Однако, есть масса повседневных задач, которые не учитываются тестовыми пакетами, но скорость выполнения которых имеет для нас критичное значение. В таких случаях мы используем инструментарий из Windows, чтобы получить информацию по задержкам и впоследствии проанализировать полученные результаты.
В сегодняшней статье мы обсудим различные аспекты графической производительности - как игровые, так и настольные. В ней рассказано об изменениях, которые мы внесли в Windows 7 с целью реализовать преимущества современных графических решений и, конечно же, удовлетворить потребности пользователей.
Отзывчивость
Многие из вас сталкивались с проблемой, когда какое-либо приложение или Windows сама по себе переставала отвечать на запросы пользователей. Подобного рода проблемы, которые мы называем проблемами с отзывчивостью, часто вызваны производительностью графики. Увеличение отзывчивости - как в прямом смысле, так и с точки зрения избегания замираний - является ключевым способом увеличения общей производительности. И ее тоже нужно измерять.
Измерение отзывчивости само по себе является сложной проблемой, поскольку большую часть ситуаций с потерей отзывчивости крайне сложно воспроизвести. Такого рода проблемы редко учитываются тестовыми пакетами в связи с тем, что появление таких проблем может быть обусловлено сложным набором факторов. В Windows 7 мы потратили массу времени, анализируя с помощью встроенного в тестовые версии механизма записи ключевых событий различного рода замирания. В ходе реальных тестов пользователь, столкнувшись с проблемой отзывчивости, мог нажать на кнопку записи и ввести описание проблемы. История события с диагностической информацией, называемые трассировкой производительности, записывались в файл и загружались на сервер, где наши специалисты по производительности просматривали ее с целью выявить причину проблемы. Сам процесс настолько хорош, что сегодня большинство проблем с отзывчивостью моментально отлавливаются, а их причины устраняются.
С помощью этой методики мы проанализировали тысячи трассировок случаев, когда тестеры сталкивались с подвисаниями системы продолжительностью от 100мс до нескольких секунд. Причиной подвисаний могло быть что угодно: от блокировки антивирусом доступа к диску в момент обновления сигнатур до попыток обращения к сети из потока UI. В значительном количестве трассировок мы выявили, что одно GDI-приложение ждет другое GDI-приложение, которое столкнулось с подвисанием ввиду чрезмерной активности, связанной с подкачкой. До сего момента эта проблема была одной из самых распространенных причин снижения отзывчивости, которую мы вряд ли бы обнаружили не будь у нас методики. На основе наших изысканий мы начали работу над усовершенствованием архитектуры в двух ключевых областях:
Согласование GDI: увеличить отзывчивость при работе нескольких одновременно запущенных приложений. Это требует серьезной переработки кода, связанного объектов синхронизации GDI (абб. от Graphics Device Interface) или "замков".
Сокращение общего потребления памяти Windows: сократить потребление памяти в работе Desktop Window Manager (далее DWM), который является одним из основных компонентом, ответственным за визуализацию рабочего стола. Это позволяет снизить общую активность при подкачке, что особенно важно на компьютерах с маленьким объемом памяти и, в частности, устройствах с разделяемой графической памятью.
Согласование GDI
Некоторые из трассировок, изученных нами в контексте отзывчивости, натолкнули нас на мысль о дизайне механизма синхронизации в GDI. Дизайн GDI в Windows Vista предполагает, что лишь у одного приложения в заданный промежуток времени может быть эксклюзивный общесистемный "замок". Сегодня это может показаться странным, но когда это решение принималось, характеристики производительности различных элементов системы такое решение казалось вполне разумным.
Одновременно запущенные GDI-приложения конкурируют за получение этого замка, чтобы иметь возможность прорисовки рабочего стола. Приложение, получившее захват, не позволяет другим приложениям прорисовывать рабочий стол до тех пор, покуда захват не будет освобожден. Ситуация может усугубиться, когда приложению, осуществившему захват, необходимо осуществить подкачку большого объема памяти с диска в системную память. Вышеприведенное изображение иллюстрирует два одновременно запущенных GDI-приложения, конкурирующих за получение глобального захвата. Если приложение X осуществляет захват, оно может прорисовать рабочий стол, тогда как приложение Y не может и ждет, пока приложение X закончит свою работу.
Рис. 3. Архитектура согласования GDI в Windows 7.
Решение кроется в снижении конкуренции за захват и улучшении согласования путем пересмотра механизма внутренней синхронизации, через который различные приложения могут одновременно осуществлять визуализацию. От борьбы за владение глобальным захватом удалось избавиться путем внедрения нескольких более мелких захватов, которые не обладали эксклюзивностью и были призваны улучшить параллелизм. Увеличенное число захватов привело к некоторой избытычности в сценариях, в которых пользователь взаимодействует всего с одним приложением в заданный промежуток времени.
Особое внимание было уделено совместимости GDI-приложений, поскольку изменения в механизме внутренней синхронизации наиболее часто используемого стэка API могли бы привести к росту числа проблем, связанных с таймингами, и, в частности, с некорректным выполнением визуализации окон.
Наша работа возымела положительный эффект, увеличив производительность визуализации несколькими конкурирующими GDI-приложениями на многоядерных процессорах. Многоядерные компьютеры от этого только выигрывают, потому что теперь одновременно могут визуализироваться более одного приложения.
После того, как на пути к бета-версии были выполнены работы по согласованию GDI, мы увидели существенное сокращение количества проблем, связанных с отзывчивостью и вызванных борьбой приложений за эксклюзивное владение ресурсами. Чтобы убедиться в масштабируемости новой реализации, мы создали тесты по прорисовке 2D-примитивов и замерили скорость визуализации, запустив несколько копий таких тестов. Скорость замерялась путем сложения показателей частоты кадров (FPS) всех запущенных приложений. Ниже приведены результаты на четырехядерной системе.
Рис. 4. Согласование и масштабируемость GDI.
Без согласования GDI-приложений в Windows 7 скорость визуализации ограничена производительностью одного ядра процессора. Ввиду того, что лишь одно приложение может осуществить глобальный захват, а другие вынуждены ждать, такой сценарий нисколько не выигрывает от использования многоядерных процессоров. Это показывает, что GDI-приложения в Windows 7 менее зависимы друг от друга. Новые драйвера при этом не требуются -достаточно драйверов для Vista (WDDM 1.0) или более новых.
Настольная графика - потребление памяти
Еще одним фактором, имеющим существенное влияние на отзывчивость системы, является потребление памяти. Увеличение объема памяти (RAM) приводит к увеличению активности, связанной с подкачкой, а это, в свою очередь, приводит к снижению отзывчивости системы. Таким образом, для обеспечения максимальной отзывчивости системы необходимо, чтобы приложения и компоненты ОС использовали системную память по минимуму.
В Windows Vista объем памяти, необходимый для работы с несколькими окнами, линейно зависел от количества открытых окон. Это приводило к значительному потреблению памяти в случае работы с большим количеством окон или в случае использования монитора с высоким разрешением. Ситуация усугублялась, если вы использовали несколько мониторов. По мере изучения различных способов увеличения отзывчивости ОС мы получили отличную возможность сократить потребление памяти менеджером DWM. В Windows Vista у каждого окна GDI-приложения было два распределения в памяти, в которых содержалась абсолютно идентичная информация - одно в видеопамяти, другое - в системной. DWM отвечает за построение рабочего стола с помощью графической карты. Информация размещается в видеопамяти для быстрого доступа графической карты. Дубликат присутствует в системной памяти потому, что GDI визуализируется с помощью мощностей процессора без различного рода помощи в виде ускорения от графической карты. Поскольку CPU осуществляет все задачи по визуализации GDI-приложений, процессору требуется быстрый доступ к кэшированной копии памяти.
Рис. 5. Текущее распределение памяти.
Windows 7 хранит всего одну копию распределения для одного окна приложения, избавляясь от копии, которая находится в системной памяти. Таким образом, для одного отдельно взятого окна GDI-приложения потребление памяти снизилось в два раза.
Рис. 6. Распределение памяти в Windows 7.
Нам также удалось достичь снижения потребления системной памяти путем ускорения основных GDI-операций с помощью графической карты - WDDM-драйвера ускоряют операции, чтобы снизить влияние производительности чтения из видеопамяти. Выполнение этих операций силами одного CPU может оказать негативное влияние на производительность. Для того, чтобы решить, какие именно операции необходимо ускорить, важно понимать схемы использования различных GDI-приложений. Мы выбрали 100 самых популярных GDI-приложений, чтобы изучить их схемы обращений к памяти, частоту и природу GDI-приложений.
Рис. 7. Схемы обращений к памяти и частота GDI -операций для 100 популярных GDI-приложений.
На базе полученной статистики, фрагмент которой можно наблюдать выше, мы помогли нашим партнерам обеспечить поддержку в их драйверах ускорения наиболее часто используемых GDI-операций. Системы под управлением Windows 7 с этими обновленными драйверами, известными под названием WDDM v1.1, выигрывают от работы по снижению потребления памяти. Обратите внимание, что драйвера версии WDDM 1.0 корректно работают и полностью поддерживаются в Windows 7. В ходе бета-тестирования вы, пожалуй, могли видеть драйвера версии 1.1 на Windows Update, но они также носили статус "Beta".
Рис. 8. Сравнение потребления памяти DWM при использовании WDDM 1.1 и WDDM 1.0.
Изображение сверху показывает, что экономия памяти становится все ощутимее по мере роста открытых окон приложений. А поскольку экономится системная память, снижается активность подкачки, и в результате отзывчивость системы увеличивается.
Безусловно, ради этого приходится идти на уступки. Так, к примеру, избавление от дубликации памяти, которое ускорило некоторые операции, в некоторой степени снизило производительность, потому что теперь процессору приходится считывать данные из видеопамяти. Анализ реально существующих приложений показал, что такие операции крайне редки. Тем не менее, определенные микротесты GDI, которые осуществляют эти операции, показывают незначительное падение производительности. Это важно знать, если вы запускаете тесты, повторяющие определенные операции GDI, ведь подобные тесты плохо отражают реальную производительность. Наши исследования показали, что это падение производительности не имеет прямого влияния на работу пользователей, при этом снижение потребления памяти очень благотворно сказывается на общей отзывчивости Windows 7. Все внесенные изменения особенно заметны на компьютерах с ограниченным количеством системной памяти и с разделяемой графической памятью.
Игровая производительность
Никакая из статей о графической производительности не может считаться завершенной без разговора о играх, которые до сих пор являются одним из самых обсуждаемых аспектов графической производительности. Существует ряд популярных тестовых пакетов, как 3D Mark, а также встроенные игровые тесты, имитирующие игровые нагрузки без участия пользователя. Все эти пакеты постоянно обсуждаются на игровых сайтах, а в заключении статей выдаются рекомендации пользователям.
При разработке Windows 7 мы усердно сотрудничали с нашими графическими партнерами, помогая им улучшить игровую производительность WDDM-драйверов с учетом архитектурных изменений Windows 7 и без нарушения совместимости. Наши постоянные инвестиции в инструменты оценки производительности помогли нам и нашим партнерам отследить и проанализировать различные проблемы, приводящие к снижению графической производительности, и устранить их в последующих версиях драйверов. Фундаментальные основы WDDM в Windows 7 остались неизменными. Изменились лишь некоторые политики планирования GPU и управления памятью в целях увеличения производительности в некоторых сценариях.
В связи с тем, что подобные тестовые пакеты весьма чувствительны к определенным устройствам, прошивкам, драйверам, а также потому, что они получили широкое распространение, мы оставим сравнительные тестирования третьим лицам. Как в случае с другими аспектами работы Windows 7, мы стремимся обеспечить лучшую производительность в разных направлениях. Мы искренне считаем, что лучше один раз увидеть, чем сто раз услышать. что касается Windows 7, мы рекомендуем проводить сравнительное тестирование с Windows Vista SP1, приняв во внимание, что драйвера WDDM 1.1 все еще находятся в разработке.
В заключение
Как видите, разрабатывая Windows 7, мы усердно трудились над улучшением архитектуры для обеспечения высокой графической производительности в реальных сценариях. От этого выигрывают пользователи по оба конца спектра графических решений - и бюджетные системы, на которых становится возможным беспрепятственно пользоваться Windows, и высокопроизводительные с многоядерными процессорами, которые смогут более эффективно работать с ресурсоемкими графическими приложениями.
Амит Читре (Ameet Chitre),
программный менеджер команды Desktop Graphics
В оригинале:
Windows 7 хранит всего один экземпляр для каждого окна приложения, полностью избавляясь от копии в системной памяти. Таким образом, для одного отдельно взятого окна GDI-приложения потребление памяти снизилось в два раза.
У вас:
Windows 7 хранит всего одну копию распределения для одного окна приложения, используя в полной мере копию, которая находится в системной памяти. Таким образом, для одного отдельно взятого окна GDI-приложения потребление памяти снизилось в два раза.
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.04 секунд (Общее время SQL: 0.019 секунд - SQL запросов: 63 - Среднее время SQL: 0.0003 секунд))