reported by CCP Atlas | 2008.12.08 11:45:25 | Оригинал девблога
Клиент ЕВЕ – История Любви
Здравствуйте товарищи обитатели Нью Эдена (New Eden). Я хотел написать несколько слов, чтобы описать некоторые проблемы, которые у нас были с производительностью клиента недавно, и объяснить грядущие стратегии по поводу этих проблем.
Коротая Версия
(без техноболтовни)
В Quantum Rise, мы подпортили производительность клиента ЕВЕ. Это грустно, но это правда…
В Quantum Rise 1.0.1 и 1.0.2 мы сделали её лучше снова. В Quantum Rise 1.0.3, который будет на этой неделе, мы сделаем её шикарной.
Длинная версия
(с техноболтовнёй)
Вот настоящая история любви клиента, которую вам обещали в заголовке. Она довольно хорошо похожа на Hero's Journey (Приключения героя (прим. перев. Русский вариант не так подробен к сожалению)) с нашим протагонистом, Евой Литлой (Eva Litla), которая в начале получила великую несправедливость из рук антагониста (мы будем называть его Мистер Баг (Mr. Bag)) Во втором акте, Ева Литла начинает понимать свой потенциал и в атмосферной финальной сцене она возвращается чтобы сразить Мистера Бага. В любом случае, я не хочу испортить концовку, но она довольно классная.
Содержание
• Акт 1 – Quantum Rise 1.0.0
• Акт 2 – Quantum Rise 1.0.1
• Акт 3 – Quantum Rise 1.0.2
• Акт 4 – Quantum Rise 1.0.3
o Общее описание графических ограничений производительности
o Специфические графические ограничения производительности Премиума.
o Ограничение производительности из-за интерфейса
o Новые пользовательские настройки для оптимизации производительности
• Интерлюдия – гайд по выживанию во флотах
• Образец главы сиквела
• Эпилог
Акт 1 - Quantum Rise 1.0.0
В течение последних лет или где-то около того мы агрессивно улучшали производительность нашего сервера на нескольких фронтах. Мы добавили новое оборудование, перешли на 64-битную систему, ввесли StacklessIO и сделали множество изменений производительности сервера и базы данных, больших и маленьких.
Многие считают, что никогда серверный кластер не был таким здоровым как сейчас и это мнение подкреплено данными: житовский лаг ушёл в прошлое, миссионые хабы обычно расслаблены и несколько недель назад мы видели сражение флотов с 1000 участникми на Транквилити, то о чём мы мечтали долгое время. В том сражении был приличный лаг, но производительность ноды понизилась несильно и у нас было удовлетворительное качество сервиса. За что все мы заслуживаем большой похвалы.
Не так быстро. После выхода расширения Quantum Rise 11 ноября (в котором были несколько оптимизаций сервера и базы данных) клиент кажется остался за дверью.
Мы получили множество жалоб от наших игроков что клиент производительность по большей части стала хуже чем раньше. Проблема в том что мы не смогли воспроизвести подобных результатов в домашних условиях и это полностью прошло через наши сети до релиза. Судя по всему несколько несколько лишних и недостающих кусочков были пропущены, но всегда одно и тоже когда пробуешь немного сделай-сам, не так ли?
Мы всё-таки нашли некоторые проблемы через несколько дне после релиза Quantum Rise. Несколько новых фишек под-капотом в движке графики Тринити вызывали проблемы в ситуациях высокого стресса и обработка ресурсов стала хуже чем до этого. Это было кое-что что особенно хорошо проявлялась когда на однопроцессорной машине запускалось несколько клиентов.
Зная последствия, мы должны были выловить это, но мы не смогли. Бессмысленно говорить что неделя после Quantum Rise не был нашим лучшим моментом. Хотя мы и улучшили производительность сервера и базы данных в Quantum Rise, из-за проблем в клиенте ощущение было такое, что общая производительность упала. А восприятие – это реальность, а виртуальном мире оно вдвойне важнее.
Акт 2 - Quantum Rise 1.0.1
Ок, теперь к хорошим новостям. Как только мы воспроизвели на внутреннем сервере проблемы с производительностью, мы тут же незамедлительно ввели нескольких очень умных людей в дело по обработке этих проблем.
Выяснилось что мы имели обширные проблемы с памятью и утечки, но самая большая проблема ушла корнями в специфическое закрытие ресурсов которые ушли за пределы процесса. (прим. перев. Не смог нормально перевести. Я так понимаю речь идёт об утечках, которые забивали память, причём эта память не освобождалась при отключении ЕВЕ). Это не проявлялась а многопроцессорных тестах и выявило себя при определенных условиях , когда запускаешь 2 клиента на однопроцессорной машине или когда компьютер экстремально сильно нагружен.
Так что, в субботу 22 Ноября, через 11 дней после ввода расширения Quantum Rise сы ввели Quantum Rise 1.0.1, которые был патчем только для клиента, и исправлял критические проблемы с производительностью из Quantum Rise 1.0.0.
Мы очень рады, что поставили патч, и особенно, что успели ввести его до пиу пиу на выходных (1337 человек собирались стрелять друг в друга из больших пушек). Это потребовало огромных усилий в части где была задействована команда разработчиков и заняло много длинных часов, но к счастью у нас было множество конфет, так что всё было не так плохо.
Акт 3 - Quantum Rise 1.0.2
Мы вложили много сил в патч Quantum Rise 1.0.1, и люди оставлись на вечера, ночи и выходные чтобы исправить вещи. Наши команды сделали кучу исправлений для улучшения производительности и пригодности, но они требовали тестов, которые мы не могли сделать до субботнего патча. Мы решили не рисковать с введением, а сделать ещё один патч для сервера и клиента несколькими днями позже со всеми этими некритическими изменениями.
Quantum Rise 1.0.2 был выпущен 27 ноября и содержал большое количество мелких изменений чтобы убрать замедления и многие из них улучшали пригодность. С выпуском Quantum Rise 1.0.2 мы полностью убрали огрехи в работе клиента, которые появились с выпуском Quantum Rise.
Акт 4 - Quantum Rise 1.0.3
Несмотря на то что производительность возвращена на уровень до Quantum Rise (верно?), мы ещё не закончили.
На этой неделе мы выпустим Quantum Rise 1.0.3, которая упакована с улучшениями производительности. Мы потратили много времени в изучении клиента и в поисках ограничений. Большая часть улучшений клиента, которые мы делаем в Quantum Rise 1.0.3 призваны исправить старые ошибки, и сделать лучше, чем было раньше.
Мы в основном смотрели на подвисания клиента которые происходят, когда происходит множество всего в одно и то же время. Зависание программ пока они обдумавают что-либо – это что-то из 1997 года и мы будем долго работать стараясь исправить это в будущих патчах. Это кое-что специфичное, а не то с чем люди сталкиваются постоянно пока играют. Тем не менее, это круто, что смотря на эти специфичные сценарии мы в действительности глядим на общую производительность клиента. Мы действительно должны напрягать клиент до его поломки и дальше, чтобы выявить вещи, которые, если их добавить, могут привести к общему понижению производительности.
Несколько флотовых боёв наблюдались на нашем тестовом сервере, где наши игроки показали как они играют в игру и позволили нам собрать информацию о специфичных способах использования клиента. Мы использовали эту информацию чтобы сконструировать новый способы в направлении использования клиента в уникальных условиях флотового боя. Эта работа привела нас к Quantum Rise 1.0.3. Несмотря на факт, что флотовые бои и сценарии сильной нагрузкой вызывают основные проблемы с производительностью, мы планируем увидеть некоторое глобальное улучшение производительности во многих разных случаях.
Я не могу достаточно хорошо обозначить насколько важны флотовые тесты и репорты игроков. Это было изумительно наблюдать, как игроки совершили основной прыжок в битве, дабы помочь нам сделать клиент лучше. Это было настоящим подтверждением того насколько сильно Комьюнити ЕВЕ.
В любом случае, возвратимся к истории. В частности мы ататкуем производительность клиента на следующих фронтах:
• Общее описание графических ограничений производительности
• Специфические графические ограничения производительности Премиума.
• Ограничение производительности из-за интерфейса
• Новые пользовательские настройки для оптимизации производительности
Общее описание графических ограничений производительностих
Когда мы сделали VTuning клиента мы заметили, что под определенными условиями клиент использовал слишком большое количество времени в RtlReAllocateHeap (см. Kernel32.HeapReAlloc, который ссылается на NTDLL.RtlReAllocateHeap). Это случалось не сразу, а только если находился некоторое время под специфической нагрузкой, и только под Windows XP. На Windows Vista мы получили совсем другой поведение со значительным использованием памяти каждый раз.
В нашем мире это значит, что через некоторое время загрузки ресурсов, память становиться фрагментированной, что приводит к понижению производительности когда копируются ресурсы памяти. Мы делаем множество копирований ресурсов в памяти, от появления нового корабля на экране до загрузки меню, так что со временем процесс становится всё медленнее и медленнее. Это приводило к слишком-уж-большому падению производительности после игры в определенном стиле. Это не затрагивает всех игроков под Windows XP и не любое железо одинаково реагировало на это, вот почему это было сложно обнаружить. Также, это не случается на Windows Vista.
После некоторых исследований мы заметили что стандартный процесс для «кучи» (прим. перев. heap или «куча» - область памяти, выделяемая программе для динамически размещаемых структур данных) в Windows XP был не оптимальным для нашей нагрузки ресурсов. Нам пришлось заменить его на специализированную Low Fragmentation Heap. Это изменение сделало время затрачиваемое на загрузку ресурсов гораздо более удовлетворительным. Также «куча» для ресурсов объекта теперь отделена от «куч» остальных процессов что позволяет распределителю памяти более оптимально использовать блоки для своих нужд.
Производительность под Windows Vista в этом случае всё равно намного лучше чем под Windows XP, но производительность под Windows XP теперь должно быть намного более универсальной чем раньше.
Пока мы откапывали это, наши команды нашли ещё несколько вещей, которые могут быть изменены и утечки памяти которые мы можем устранить, что привело к гораздо более хорошему управлению ресурсами.
Специфические графические ограничения производительности Премиума
Когда в ЕВЕ была введена Премиум графика в расширении Тринити (не смущайтесь из-за графического движка Тринити, который упоминался выше (не спрашивайте…)) логика для подгрузки турелей была различна в Классике и Премиуме. В Классическом варианте турели подгружались лениво. Тем не менее, мы верили (и это было подкреплено измерениями) что производительность Премиума настолько крута, что нет необходимости в этой ленивой подгрузке турелей. Поэтому модели турелей подгружались и рисовались как только Родительская модель (корабль) входила на сцену и не было возможность игрокам отключить это.
Мы обнаружили что наши изначальные прикидки и тесты производительности оказались неверны, и в реальной ситуации (например, космическая игра) стоимость подгрузки в реальном времени слишком высока. И частота смены кадров страдала из-за слишком большого количества турелей, и подгрузка большого количества турелей (например, приварп в крупный бой) гораздо более дорогостояща.
Так что, мы переносим ленивую подгрузку турелей из Классики в Премиум. Это означает что турели будут подгружаться только если удовлетворено одно из двух условий:
• Вы использовали команду Look At на этом корабле.
• Корабль стреляет из своих турелей и Turret Effects включены (в стандарных настрйках они включены).
Это означает, что корабли теперь не будут показывать модели своих турелей, пока не начнут стрелять. Если вы отключите Turret Effects через меню настроек (Эскейп меню) тогда в большинстве случаев вы будете видеть турели только на своём корабле.
Если вам действительно нужно видеть турели на корабле, вам достаточно разок на нём активировать команду 'look at' из ПКМ меню. И турели на нём будут рисоваться до тех пор пока корабль не уйдёт.
Ограничение производительности из-за интерфейса
Мы делаем некоторые фантастические (и сильно запоздалые) измения производительности для пользовательского интерфейса. Для патча Quantum Rise 1.0.3 самая заметная часть это то как контейнеры (такие как окна и кнопки) прорисовываются. Меньше вызово прорисовки и производительность заметно увеличилась, когда у вас открыто много оконо, особенно на слабых компьютерах или сильно загруженных компьютерах.
Прорисовка и подгрузка Брэкетов была сильно оптимизирована. Подгрузка брэкетов теперь будет проходить намного быстрее чем раньше. Особенно это относится к случаю когда подгружается большое количество брэкетов.
Мы продолжаем над эти работать до конца года, и возможно введем новые изменения в производительность интерфейса после Нового Года или в следующем расширении.
Новые пользовательские настройки для оптимизации производительности
Из тестов флота, которые мы проводили с нашими замечательными игроками на тестсервере, были обнаружены несколько ограничений, которые не могут быть устранены сами по себе, но вызывают проблемы и ситуациях с сильной нагрузкой. Имейте ввиду, что если вы хайсековый каребир (как я) эти опции скорее всего не изменят производительность вашего клиента. Тем не менее, если вы собираетесь пиу пиу с тысячей людей, вам нужно это прочесть.
Мы добавили следующие опции в меню настроек:
• Отключение моделей дронов
o Это сделает так, что ваш клиент не будет подгружать модели дронов, значительно улучшая производительность в Классике и Премиуме, если вы участвуете в сцене с большим количеством дронов.
• Отключение эффектов взрыва.
o Эффекты взрыва могут сильно измотать вашу систему и вызывать подвисание если их слишком много на экране в одно и то же время.
• Отключение тактических сообщений
o Вы можете отключить сообщения о скрамбле, селфдестрактах и т д. Это не даёт большое прирост производительность, но чутка помогает.
• Отключение тряски камеры.
o Мы вводим это, потому что очень многие просили, но этот эффект не влияет на производительность.
Вдобавок мы теперь имеем простой способ быстро отключить все брэкеты, точно также как раньше можно было включить все брэкеты.
Если вы отключите все те опции, то ЕВЕ не будет так красиво выглядеть, но это может быть разницей между жизнью и смертью во флотовых баталиях.
Мы вложили много усилий в Quantum Rise 1.0.3 в короткий промежуток времени. Поскольку там есть несколько низкоуровневых изменений, есть вероятность что некоторые проблемы всплывут, но нам кажется что людям больше понравится иметь крутой патч для производительности сейчас и позволит нам идти к новым исправлениям, нежели чем ждать до после Нового Года. Пожалуйста продолжайте работать с нами после выхода этого патча, чтобы продолжать получать улучшения производительности и пригодности клиента.
Красивые графики
Большая порция разработок в Quantum Rise 1.0.3 направлены на получение наших измерений и получение более хороших оценок. Поэтому мы испытывали клиента в больших ситуациях чем раньше. Это привело в выявлению некоторых проблем. Как только проблема найдена, происходят исправления которые часто не очевидны для крайне умных людей, разрабатывавших код в этой области.
Здесь вы можете видеть некоторые графики, которые мы сгенерировали, чтобы найти ужасные места в нашей производительности и сравнение с решением к которому мы пришли в каждом случае.
Рисунок 1: Экстремальный пример запуска Дронов и сравнение Empyrean Age vs. Quantum Rise 1.0.3 и предсказуемый результат при отключении моделей дронов. (напдписи на рисунке: «Запуск 1000 Orge I», показывается изменение ФПС с течением времени)
Рисунок 2: То же самое что и на Рисунке 1, но камера отдалена и модели не рисуются. Теперь у нас нет падения производительности при появлении большого количества объектов, когда они не прорисовываются.
Рисунок 3: Раньше клиент подвисал на 60 секунд на тестовой машине, если включить все Брэкеты для 2000 кораблей. Теперь это время 12 секунд.
Рисунок 4: Поскольку мы больше не подгружаем турели, пока оно не нужно мы видим сильное изменение во времени подгрузки и ФПС, когда приварпываем к турельным кораблям.
Рисунок 5: То же самое что и на Рисунке 4 но когда камера отдалена. Заметно только небольшое икание клиента если сравнить с Emperyan Age.
Рисунок 6: Здесь мы видим эффект оптимизации загрузки ресурсов на Low Fragmentation Heap в Классическом клиенте.
Рисунок 7: Low Fragmentation Heap Лучше работает на Премиум Клиенте, но загрузка ресурсов была и так лучше чем на Классике.
Рисунок 8: смартанье большого количество НПЦ сразу показывает насколько дорого стоят эффекты взрыва. Теперь их можно отключить.
Нужно заметить что все примеры здесь экстремальные. Они не отображают опыт игры. В лучшем случае они показывают проблемные области, на которые мы смотрели. Эти графики до и после скорее всего не будут соответсвовать ничему, что вы испытаете сами.
Это было сказано, изменения - шикарные :-)
Интерлюдия – гайд по выживанию во флотах
С изменениями, которые мы делаем в Quantum Rise 1.0.3 флотовые бои с тысячами людей, должны доставлять больше удовольствия (по крайней мере выигрывающей стороне, мы не так много можем сделать для других бедных парней *хихикнул*… ой извините).
Вот список вещей, которые вы должны сделать, чтобы ФПС был достаточным хотя бы для того, чтобы увидеть, когда же вас поднут. Важно, чтобы вы настроили свой клиент до входа в бой, потому что часть настроек будут работать только при подгрузке новой сцены и, если у вас были включены некоторые тяжелые опции, ваш клиент может так и не восстановиться после варп-ина прежде чем вы обнаружете себя на станции с дружелюбным голосом Ауры рассказывающей вам о последних достижениях в технологии клонирования.
Если вам нравится ваш ФПС и прогрузка с любой из этих вещей включенной, то можете продолжать использовать свой клиент в таком духе и дальше. Тем не менее, если выбор между красивостью и производительностью, я уверен вы выберете производительность. Этот список сделан по приоритетам с самыми важными вещами в верху списка.
• Включайте только ровно нужное вам колчиство Брэкетов (как минимум отключите брэкеты дронов и вреков)
• Отключите модели дронов
• Отключите турельные эффекты
• Максимально отдалите вашу камеру от корабля на всё время приварпа
• Отключите Эффекты взрыва
• Отключите Эффекты
• Отключите звук (кроме EVE Voice, он не должен влиять на производительность).
• Отключите сообщения о дамаге и тактические сообщения
• Отключите тени и HDR
• Лучше всего использовать Windows Vista (люди могут ненавидеть его, но его родное управление «кучей» намного лучше).
Вы наверно заметили что этот список не включает такую вещь как 'run in classic mode'. До Quantum Rise 1.0.3 он входил бы в список, но производительность в осноном схожа сейчас, если у вас современное железо, которое тянет Премиум клиент, то скорее всего нет причин переключаться на Классику перед флотовым боем. Вообще говоря, на Премиум клиенте производительность может оказаться даже лучше.
Образец главы сиквела
Мы будем работать над производительность клиента после Quantum Rise 1.0.3. Мы уже имеем несколько классных улучшений производительности на очереди, которые мы не можем ввести в этом патче из-за временных ограничений. Но не беспокойтесь, будут патчи клиента и после этого.
Некоторые вещи над которыми мы уже работаем включают:
Ленивая Подгрузка Моделей:
Мы собираем полностью убрать подвисание клиента, которое вы получает при варпе в тяжелые сцены. Это знакомое чуство получаемое вами (которое было сильно смягчено в Quantum Rise 1.0.3) когда ваш клиент перестает отвечать как раз перед тем как вы увидите ваш сверкающий под, будет устранено. Это будет невероятно важное изменение для всех, от флотовых бойцов до агентраннеров, потому что каждый раз приварпывая в сцену с кучей объектов вы будете видеть разницу.
Больше улучшений производительности ресурсов:
Много работы должно быть сделано в подгрузке ресурсов. Мы будем улучшать процесс и исполнение частоиспользуемых операций.
Улучшение производительности Симуляции:
Мы нашли несколько ограничений производительсности в движке симуляции физики которая действует в мире. Это ближе всего к клиенту который прогоняет свою собственную симуляцию будет иметь лучшую производительность, когда вокруг поблизости множество объектов.
Больше улучшений производтельности интерфейса:
Много работ продолжает производится над ФПС интерфейса чтобы улучшить производительности окон и брэкетов. Мы увидим заметные изменения в производительности интерфейса в ближайшее время.
Эпилог
Мы шикарно провели время вводя крутые исправления и работая вместе с нашим комьюнити чтобы обнаружить проблемные области в производительности клиента. Мы надеемся, что будем продолжать вводить патчи улучшающие производительность, когда они нужны. Команды здесь сделали изумительную работу в создании этих исправлений и замечательное Комьюинити ЕВЕ Онлайн был весьма терпиливо и помогало нам в этот период.
В заключении, без желания прозвучать нескромно я должен сказать, что с Quantum Rise 1.0.3 клиент EVE Online будет наиболее производительным куском программного обеспечения, когда либо сконструированного за всю историю человечества :-)
Конец.
Jon Bjarnason
Technical Director
EVE Online, CCP Games
Сообщение отредактировал Trimutius III: 10 December 2008 - 23:13