Замедление времени (Time Dilation)

Замедление времени (Time Dilation, TIDI)механизм, позволяющий «замедлить» время на узле кластера, обслуживающего данную солнечную систему, таким образом, чтобы минимизировать задержку между отправкой команды со стороны клиента EVE Online и её выполнением на стороне сервера. За счёт такого замедления времени можно избавиться от ситуации, когда при большом количестве игроков на узле кластера могут возникать огромные незапланированные задержки между отправкой команды и её выполнением, что называется «лагом».

Суть замедления времени можно понять после просмотра фильма «Матрица». Всё вокруг делается медленнее: ракеты летят медленнее, корабли двигаются и поворачиваются медленнее, циклы работы модулей — более продолжительные. Хотя, некоторые вещи замедляться не будут. Сюда можно отнести: таймеры POS, таймеры суверенитета, скорость прокачки навыков и прочее подобное.

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

О тасклетах, планировщиках и уступках

Сервер EVE Online, по сути, представляет из себя инструмент, который обрабатывает тасклеты. Тасклет, если немного упростить его смысл — это задание: задание обработать TCP-пакет от клиента игры, задание «разрушить корабль» (которое не только удалит корабль из списка объектов сцены, но и отправит команду программам-клиентам игры прорисовать взрыв на его месте, да и вообще будет много раз обращаться к базе данных) и так далее. При этом, в один момент времени может выполняться только один тасклет, поэтому требуется отдельный код, который будет решать, какой тасклет должен исполняться именно сейчас. Этот код называется планировщиком тасклетов. 

Планировщики бывают разные. Тот, который управляет тасклетами, — циклический, с кооперативной многозадачностью. Цикличность проявляется в том, что каждый тасклет имеет шанс выполниться один раз — до того, как другой тасклет выполнится два раза. Никаких приоритетов и особого отношения: у всех равные права для исполнения. Кооперативная многозадачность подразумевает, что тасклет не будет прерываться из вне, пока выполняется. Он исполняется до момента, пока не закончится, или не выдаст планировщику специальный сигнал о том, что ему нужно на время прерваться, уступив очередь следующему тасклету. Это называется «уступка».

Алгоритм работы выглядит примерно так:

обработка очереди тасклетов

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

Система работает замечательно, пока не объединяются два фактора: большое количество тасклетов и большое количество запросов к ресурсам у одного или нескольких, или всех. Когда сервер EVE Online перегружен, на обработку одного цикла тасклетов может уходить пять и более секунд, так как их — большое число. И для завершения «общительного» тасклета может понадобиться огромное количество времени — пропорциональное количеству обращений тасклета к ресурсам и промежутку времени, необходимого для обработки всего цикла заданий. Разрушение корабля — один из хороших примеров, который это иллюстрирует: тасклет, отвечающий за это, много раз обращается к БД, поэтому ему часто приходится «нарезать круги», а при большой нагрузке на сервер время его полного исполнения будет исчисляться минутами. В итоге, игрок видит свой корабль и пытается им управлять, активировать модули и так далее, хотя судно уже разрушено — просто соответствующее задание ещё не обработалось до конца и клиенту не была отправлена команда отобразить это.

Если гора не идёт к Магомету, значит он идёт к горе. Если очередь тасклетов не удаётся обрабатывать в реальном времени, то можно... замедлить реальное время. Система TIDI для этого и была разработана.

Очень многое в движке EVE Online привязано ко времени: модули, физика, движение, варп-прыжки — всё это пропорционально заданным промежуткам времени. И если замедлять время, то нагрузка от них будет снижаться так же пропорционально. Как только нагрузка вырастает до уровня, при котором начинаются лаги, время замедляется, и разросшаяся очередь тасклетов успевает обрабатываться «вовремя». Как только нагрузка падает, скорость течения времени возвращается до нормального уровня. К тому же, весь этот процесс можно автоматизировать, и, например, когда нагрузка составит 102% от нормальной, сервер автоматически растянет время на 98% от обычного.

Как это видят пользователи в больших сражениях?

Для примера, возьмём битву, в которой около 1 600 участников. Когда приварпывает атакующий флот и начинает «настраиваться» (выпускать дронов, активировать всякие модули), нагрузка на сервер очень сильно возрастает, потому как подобные мероприятия очень требовательны к ресурсам. В этот момент время очень сильно растягивается — оно составит где-то 5% от нормального (т.е в 20 раз медленнее обычного). Как только все настроились, нагрузка снижается, и время ускоряется, скажем, до 30%. Игроки сразу увидят замедление, так как элементы интерфейса и всё вокруг начинает «тормозить»: иконки модулей медленнее мигают, ракеты летят медленнее, взрывы тоже замедляются. Через некоторое время на поле боя остаётся 1 200 человек. В этот момент нагрузка стала меньше, и скорость течения времени достигает 60%. Возможно, в этот момент командир одного из флотов решает, что они проигрывают и командует отступление. Массовый отварп увеличивает нагрузку, и скорость времени снижается до 10%, пока у проигравших сверкают пятки. После того, как удочки смотаны, на сцене остаются только победители, а они создают небольшую нагрузку, и время возвращается к 100%.

Заключение

Конечно же, замедление времени в EVE Online не решает всех проблем, так как в игре много моментов, не опирающихся на скорость его течения. Так же, не имеет смысла, например, замедлять время до 0,1% при слишком уж больших битвах. Будет казаться, что оно вообще остановилось. Нужно устанавливать определённый порог для TIDI. Но опять же, при достижении такого порога начнутся лаги. Налицо — циклическая проблема с кооперативной многозадачностью.

Источник: http://community.eveonline.com/devblog.asp?a=blog&nbid=2307

Категория: Разное | Добавил: Heritor (25 Февраль 2012) | Автор: Heritor Skoliya E W
Просмотров: 4740 | Теги: технологии, замедление времени, time dilation | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
»Рубрики«
Новичкам [21]
Информация о том как начать играть и как освоиться в игре
Таблицы [10]
Различная сводная информация
Расы [8]
Описание рас Нового Эдема
Хроники [96]
Хроники мира EVE Online. Перевод хроник официального сайта игры
Разработчикам [27]
API, IGB, технологии
Рассказы [1]
Творчество автора данного сайта
Разное [8]
Материалы общего характера
»Поиск«
»Ссылки«
»О сайте«

SKOLI.ru — русский фан сайт игры EVE Online. Статьи и новости с официального сайта eve-online о мире Нового Эдема, гайды, переводы хроник EVE, скриншоты и обои, амбиентная музыка из игры, видео.

»Статистика«

© 2008-2017 SKOLI.RU
Обязательна ссылка на источник, если вы используете материалы, расположенные на данном сайте.
COPYRIGHT NOTICE
EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. is not in any way affiliated with, Skoli.ru. CCP is in no way responsible for the content on or functioning of this website, nor can it be liable for any damage arising from the use of this website.