Анализ журнала Fraps frametimes - выявляем фризы в играх
Оглавление
- Вступление
- Тестовый стенд и настройки.
- Получение мгновенного FPS.
- Дальнейшая обработка и анализ значений
- Повторяемость результатов.
- Заключение
Вступление
На просторах интернета можно найти бессчетное множество статей про видеокарты, но большинство их созданы по одному и тому же принципу: все авторы меряют минимальный и средний FPS, а кто-то еще и максимальный. Насколько ценны эти замеры, насколько объективно они отражают уровень комфорта во время игры? Я пришел к выводу, что не очень, а всё потому, что такая методика совершенно не учитывает микрозадержки, они же микролаги или фризы.
Проблема микролагов известна давно, особенно остро она стояла лет пять назад у владельцев карт ATI. Суть в том, что на долю секунды FPS падает до неприлично низкого уровня, причем делает это с раздражающей регулярностью. В такой ситуации средний FPS будет в полном порядке, поскольку на пару «медленных» кадров приходится тысяча нормальных, а минимальный FPS покажет только худший лаг, он может быть не очень сильным, но проблема в том, что лаги частые!
В наши дни микролаги преследуют владельцев multi-GPU систем или компьютеров с недостаточным объемом оперативной/видео памяти, а также с банально неудачными версиями драйверов. Кроме того, они проявляются при быстрых перемещениях в плохо оптимизированных для такого поведения движках. Типичные примеры это демо сцены полёта над открытой местностью в шутерах. Огромные локации с высокой детализацией, а тем более «бесшовный» мир обязывают подгружать данные с жесткого диска на лету. Если диск не успевает, фризы не заставят себя долго ждать.
Стоит упомянуть и лаги, возникающие при резком усложнении сцены, а именно при красочных взрывах и разрушениях с реалистичной физикой. С ними такая же проблема: минимальный FPS выявит последствия только самого большого взрыва, а средний FPS практически не будет зависеть от числа этих взрывов.
реклама
В такой ситуации не остается ничего другого, кроме как записывать время отрисовки каждого кадра. Тут может помочь популярнейшая программа FRAPS, а точнее ее способность записывать лог frametimes, хотя это еще полдела. Результаты нужно переработать так, чтобы их было удобно воспринимать, и чтобы получить возможность объективно сравнивать разные системы между собой. В данной статье описан мой способ это сделать.
Тестовый стенд и настройки.
Демонстрационные примеры снимались на следующем тестовом стенде:
- Процессор: Intel Core i7 930, 4 ГГц (200 х 20, 1,35 В);
- Система охлаждения: GlacialTech Siberia;
- Термоинтерфейс: КПТ-8;
- Материнская плата: Asus P6T SE (BIOS 0805);
- Оперативная память: Corsair Dominator TR3X6G1600C8D DDR3 1600 МГц, 8-8-8-20, 3x2 Гбайт;
- Жесткий диск: WD Velociraptor, WD6500HLHX-01JJPV0, 450 Гбайт;
- Видеокарта: Sapphire Radeon HD 5670, 1 Гбайт GDDR5;
- Блок питания: Enermax Modu 87+, 700 Вт.
Программное обеспечение:
- Операционная система: Windows 7 x64 Ultimate Build 7600 RTM RUS;
- Обновления операционной системы: все на 01.11.2010, включая Direct X;
- Драйвер для видеокарты: Catalyst 10.10.
- Драйвер для SATA контроллера: Intel RST 9.6, контроллер работает в режиме RAID.
Получение мгновенного FPS.
Надеюсь, вы решили оценить предлагаемый метод, уже неоднократно испытав классический вариант, поэтому не стану объяснять, где скачать FRAPS, как его установить и как запускать, а перейду сразу к делу. Чтобы получать лог frametimes, достаточно поставить нужную галочку в настройках:
Если вы не меняли пути, то после замеров в каталоге C:\Fraps\Benchmarks будет появляться файл ***frametimes.csv. Это текстовый файл с запятыми-разделителями, в который еще зачем-то добавлены пробелы, с такими файлами проще всего работать в MS Excel. Открывать файл следует не как обычно, а через импорт данных. В Excel 2007 это вкладка «Данные», группа «Получить внешние данные», кнопка «Из текста».
реклама
После указания файла в появившемся мастере текстов на первом шаге оставляйте всё по умолчанию (формат данных: с разделителями), на втором выставите символом-разделителем запятую, третий шаг можете пропустить и сразу нажать «Готово». Импорт следует начать с ячейки A1 (настройка по умолчанию). В итоге должны получиться два столбца данных:
Теперь из этих данных нужно получить время отрисовки каждого кадра и мгновенный FPS. Время отрисовки это не что иное, как разница между временны́ми отметками соседних кадров, а мгновенный FPS – обратная величина времени отрисовки, умноженная на 1000 (поскольку время указано в миллисекундах).
Дальнейшая обработка и анализ значений
На основе столбца с мгновенными FPS можно построить интересный график. Для примера я взял результаты из бенчмарка «S.T.A.L.K.E.R.: Зов Припяти» со следующими настройками:
- Разрешение 1680x1050;
- Установки: средние;
- Рендер: Улучшенное полное освещение (DX10).
Вот так выглядят мгновенные FPS в первом тесте днем:
Замер по классической схеме выдал minFPS=26 и avgFPS=38,57. Со средним всё понятно (это общее количество кадров, деленное на длину демо сцены в секундах), а про минимальный есть большой вопрос. Какие 26, если кадр №3347 рисовался аж 110 мс, что дает менее 10 FPS??? Это явный лаг, заметный на глаз, но значение minFPS говорит, что всё хорошо. И ведь есть полно кадров, с мгновенным FPS меньше 27!
Для наглядности стоит создать еще один столбец и еще один график, в котором посчитано число вхождений кадров в определенный диапазон. Для простоты расчетов я просто отбрасывал дробную часть значения FPS и считал, как часто встречается то или иное целое число. Получилась группировка по диапазонам шириной в 1 FPS.
График на основе этих столбцов выглядит так:
Самые быстрые кадры в этом замере выдавали мгновенные значения более 300 FPS, но в этом графике я решил их не учитывать и ограничиться значением 100 FPS. Кстати, FRAPS намерял maxFPS=50. Проверка показала, что это число отражает максимальное количество кадров, отрисованных в течение одной секунды.
Акцент данной статьи сделан на выявлении микролагов, так что предлагаю рассмотреть более подробно «медленные кадры», левее основного «колокола» нормального распределения, скорость которых менее 30 FPS.
реклама
Наверняка кто-то посчитает границу в 30 FPS недостаточной и захочет рассмотреть больший диапазон. Напоминаю: сейчас я описываю теоретический метод, а данная тестовая система просто пример. На компьютерах с более мощными видеокартами основная группа кадров будет располагаться гораздо правее, тогда в «медленную» группу можно включить и 40 FPS, и 50, хотя падение скорости до 50 FPS это вовсе не лаги.
Вернемся к графику. Теперь видно, сколько кадров было медленными и насколько медленными. Но картина всё еще не оптимальна для восприятия.
Во-первых, нужно объяснять, что маленькая отметка в значении 9 FPS говорит о худших вещах, чем полоса, скажем, на значении 27 FPS. Один кадр с мгновенной скоростью 9 FPS это статическое изображение на протяжении 110 мс, а четыре кадра 27 FPS наверняка идут непоследовательно, плюс замирание картинки на 37 мс не настолько страшно.
Во-вторых, все привыкли, что в разных столбцах содержатся разные категории. А представьте, что будет, если на этом же графике отобразить такой же набор данных, сдвинутый на 1 FPS вбок – получится хаос из разноцветных лестниц! А если попытаться сравнить штук пять систем?
Предлагаю провести еще одну обработку полученных данных, а именно: посчитать, как долго FPS находится ниже заданного уровня. Раз уж я решил объединять FPS по группам путём отбрасывания дробной части, нужно сложить времена прорисовки всех кадров, целая часть FPS которых одинакова. Взгляните на пример:
График по этому столбцу получается такой:
Теперь время, в течение которого FPS находится ниже определенного уровня, демонстрируется одной простой линией.
Повторяемость результатов.
Нет ничего сложного, чтобы провести три замера и вычислить средние результаты.
Не могу похвастаться очень точным совпадением трех вариантов, но качественно все они одинаковы: кадров медленнее 14 FPS практически нет, кадры медленнее 21-25 FPS длятся в сумме 5 секунд.
Давайте посмотрим, как поведет себя эта система в сравнении с другой в том же бенчмарке на одинаковых настройках:
|
|
|
Процессор |
|
|
Материнская плата |
|
|
Оперативная память |
|
|
Жесткий диск |
|
|
Видеокарта |
|
|
ОС |
|
|
Особенность |
|
|
Если кратко, процессор на основной тестовой платформе разогнан сильнее, но Radeon HD 5670 явно слабее GeForce 8800 GT.
Для начала, вот графики с усредненными по трем замерам minFPS и avgFPS:
Включите JavaScript, чтобы видеть графики
GeForce 8800 GT легко разгромил соперника… или не легко? Надеюсь, вы уже поняли, что minFPS не показывает скорость самого медленного кадра сцены. Давайте посмотрим на другой график.
Средний FPS у 8800 GT конечно выше, поэтому медленных кадров 20-30 FPS в разы меньше, но посмотрите: самый медленный кадр имел скорость <3 FPS, это конкретный фриз! А потом еще были группы по 5,6,7 FPS – за время прохождения демо сцены система лагала несколько раз! Надеюсь, теперь вы понимаете, почему я тестировал две разные платформы, одна из которых с весьма «заезженной» операционной системой. Если бы я просто поменял видеокарты на одной платформе, такого яркого результата не получилось. Эти две кривые раскрывают всю информацию о фризах, хотя классический способ замера ни на что подобное не указывал.
Заключение
Предложенный метод существенно дополняет общепринятые замеры среднего FPS информацией о фризах и переопределяет смысл минимального FPS в том виде, в котором он измеряется большинством программ. Итоговые графики несут в себе достаточно много ценной информации и при этом остаются простыми для восприятия.
Данный метод позволяет тестировать качество работы игр в зависимости от любых мыслимых параметров: центрального процессора, жесткого диска, оперативной памяти, даже версии драйверов. Им же можно проверить эффективность работы SLi или CrossFireX решений.
Основным недостатком метода является его трудоемкость. Получение итоговых графиков занимает существенно больше времени, чем простое сведение в общую диаграмму значений среднего и минимального FPS, хотя после однократного создания расчетного файла Excel, задача значительно упрощается.
P.S. Любой желающий может поэкспериментировать с вычислением интересующих его значений. Файл Excel, который использовался при написании статьи, доступен для скачивания здесь , достаточно импортировать лог из FRAPS в ячейку A1. Редактор макросов вызывается комбинацией Alt+F11, а меню запуска макросов – Alt+F8. При желании на макрос можно назначить горячую клавишу.
P.P.S. Спасибо KAA за корректировку статьи и дополнение расчетных методов.
Теги
Лента материалов раздела
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила