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

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

Чиним лаги: дрейки судьбы (часть 1)


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

#1
Tester128

Tester128

    scourge heavy missile

  • Tech III Pilots
  • PipPipPipPipPip
  • 2898 сообщений
1080
  • EVE Ingame:tester128
  • Corp:-FRS-
  • Ally:.-D-.
  • Client:Eng
Чиним лаги: дрейки судьбы (часть 1)
reported by CCP Masterplan
оригинал

Слушайте

Превед. Я – CCP Masterplan, один из членов Команды Затык (Team Gridlock). Мы в Затыке занимаемся разборками с ухудшением производительности под большими загрузками – в частности стараемся сделать веселее столь характерные для EVE массовые сражения звездных флотов.

Пока CCP Veritas всячески развлекался с включением/выключением модулей, я наблюдал за другой часть нагрузки на сервер. Фигня в космосе. А именно, добавление и убирание фигни, перемещение фигни и как сообщить клиенту что делать с этой фигней.

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

Тест

Первый шаг в улучшении производительности при высоких нагрузках – научиться воспроизводить ситуации при которых эти нагрузки возникают. Раньше это делалось во время массовых тестов. Но теперь у нас есть чудесные тонкие клиенты и мы можем воспроизвести разные аспекты флотовых сражений в любой момент.

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

* 200 тонких клиентов летят на дрейках (у каждого 3 полностью заряженных хеви миссайл ланчера, изображающих 3 группы ланчеров)
* 100 тонких клиентов летат на других кораблях. Они изображают нагрузку от наблюдателей – других участников боя. Это важный момент, поскольку вычислительная цена ракеты в некоторой мере пропорциональна тому ,сколько клиентов ее наблюдают.
* 1 палка в стиле ‘звезда смерти'. Палка сконфигурирована НЕ отвечать на аргессию.

Каждый дрейк лочит палку. Затем каждый дрейк стреляет по палке пока у него не кончатся патроны. Это соответсвует примерно 5-6 минутам непрерывной нагрузки от ракет.

Количество шипов было выбрано из соображений загнать нагрузку на ноду до примерно 95% во время стрельбы (найдено экспериментальным путем). Это важная цифра, поскольку примерно при такой нагрузке начинают появляться лаги (задержки активации модулей, замедление отклика на команды движения, задержки на пропрыге и так далее) Данные цифры нельзя напрямую сравнивать с основным сервером, поскольку там установлен другой хардвер, но примерная пропорция сохраняется.

Пока нагрузка на сервер стабильна, мы можем закускать разные профайлеры и оптимизаторы чтобы проанализировать как именно распределяются вычислительные мощности. Также мы можем определить улучшения производительности по сравнению с базовыми 95%. Важно отметить, что тест предназначен для обработки нагрузки на Destiny в условиях неподвижного (не варпающего) флота. Так что он не имеет практический ценности для оценки других критических моментов (например пропрыгов в гейт – это отдельная тема). Стрельба из турельного оружия также не рассматривалась, поскольку она вызывает меньшую нагрузку чем ракеты. Но работа идет – как только нам удастся решить проблемы с нагрузками от одного вида деятельности, вклад других в общую нагрузку соотвественно возрастет и они тоже получат свою долю Специальной Любви (тм) Команды Затык.

Я твоя судья, в смысле судьба

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

Для начала несколько терминов

* Стадион (Ballpark): обрабатывает пространство одной солнечной системы, состоит из пузырей.
* Пузырь (Bubble): Небольшой объем пространства в котором могут взаимодейстовать объекты (игрокам известен также под названием ”грид”) Пузыри могут динамически увеличиваться и уменьшаться, они не могут перекрываться.
* Шар (Ball): Объект (корабль, дрон, ракета, астероид, непись, вормхол и т.д.) в пространстве. С точки зрения Destiny все объекты представлены одним или более шарами. Шары круглые.
* Тик (Tick): Destiny работает дискретными тиками. Каждый стадион делает один тик в секунду.

Тонкая машина в центре вселенной

Каждый тик состоит из трех фаз:

1) Пре-тик
* Обновление отношений шаров и пузырей
* Применение команд клиента (варп, орбита, апроч и т.д.) поступивших после окончания прошлого тика.
* Применение событий сервера (взорвать, создать ракету) произошедших после окончания прошлого тика
* Построение обновлений данных для клиента
* Пересылка обновленицй клиенту

2) Развитие

* Переместить шары в соотвествии с текущими действиями
* Вычисление столкновений между шарами
* Вызов обработчиков столкновений

3) Пост-тик

* Обработка новых клиентов (пропрыгнувшх, андокнувшихся и т.д.)
* Очистка

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

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

Фаза развития является наибоее сложной с точки зрения математики. Именно тут обсчитвается вся физика космического полета (та ее версия, которая используется в EVE). Долгое время считалось, что именно именно на эту фазу уходит большая часть вычислительного времени и соотвественно именно тут его можно будет сэкономить. Поступали даже предложения использовать для этих вычислений графические процессоры – потому что графические процессоры хорошо считают. Однако скоро вы увидите, что фаза развития на самом деле отвечает за такую мизерную долю общей вычислительной нагрузки, что подобная попытка привела бы, учитывая дополнительные затраты на коммуникацию сервера и графического процессора, только к потерям времени.

Наша новая любимая игрушка

Позвольте вам представить самое новое оружие в нашем антилаговом арсенале – профайлер Telemetry. Это утилита для визуализации производительности программ, работающих в реальном режиме времени. Разработана RAD Game Tools.

Мы начали с ней работать этим летом и все время находим ей все новые и новые применения. Telemetry фактически позволяет построить временную последовательность событий по мере выполнения кода и визуализировать полученную картину. В сочетании с тонкими клиентами мы получаем возможность создать нагрузку и затем увидеть ее своими глазами. И это делает Команду Затык счастливой.

На рисунке 1 показан 1 тик работы Destiny по версии профайлера Telemetry. По горизонтали отложено время (увеличивается вправо). По вертикали (увеличивается вниз) показано как начинается и заканчивается выполнение команд в разных секциях таймера. Выглядит примерно как эволюция традиционного стека вызовов, только вместо вызовов функций используются секции таймера. При входе в новую секцию таймера под текущим блоком добавляется новый. При выходе из секции таймера блок удаляется.

(Программисты странные твари – не только начинают считать с 0 вместо 1, но и отращивают структуры вниз, а не вверх. Вот такие мы загадочные)

Изображение
Рис 1: Типичный тик Destiny во время массового запуска ракет, помечены три основных фазы тика

Из рис.1 очевидно, что на фазу развития затрачивается меньше 10% всего рабочего времени тика Destiny. И при этом большая часть фазы развития затрачивается на вызов обработчиков столкновений – в данном случае обработчиков взрывов ракет. Именно поэтому я и говорил выше, что сейчас не имеет особого смысла ускорять работу кода симуляции.

Большая часть времени тратится в фазе пре-тика. И в основном оно тратится на две операции

1) Определить какие клиенты должны получить инофрмацию из списка шаров которые были добавлены/удалены со времени прошлого тика. Новый шар добавляется когда выстреливается ракета. Старый шар удаляется когда ракета взрывается. Дрейки умеют это делать в промышленных масштабах.

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

Если мы найдем способ оптимизировать эти две операции, то общаяя нагрузка на Destiny сильно сократится. И, как оказалось, такой способ есть. Но о том, в чем именно он заключается вы узнаете из второй части этого блога


====
вопросы и ответы из топиков на оффоруме
====
фраза drakes of destiny (part 1) и сразу после нее
Hi. I'm CCP Masterplan
чемто меня настолько пробили на хихи что я решил перевести этого слона :)
автор в оригинале тоже стебется, может не совсем так как я в переводе, но тоже достойно

алсо, для тру-программистов вопрос, что имелось в виду под

It is important to note that the Destiny tick is entirely non-blocking - we can't do any asynchronous operations such as database queries or anything that might cause execution to yield. Most of the collision callbacks, for example, simply schedule a task to be run later.

и насколько адекватно я это перевел
====

Сообщение отредактировал Tester128: 14 December 2010 - 1:22

  • 7

Изображение


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

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


#2
Franky

Franky

    Clone Grade Kappa

  • Tech III Pilots
  • PipPipPipPipPip
  • 2305 сообщений
129
  • EVE Ingame:Franky Burns
  • Corp:Frag Logistics
  • Client:Eng
Дрейксайд - зло и лаги. Они ненавидят вас и убивают ваши шипы и ноды.
Дискасс.
  • 0

#3
Daymio

Daymio

    просто Ди

  • Tech III Pilots
  • PipPipPipPipPip
  • 1509 сообщений
111
  • EVE Ingame:Daymio
  • EVE Alt:Daymi Mur
  • Corp:-TYT-
  • Client:Eng
Вот оно что в лагах виноваты неназываемые!!!
А по факту неужто назревает работа над лагами и в ближайшее время будет нерф ребаланс ракетных технологий калдари ?
  • 0

#4
CHoh

CHoh

    EVE Offline

  • Tech III Pilots
  • PipPipPipPipPipPipPipPipPip
  • 13333 сообщений
2131
Да сделают как фб, что их, зря что ли ввели в таком виде.
Анимация онли, отдельного объекта - ракеты - нет, и т.п.
  • 0

#5
Dimonikus

Dimonikus

    Clone Grade Delta

  • Tech III Pilots
  • PipPip
  • 125 сообщений
4
  • EVE Ingame:Dimonikus
  • Client:Eng
инста дамаг ракетам прикрутят и делов :)
  • 0

#6
Dfire

Dfire

    In RuSH we trust

  • Tech III Pilots
  • PipPipPipPipPip
  • 1572 сообщений
122
  • EVE Ingame:Dfire
  • Corp:RuF
  • Ally:U-RA
Спасибо

Сообщение отредактировал Dfire: 11 December 2010 - 2:02

  • 0

"R.u.S.H. - Fanatics приглашает молодых ПВП пилотов"
"R.u.S.H. - Industry приглашает майнеров и производственников"
"Кстати. Для нубов форум можно сделать ридонли до тех пор пока не наберёт 50 сообщений."©EVE-RU.COM


#7
greg2008

greg2008

    Clone Grade Kappa

  • Tech III Pilots
  • PipPipPipPipPip
  • 2198 сообщений
883
  • EVE Ingame:greg2010
  • EVE Alt:B0TAHIK
  • Corp:.X-AU
  • Ally:Fast Kick
  • Client:Eng

Да сделают как фб, что их, зря что ли ввели в таком виде.
Анимация онли, отдельного объекта - ракеты - нет, и т.п.

... И больше не будут использоваться секретные технологии фейлволов. Я за.
  • 0

этот способ для слабаков как ты. а можно еще и 3 логиста сверху взять и 4 батла. и радостно дрочить плексы.
а суровые плексеры делают плексы в 1 окно


#8
Layannel

Layannel

    Clone Grade Gamma

  • Tech III Pilots
  • PipPip
  • 103 сообщений
27
  • EVE Ingame:Layannel
  • EVE Alt:Anna Sebiestor
  • Corp:FSP-T
  • Ally:Banderlogs Alliance
  • Client:Eng
>* Тик (Tick): Destiny работает дискретными тиками. Каждый стадион делает один тик в секунду
интересно, означает ли это, что доли секунды каких-либо реал-тайм действий не имеют значения т.к. всегда будут кратны 1 сек ?

т.е., к примеру, времена лока обьекта 1.1 сек и 1.9 сек на самом деле одинаковы и равны 2 сек ?

Сообщение отредактировал Layannel: 11 December 2010 - 2:08

  • 0
Изображение

#9
Eltoron

Eltoron

    Clone Grade Gamma

  • Tech III Pilots
  • PipPip
  • 106 сообщений
3
  • EVE Ingame:Arventis
  • Corp:SPIRL
  • Ally:BLOC
  • Channel:local
  • Client:Рус

>* Тик (Tick): Destiny работает дискретными тиками. Каждый стадион делает один тик в секунду
интересно, означает ли это, что дробные величины времени каких-либо реал-тайм действий не имеют значения т.к. всегда будут кратны 1 сек ?

т.е., к примеру, времена лока обьекта 1.1 сек и 1.9 сек на самом деле одинаковы и равны 2 сек ?


Камрад. Destiny это физика. Лок и т.д. видимо это что-то другое.
  • 0

#10
1o1.sus

1o1.sus

    У вас ЕВА, это не лечится...

  • Tech III Pilots
  • PipPipPipPipPipPip
  • 5388 сообщений
451
  • EVE Ingame:1olsus
  • Corp:PO NY
  • Ally:OOS
  • Channel:PVP Bar
  • Client:Eng

т.е., к примеру, времена лока обьекта 1.1 сек и 1.9 сек на самом деле одинаковы и равны 2 сек ?


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

Сообщение отредактировал 1o1.sus: 11 December 2010 - 2:09

  • 0
Изображение

#11
MOH

MOH

    Военкор

  • Tech III Pilots
  • PipPipPipPipPipPipPipPip
  • 7904 сообщений
373
  • EVE Ingame:BOEHKOP
  • EVE Alt:Много разных
  • Corp:-TER-
  • Channel:TERMINOUT
  • Client:Eng

>* Тик (Tick): Destiny работает дискретными тиками. Каждый стадион делает один тик в секунду
интересно, означает ли это, что доли секунды каких-либо реал-тайм действий не имеют значения т.к. всегда будут кратны 1 сек ?

т.е., к примеру, времена лока обьекта 1.1 сек и 1.9 сек на самом деле одинаковы и равны 2 сек ?


Да.

Я не смотрел внутрь и на трафик (ленивый я).
Но у меня сложилось впечатление что есть куча проверок на стороне клиента.
В том числе и время лока считается на клиенте и только потом идет эвент на сервер.
С клокой похожая бодяга.

Переводчику.
Нон блокинг калл, это когда вызов тяжелой функции не блокирует выполнение программы.
Например тебе надо передать по сети 100 байт. Их можно послать и ждать подтверждения что они дошли - это блокинг.
А можно послать, продолжить заниматся делами, а уже потом проверить, дошли или нет? - это нон блокинг.
  • 1
Пишу подробный политобзор в соотв разделе, а то они уже 5й год разобратся не могут, у кого яйца из льда, а у кого из стали, бренчат то одинаково. (С) Artsnis

#12
andro1d

andro1d

    Clone Grade Theta

  • Tech III Pilots
  • PipPipPipPip
  • 1098 сообщений
50
  • EVE Ingame:Prudenter
  • Corp:Реал
  • Ally:Old WN
  • Client:Eng
Какое красивое обоснование нерфа дрейков. А в ццп знают, что лаги бывают и без участия оных?
  • 0

Проверь, а нет ли тебя в списке ошибавшихся - EVE free-2-play


#13
1o1.sus

1o1.sus

    У вас ЕВА, это не лечится...

  • Tech III Pilots
  • PipPipPipPipPipPip
  • 5388 сообщений
451
  • EVE Ingame:1olsus
  • Corp:PO NY
  • Ally:OOS
  • Channel:PVP Bar
  • Client:Eng

скип


об этом ССР говорило еще до того времени как ты в еву начал играть, это одна из задач, которую они очень и очень хорошо отрабатывают.

многие помнят фразу "Локал 300, иду по приборам" © не помню чей

Сообщение отредактировал 1o1.sus: 11 December 2010 - 2:28

  • 0
Изображение

#14
vybber

vybber

    Clone Grade Alpha

  • Tech II Pilots
  • Pip
  • 35 сообщений
7
  • EVE Ingame:Vybber
  • EVE Alt:Visanoline
  • Client:Eng

алсо, для тру-программистов вопрос, что имелось в виду под

It is important to note that the Destiny tick is entirely non-blocking - we can't do any asynchronous operations such as database queries or anything that might cause execution to yield. Most of the collision callbacks, for example, simply schedule a task to be run later.

и насколько адекватно я это перевел
====

Я бы это перевел бы так:

Так же важно понять что квант Дестини полностью не блокируемый - мы не можем вызывать какие либо асинхронные запросы, такие как запросы к базе данных либо чего угодно что может прервать выполнение кванта. Например большинство калбеков столкновений ставиться в очередь на более позднее выполнение (после кванта)

Сообщение отредактировал vybber: 11 December 2010 - 2:38

  • 1
Бобры мигрировали на юг...

#15
rzhevich

rzhevich

    Clone Grade Epsilon

  • Tech III Pilots
  • PipPipPip
  • 252 сообщений
4
  • EVE Ingame:AuriKa Po
  • Corp:NPC
  • Ally:Amarr Emp
  • Client:Eng
оффтоп: лучше б тонкий клиент выложили бы в свободный доступ )
  • 0

Leave high sec or die trying
Denn Krieg ist eine Droge // Chris Hedges


#16
Kanthu

Kanthu

    Clone Grade Iota

  • Tech III Pilots
  • PipPipPipPipPip
  • 1617 сообщений
376
  • EVE Ingame:Ljus Himmlen
  • Corp:A0E
  • Ally:Darkside.
  • Client:Eng

многие помнят фразу "Локал 300, иду по приборам" © RDLxVulture


:)

а вообще да, за бесконечным "лучше б лаги пофиксили" мало кто замечает что планка локала, при котором возникают ощутимые лаги все увеличивается.
значит работа идет.
  • 0
it's all about the killmails, baby ©

Изображение

#17
reiser

reiser

    Clone Grade Zeta

  • Tech III Pilots
  • PipPipPip
  • 368 сообщений
33
Блин. Тонкий клиент - это наверняка набор скриптов, эмулирующих клиент. Ну нафига тебе такая машина производства мыла? Помнится, была такая игра Змейка от русских программистов, где надо было в 9 алгоритмах описать бой с другой такой же змейкой. Ты сумеешь напрогать?
  • 0

#18
Psihius

Psihius

    Clone Grade Lambda

  • Tech III Pilots
  • PipPipPipPipPipPip
  • 3954 сообщений
911
  • EVE Ingame:psihius
  • EVE Alt:Loriel'a
  • Corp:Void Effect
  • Client:Eng

Блин. Тонкий клиент - это наверняка набор скриптов, эмулирующих клиент. Ну нафига тебе такая машина производства мыла? Помнится, была такая игра Змейка от русских программистов, где надо было в 9 алгоритмах описать бой с другой такой же змейкой. Ты сумеешь напрогать?

Почитайте девблоги и их фейсбук/твитер/ютуб. Тонкий клиент это тот же клиент что и у нас, только с отрезанной графикой и UI. С сервером он общается 1 в 1 как наш десктоп клиент.
  • 0

Сообщество FactorioMMO: Discord , Reddit


#19
Evenness

Evenness

    Clone Grade Delta

  • Tech III Pilots
  • PipPip
  • 211 сообщений
15
  • EVE Ingame:Evenness
  • Corp:No Value
  • Ally:xXRussian SpeceXx
  • Channel:XXRUS
  • Client:Eng
Хотел сперва юморнуть - "Посадят тонкие клиенты ны дрейки =D", потом вчитался и что-то невесело стало.

Сообщение отредактировал Evenness: 11 December 2010 - 4:32

  • 0
Чат-канал XXRUS - оказываем помощь по любым вопросам и жизненным неурядицам ;)

Живем в тихих спокойных нулях, чисто пвп-ориентированная корпорация.


#20
Ange1

Ange1

    Clone Grade Theta

  • Tech III Pilots
  • PipPipPipPip
  • 1109 сообщений
106
  • EVE Ingame:xAnge1x
  • EVE Alt:Nlka
  • Corp:Red October
  • Ally:Fast Kick
  • Channel:RO Squad
  • Client:Eng

:wub:

а вообще да, за бесконечным "лучше б лаги пофиксили" мало кто замечает что планка локала, при котором возникают ощутимые лаги все увеличивается.
значит работа идет.

ну прогресс тоже не стоит на месте, какое железо было 2-4-6 лет назад...
  • 0




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

0 members, 0 guests, 0 anonymous users