Перейти к содержимому

Донат
На хостинг
ISK за переводы
до 75kk за 1000зн.
Хроники EVE
Сборник
Новичкам
Полезная информация
Фотография

Ракеты ненавидят хомячков


  • Авторизуйтесь для ответа в теме
118 ответов в теме

#1
Tester128

Tester128

    scourge heavy missile

  • Tech III Pilots
  • PipPipPipPipPip
  • 2898 сообщений
1080
  • EVE Ingame:tester128
  • Corp:-FRS-
  • Ally:.-D-.
  • Client:Eng
Ракеты ненавидят хомячков
reported by CCP Veritas | 2011.02.07 19:45:05
оригинал

Привет. Спасибо что оторвались от битвы с саньшей чтобы взглянуть на этот девблог. Он посвящен ракетам, процессорам и всему такому.

Вначале я хочу сказать, что все описанные изменения еще не реализованы на транке. Мы собираемся вводить эти изменения по одному, следить за эффектом и в зависимости от результатов включать один элемент и переходить к другому. По этой причине у нас нет четкого расписания, но скорее всего первые эффекты изменения вы сможете заметить в больших сражениях начиная с четверга. Возможно в результате тестирования окажется что данные изменения работают не так как ожидалось и тогда мы не будем их вводить. Тем не менее я решил что сами по себе результаты будут интересны, но имейте в виду вышесказанное.

Ракеты

Как уже говорилось в предыдущих девблогах (1 , 2 ), ракеты обходятся недешево. CCP Masterplan провел замечательную работу по их оптимизации в Destiny (физический движок EVE), но ракеты все еще остаются достаточно ресурсоемкими по сравнению с другими видами оружиияя, так что мы продолжили разбираться в проблеме.

Чтобы понять, почему именно ракеты требуют больше ресурсов, чем, скажем, лазеры, посмотрим что именно надо сделать при активации ланчера:

Добавить физический объект (шар) в симуляцию
Добавить объект в инвентарь солнечной системы
Добавить объект в движок Dogma (отвечающий за активацию модулей и рассчет характеристик объектов)
Промоделировать полет ракеты через пространство для определения столкновения с целью
Взорвать ракету
Удалить объект из Dogma, инвентаря и физической симуляции

В общем, много всего. Часть этих операций относительно дешева в вычислительном плане (например, совершенно неожиданно, симуляция полета), часть достаточно ресурсоемка (например, работа CCP Masterplan значительно уменьшила нагрузку от этапа «добавить физический объект в симуляцию»). И все это нужные полезные вещи, позволяющие игроку убежать от ракеты или убить ее смартбомбой или дефендером.

Мы потратили какоето время рассматривая по очереди все эти операции на предмет возможной оптимизации. И обнаружили много интересного.

Запрос на проверку имеет ли персонаж необходимые навыки для запуска ракеты проводился дважды.
Запрос модификатров каждого атрибута ракеты за счет навыков ароводился дважды
Были убраны старые забытые функции которые не использовались уже несколько лет
Каждая ракета инициализировалась полным набором данных для NPC ИИ. Практически все они не использовались и теперь убраны из инициализации.
Многие подсистемы движка обрабатывали взрыв ракеты точно также, как взрыв корабля. Исправлено.
Изменен алгоритм рассчета урона от ракеты, так что теперь нужные даные не запрашиваются, пока в них не возникает необходимость

Кроме того, это небольшое исследование привело к двум значительным изменениям.

Поддельная Догма для ракет

Раньше при запуске ракеты (или, благослави вас бог, группы ракет) в движке Dogma для нее создавался новый объект. Поскольку это был новый объект, его атрибуты были не определены и при каждом запросе атрибута, запрос, естественно, промахивался мимо кэша и вызывал полный набор рассчетов. Эта операция занимает примерно 0.08 миллисекунды, что в общем то не очень много, если забыть что у каждой ракеты 10 атрибутов,а в гирде несколько сотен ракет.

Главный момент здесь следующий – ракета в космосе имеет точно такие же атрибуты как и ракета в ланчере. Так что мы можем просто скопировать известные атрибуты ракеты-в-ланчере для нашей свежесозданной ракеты-в-космосе и больше не делать для нее никаких дополнительных вычислений внутри Dogma. Поскольку ракеты-в-ланчере не имеют индивидульного индентификатора, то все сводится к запросу типа ”вот те ракеты в вон том ланчере”, результат которого будет оставаться одним и тем же между запусками ракет, так что мы можем рассчитать атрибуты один раз и пользоваться ими до тех пор, пока не поменяем тип патронов. Такой подход также значительно повлиял на время, необходимое для запуска и взрыва ракеты, поскольку инициализация и уничтожение этих неполных ”поддельных” объектов происходит намного быстрее.

Инвентаризация

В процессе тестирования вышеописанных изменений я обнаружил, что со временем производительность немного падает. Сравнив результаты работы Telemetry в начале тестирования и в конце, я обнаружил, что основная разница заключается в работе кода, удаляющего ракеты из инвентаря солнечной системы. Это определенно имеет смысл, но выглядит не радостно. В процессе тестов я я создал и убил множество кораблей и оставил в системе кучу мусора. Если скорость обработки инвентаря системы до такой степени зависит от количества объектов в космосе, то чтото тут неладно.

Так оно и оказалось. Впереди техническая мумбаюмба


Когда мы делаем запрос к базе данных, мы получаем результат в виде структуры данных, прозводной от структуры List (список) в Python. Эта структура реализована в виде массива указателей на значения элементов. Такой подход практически идеален для большинства случаев, поскольку в результате мы получаем упорядоченный список строк базы данных и ничего в нем не менеям.

В случае инвенторя дело обстоят по другому. Мы получаем ответ на первоначальный запрос к базе в виде списка, но затем мы этот список изменяем и при этом не особо заботимся об упорядоченности. Добавление объектов к списку оносительно дешево, новый элемент просто довавляется в конец. Но вот поиск и удаление просто неописуемо ужасны. Поскольку список не имеет индекса и возможностей сортировки, поиск элемента для изменения линеен. Удаление элемента, соответственно, включает в себя сначала линейный поиск этого элемента, а затем копирование всех последующих элементов на одну позицию выше. Обычно зависимость вида O(n) это знак завершения работы, но в данном случае это признак больших проблем.

Решение оказалось ужасно простым – заставить систему инвентаря запрашивать структуру "set" вместо структуры ”list”. В коде оказалось всего несколько мест где инвентарь рассматривался явно в виде списка и мы их быстро починили. Результатом оказалось очень заметное увеличение количества ракет, обрабатываемых сервером в секунду. Также есть надежда что это приведет к общему увеличению производительности, поскольку инвентари используются во многих частях игры.

Довольно слов, я хочу красивую картинку!
Изображение

Методология: для получения этой картинки я заставил 200 кораблей стрелять в хакерско-читерский дрейк. Скорость стрельбы была искуственно поднята до тех пор, пока обработка полностью не загрузила сервер, после чего я записал скорость срабатывания модулей на ноде и усреднил ее за 60 секунд стабильной работы.

tl;dr: Речь идет от пятикратном уменьшении загрузки от ракет. Ракеты все еще остаются более ресурсоемкими чем пушки, но уже в разумных пределах. Надеюсь эти изменения облегчат жизь пилотам после того как пройдут тестирование и будут реализованы на транке.

Счастливых полетов, мои друзья-дрейкофилы,

~CCP Veritas

Сообщение отредактировал Tester128: 08 February 2011 - 18:23

  • 16

Изображение


Дс Дс дс...да что это вообще такое? ну летает какая-то шайка. шайка шайкой, профессиональные ногебаторы...не более...

Вааб бааб дааб тааб. Трололо!


#2
CHoh

CHoh

    EVE Offline

  • Tech III Pilots
  • PipPipPipPipPipPipPipPipPip
  • 13333 сообщений
2131
Интересно, насколько же древний код правится, что такие косяки выкапываются и такие оптимизации возможны.
Пусть копают, перепишут понемногу весь хлам)

Спасибо что оторвались от битвы с саньшей чтобы взглянуть на этот девблог.

Ну-ну. А с ней ещё кто-то воюет, что ли? Ещё не все забили?


ПыСы, прочитал уже в оригинале, но за перевод спасибо.

Сообщение отредактировал CHoh: 08 February 2011 - 18:11

  • -1

#3
Tester128

Tester128

    scourge heavy missile

  • Tech III Pilots
  • PipPipPipPipPip
  • 2898 сообщений
1080
  • EVE Ingame:tester128
  • Corp:-FRS-
  • Ally:.-D-.
  • Client:Eng

Интересно, насколько же древний код правится, что такие косяки выкапываются и такие оптимизации возможны.
Пусть копают, перепишут понемногу весь хлам)

лол, примерно тоже самое я думал пока читал

Каждая ракета инициализировалась полным набором данных для NPC ИИ. Практически все они не использовались и теперь убраны из инициализации.

вот это вообще убило :)
  • 0

Изображение


Дс Дс дс...да что это вообще такое? ну летает какая-то шайка. шайка шайкой, профессиональные ногебаторы...не более...

Вааб бааб дааб тааб. Трололо!


#4
София

София

    эта клон

  • Tech III Pilots
  • PipPipPipPipPipPipPip
  • 6821 сообщений
2667
  • EVE Ingame:Safjhas
  • EVE Alt:научите
  • Corp:нупку выгнале...
  • Ally:работа.гов
  • Channel:Russian
  • Client:Eng
с саншей воюет СЕ глянь их киллборду я с нее валялась
  • 0

80.gif
убить, изнасиловать и сьесть! (или как-то так)
нупка, неграмотная, петка здравствуйте грабли и снова я!, каребирка, крашенная в брюнетку блондинка, певепе ниумею


#5
Ssa

Ssa

    Clone Grade Iota

  • Tech III Pilots
  • PipPipPipPipPip
  • 1812 сообщений
216
  • Client:Eng
Проблема в том, что и хомячки ненавидят ракеты. Сделайте что нибудь)
  • 0

#6
January

January

    Clone Grade Mu

  • Tech III Pilots
  • PipPipPipPipPipPipPip
  • 7376 сообщений
330
Я не понял, это таки нерф Неназываемого?
  • 0

#7
Tester128

Tester128

    scourge heavy missile

  • Tech III Pilots
  • PipPipPipPipPip
  • 2898 сообщений
1080
  • EVE Ingame:tester128
  • Corp:-FRS-
  • Ally:.-D-.
  • Client:Eng

Проблема в том, что и хомячки ненавидят ракеты. Сделайте что нибудь)


все всех ненавидят, и в этом гармония мира еве
  • 0

Изображение


Дс Дс дс...да что это вообще такое? ну летает какая-то шайка. шайка шайкой, профессиональные ногебаторы...не более...

Вааб бааб дааб тааб. Трололо!


#8
Кас

Кас

    Clone Grade Delta

  • Tech III Pilots
  • PipPip
  • 189 сообщений
2
  • EVE Ingame:Synonym
  • Corp:имперский карибас
  • Ally:-
  • Client:Eng

Главный момент здесь следующий – ракета в космосе имеет точно такие же атрибуты как и ракета в ланчере. Так что мы можем просто скопировать известные атрибуты ракеты-в-ланчере для нашей свежесозданной ракеты-в-космосе и больше не делать для нее никаких дополнительных вычислений внутри Dogma.


Я так и вижу предстоящий баг и вайн на форумах "я за последние два месяца прокачал уйму скиллов на ракеты а их дамаг не увеличился!!!111". А ССР знай себе "копирует" атрибуты ракеты из лончера который был зафичен в корабль год назад. :) Поэтому будем перефичивать (а то и перепаковывать) корабли после каждого выученного скилла. :)

И вопрос уже риторический: зачем, ну зачем они просчитывают каждую ракетку как физический объект со своей траекторией? Раз уж ракеты все из себя такие физические, даешь возможность их бампать! :) Будет профессия "интер - бампатель цитаделек, спаситель капиталов". :( Ихмо убрали бы все рассчеты, свести все к слегка усложненной формуле турелей "выстрел - ждем n сек полета ракеты при текущей дальности до цели, после истечения которых проверяем находится ли еще объект в гриде и на дистанции поражения, не были ли запущены дефендеры, применяем в формулу текущую сигу и скорость цели, т.е. расчеты фактически идентичные расчетам дамага турели, только все также отложенные на n секунд". А уж клиенты пусть рисуют хоть зигзагообразные траектории полета ракет, это нагрузку на сервер не дает.
  • 0

#9
Saeki

Saeki

    Clone Grade Eta

  • Tech III Pilots
  • PipPipPipPip
  • 751 сообщений
28
  • EVE Ingame:Saeki Sayoko
  • Corp:Neaga
  • Ally:Гипсо-чегототам
  • Client:Eng

Я так и вижу предстоящий баг и вайн на форумах "я за последние два месяца прокачал уйму скиллов на ракеты а их дамаг не увеличился!!!111". А ССР знай себе "копирует" атрибуты ракеты из лончера который был зафичен в корабль год назад. :) Поэтому будем перефичивать (а то и перепаковывать) корабли после каждого выученного скилла. :)

И вопрос уже риторический: зачем, ну зачем они просчитывают каждую ракетку как физический объект со своей траекторией? Раз уж ракеты все из себя такие физические, даешь возможность их бампать! :) Будет профессия "интер - бампатель цитаделек, спаситель капиталов". :( Ихмо убрали бы все рассчеты, свести все к слегка усложненной формуле турелей "выстрел - ждем n сек полета ракеты при текущей дальности до цели, после истечения которых проверяем находится ли еще объект в гриде и на дистанции поражения, не были ли запущены дефендеры, применяем в формулу текущую сигу и скорость цели, т.е. расчеты фактически идентичные расчетам дамага турели, только все также отложенные на n секунд". А уж клиенты пусть рисуют хоть зигзагообразные траектории полета ракет, это нагрузку на сервер не дает.


затем, что ракеты в отличие от залпа лазера можно сбить
  • 0

#10
Tester128

Tester128

    scourge heavy missile

  • Tech III Pilots
  • PipPipPipPipPip
  • 2898 сообщений
1080
  • EVE Ingame:tester128
  • Corp:-FRS-
  • Ally:.-D-.
  • Client:Eng

И вопрос уже риторический: зачем, ну зачем они просчитывают каждую ракетку как физический объект со своей траекторией? Раз уж ракеты все из себя такие физические, даешь возможность их бампать! :) Будет профессия "интер - бампатель цитаделек, спаситель капиталов". :) Ихмо убрали бы все рассчеты, свести все к слегка усложненной формуле турелей "выстрел - ждем n сек полета ракеты при текущей дальности до цели, после истечения которых проверяем находится ли еще объект в гриде и на дистанции поражения, не были ли запущены дефендеры, применяем в формулу текущую сигу и скорость цели, т.е. расчеты фактически идентичные расчетам дамага турели, только все также отложенные на n секунд". А уж клиенты пусть рисуют хоть зигзагообразные траектории полета ракет, это нагрузку на сервер не дает.


это не факт совершенно, они уже несколько раз писали что сама симуляция полета жрет минимум ресурсов. основные затыки и тут и в предудыщем варианте были в создании объекта, уничтожении объекта и проверках. хз не будет ли "проверяем находится ли еще объект в гриде и на дистанции поражения" занимать больше ресурсов чем нанешняя реализация
  • 0

Изображение


Дс Дс дс...да что это вообще такое? ну летает какая-то шайка. шайка шайкой, профессиональные ногебаторы...не более...

Вааб бааб дааб тааб. Трололо!


#11
Spitfire*Нейтрал

Spitfire*Нейтрал
  • Guests
Даёшь буст ДПС ракет с помощью hydraulic bay thrusters! xDDD
ps
если сделают эти оптимизации, при отварпе из грида дамаг запущенной ранее ракетой будет таки наноситься или как сейчас - нет?

Сообщение отредактировал Spitfire: 08 February 2011 - 18:53

  • 0

#12
Atmega

Atmega

    Clone Grade Ksi

  • Tech III Pilots
  • PipPipPipPipPipPipPipPipPip
  • 10365 сообщений
2123
  • EVE Ingame:Atmega
  • Corp:MEN
  • Client:Eng
Это не нерф, наоборот, теперь можно нагнать в систему жуткие стада, в пять раз больше!
  • 0

We don't need to get a life, we gamers have many lifes.

Time you enjoy wasting, was not wasted.


#13
h0use

h0use

    把手拿回

  • Tech III Pilots
  • PipPipPipPipPip
  • 2309 сообщений
245
  • EVE Ingame:Den McConan
  • EVE Alt:Chingage Hook
  • Channel:Mozg
  • Client:Eng

Я так и вижу предстоящий баг и вайн на форумах "я за последние два месяца прокачал уйму скиллов на ракеты а их дамаг не увеличился!!!111". А ССР знай себе "копирует" атрибуты ракеты из лончера который был зафичен в корабль год назад. B) Поэтому будем перефичивать (а то и перепаковывать) корабли после каждого выученного скилла. :)

Более чем уверен что все характеристики корабля относительно бонусов персонажа рассчитываются при андоке + висит евент на случай прокачки скила, тогда может быть тоже пересчитываются. А заряды дополнительно пересчитываютс при релоаде.
  • 0

No Character can be found with 'dobrodetel' in the beginning of its name.


#14
Yalg

Yalg

    Clone Grade Delta

  • Tech III Pilots
  • PipPip
  • 236 сообщений
2
  • EVE Ingame:Yalg
  • Client:Eng

Это не нерф, наоборот, теперь можно нагнать в систему жуткие стада, в пять раз больше!

Прийдут мамы и стада отправятся учить уроки.
Поэтому я бы ставлю на качество, а не количество.
  • 0

#15
DireSnake

DireSnake

    Clone Grade Ksi

  • Tech III Pilots
  • PipPipPipPipPipPipPipPipPip
  • 13233 сообщений
4158
  • EVE Ingame:DireSnake
  • Corp:Percone
  • Client:Eng
ну.... вместо "залп с 7ми лаунчеров" ФК будет орать "дрейки, разгруппированными! по цели! огонь! ф1,ф2,ф3....".... и будет нагрузка в 7 раз больше.
  • 0

#16
Old Hroft

Old Hroft

    Clone Grade Mu

  • Tech III Pilots
  • PipPipPipPipPipPipPip
  • 6135 сообщений
2879
  • EVE Ingame:Old Hroft
  • EVE Alt:11
  • Corp:AND.
  • Ally:INIT, exXIX, exAAA, exWN
  • Channel:DCBIPublic
  • Client:Eng
бедыне ццп. хотят что бы пушки группировали... при этом в лагах их как раз разгруппировывают
  • 0

Бомбим, бомбим. Наш рекрут топик: Корпорация Deep Core Bombing Inc. [DCBI]

 

Вылеты на бобрах для всех: Dive Bombers Academy


#17
Ank Burov

Ank Burov

    Svidomeat

  • Tech III Pilots
  • PipPipPipPipPip
  • 2627 сообщений
150
  • EVE Ingame:Ank Burov
  • Corp:NPC
  • Client:Eng
Онанисты от гей-дева, блин. Решение на поверхности - сделать рокетам мгновенный дамаг, а прорисовку оставить клиенту. И все будут довольны.

Но нет! Нужно заниматься хрен пойми чем зачем в бородатом коде прошлого века. Свидомиты.
  • -7

#18
h0use

h0use

    把手拿回

  • Tech III Pilots
  • PipPipPipPipPip
  • 2309 сообщений
245
  • EVE Ingame:Den McConan
  • EVE Alt:Chingage Hook
  • Channel:Mozg
  • Client:Eng

Онанисты от гей-дева, блин. Решение на поверхности - сделать рокетам мгновенный дамаг, а прорисовку оставить клиенту. И все будут довольны.

Но нет! Нужно заниматься хрен пойми чем зачем в бородатом коде прошлого века. Свидомиты.

Тогда калдыри станут имба с их выборочным дамагом и независящими от капы ланчерами. Хот я лично я согласен на такой буст.
  • 0

No Character can be found with 'dobrodetel' in the beginning of its name.


#19
Улитка

Улитка

    Clone Grade Alpha

  • Tech III Pilots
  • Pip
  • 59 сообщений
6
  • EVE Ingame:Fast Snail
  • Corp:WH Ghost
  • Ally:U N K N O W N
  • Client:Рус

Главный момент здесь следующий – ракета в космосе имеет точно такие же атрибуты как и ракета в ланчере. Так что мы можем просто скопировать известные атрибуты ракеты-в-ланчере для нашей свежесозданной ракеты-в-космосе и больше не делать для нее никаких дополнительных вычислений внутри Dogma.


Вот только ракеты в ланчере не модифицируются от балконов. Только скорострельность от балконов воздействует на ланчер.

А второй персчёт делался для того чтобы учесть модификаторы балконов на урон (уже в космосе).
Если тупо копировать статы ракеты с корабля, то получится нерф дпс-а ракетчиков на ~15-25%

Напишите кто-то на офф форуме об этом, а то я на иностранных языках не очень.

Сообщение отредактировал Улитка: 09 February 2011 - 2:16

  • 0

#20
Edgardus

Edgardus

    gaybond pilot

  • Tech III Pilots
  • PipPipPipPipPip
  • 2017 сообщений
308
  • EVE Ingame:sold
  • Ally:GE
  • Channel:noobian club
  • Client:Eng
ппц.
я так надеялся на няшный буст ракет.
  • 0

Eve account - $15 US a month, dreadnaught - 2 Billion ISK, hiring a mercenary Dust group to assault a planet- $5 million ISK now, $50 million when the job is done.
Bombarding the Dust team from orbit and laughing like the machiavellian and sociopathic dickhead spreedsheet have made you, then recording the console tards emo tears and posting them on youtube? Priceless

 





0 посетителей читают тему

0 members, 0 guests, 0 anonymous users