open All Channels
seplocked EVE Information Portal
blankseplocked New Dev Blog: Fixing Lag: Drakes of Destiny (Part 2)
 
This thread is older than 90 days and has been locked due to inactivity.


 
Pages: 1 2 [3] 4 5 6

Author Topic

Mirei Jun
Right to Rule
THE UNTHINKABLES
Posted - 2010.12.11 22:55:00 - [61]
 

Good work, with good explanation.

This is what I would expect from a "Dev Blog", and hope its used more exclusively for this kind of writing in the future.

Chruker
Posted - 2010.12.11 23:00:00 - [62]
 

Originally by: Mirei Jun
Good work, with good explanation.

This is what I would expect from a "Dev Blog", and hope its used more exclusively for this kind of writing in the future.


Unfortunately then the dumb people will come whining about the devblogs being too technical

Dwindlehop
Stimulus
Rote Kapelle
Posted - 2010.12.11 23:00:00 - [63]
 

This is an excellent blog. Thanks!

Kei Nagase
Minmatar
Applied Creations
The Fendahlian Collective
Posted - 2010.12.12 00:12:00 - [64]
 

I enjoyed this type of Balg

Bob Niac
Gallente
freelancers inc
Imperial 0rder
Posted - 2010.12.12 00:20:00 - [65]
 

Moar?

Siena Petrucis
Caldari
Jelly Kings
BricK sQuAD.
Posted - 2010.12.12 00:31:00 - [66]
 

Usally, pilots in a big fleet fight have all weapon effects turned off. So that means there are close to zero observers for missiles. It would be a waste to send all the updates about created and destroyes missiles to clients which do not render it. Does the server take that into account? If not, would it be a possible way for more optimization?

Khenar
Posted - 2010.12.12 00:45:00 - [67]
 

Edited by: Khenar on 12/12/2010 00:45:59
May I ask how the single-frame cache works with respect to cloaked ships? It's been mentioned before during a Fanfest that when an observer in a grid receives a client update, that update has been stripped of all information regarding cloaked ships within that grid except the observer's own ship, so that the observer could not just then analyze the update and figure out where the other cloaked ships are.

During the previous system, this seems easy to handle given that the serialization operation happened individually for each observer. But now it seems that this operation only happens once per frame. How do you distinguish the updates for those cloaked observers? From the blog, it looks like you don't store the cloaked ship operations in that cache:
"Most clients in the same bubble will received a serialised update containing the same information. Why serialize that information for every single client, when I have already determined the part they all have in common?"

This leads me to think that you are still performing individual serialization operations for each cloaked observer so that their client updates include the update information of their cloaked ship. How does this affect the performance of the node if a significant number of cloaked observers were introduced into a grid?

Edit -- Minor grammar error.

Zenon Mu
Advanced Assemblies and Sciences
Posted - 2010.12.12 00:52:00 - [68]
 

awesome! I love reading about something getting fixed :)

Infinion
Caldari
Awesome Corp
Posted - 2010.12.12 00:52:00 - [69]
 

Originally by: Salpun
Thanks for the reply but you dodged the hard part of the question. Laughing


Originally by: Salpun
Thanks for the reply. Great blog.

To some reinforced means that you are using the jita super node. Is this the case? ?


The jita super node is for Jita, if ccp removed it to reinforce a fleet fight for 24 hours between a few alliances imagine what kind of whiplash we would see on the markets

Karbon Dating
Posted - 2010.12.12 00:55:00 - [70]
 

OMG. This had to be one of the best blogs ever. As a CS major, info like this really hits the spot. I know exactly what you are talking about.

I want MORE!

Zendoren
Aktaeon Industries
The Black Armada
Posted - 2010.12.12 01:00:00 - [71]
 

Originally by: CCP Masterplan
Originally by: Ebisu Kami
Did you guys notice that, according to the graphs, the "Missiles - Inventory and Damage"-part of the load increased by roughly 12% from old to new?

I was waiting for someone to spot that! During the first test, the node was running close to 100%. Therefore the launcher modules weren't necessarily cycling at their full rate for every shot (the drakes were on the edge of experiencing module lag)
Once the CPU was lowered, the launcher were able to cycle at their full rate all the time, and so were able to pump out more missiles during the 100 seconds. More missiles means more inventory operations, so absolute inventory load increases slightly.
CCP Veritas' earlier blog explores some of these artifacts that occur at the edge of performance limits (and beyond)


With the code not currently taking advantage of multi-threading and/or multi-core processing, I'm assuming that when you reinforce the soler system (kick the other 3 soler system off the node) that you are doing it more for the memory than the processing power?

galphi
Gallente
Furnulum pani nolo
THE SPACE P0LICE
Posted - 2010.12.12 01:36:00 - [72]
 

You could also replace the physical object missiles with the 'fake' missile effects used by the fighter-bombers. It's not like anyone ever uses defender missiles anyway Very Happy

FzZZy
Gallente
Biceps Superstars
Posted - 2010.12.12 02:28:00 - [73]
 

Thanks for a good devblog. I realy like when you at CCP share your small eureka moments. You mention that the increase in inventory and explosions was due to not maxing the preformence. Is it the same case why evolve increased with 1/2 (>10ms)?

The serialization of a ball that happen every tick, can't it be cached to the next tick whare the ones that is updated is reserialized? Or does the a ball update to often?


Chssmius
legio immortalorum
United Front Alliance
Posted - 2010.12.12 02:57:00 - [74]
 

Loved the blog and would appreciate more of this type.

Originally by: Black Dranzer
Edited by: Black Dranzer on 11/12/2010 19:29:26
Originally by: Dev Blog
1: for every observer: # (ie a user's ship)
2: for every ball in the observer's bubble:
3: if ball was added/deleted to the bubble in the last tick:
4: gather up all the data required to tell the observer's client about this ball
Originally by: Dev Blog
step 4 always produces the same data for a given ball, regardless of who the observer is
Originally by: CCP, paraphrased
Let's perform redundant calculations inside a quadratic loop OH GOD WHY IS OUR CODE SO SLOW
Please visit your user settings to re-enable images.
[whywouldyoudothatpicture]


I have to agree. Aside from appearing to be more straight forward to type and think about I can't think of a reason to write the code that way(he says without looking at the real code).

Originally by: galphi
You could also replace the physical object missiles with the 'fake' missile effects used by the fighter-bombers. It's not like anyone ever uses defender missiles anyway Very Happy


As I understand it there are a problems with that. Chiefly, the fact that the fighter-bombers are now basically using guns instead of missiles.

Neo160
Posted - 2010.12.12 04:06:00 - [75]
 

question about missiles. Pre-Tyrannis (in Dominion i think), if a missile was flying slow enough, and far enough away, i could click the missile and actually track it with my camera (pretty cool), this ability was removed after Tyrannis released. was this a lag fighting decision, and if so, whats the CPU impact from being able to track missiles with the in-game camera? just curious Very Happy

great blog, very informative, as I'm in school for this kinda stuff, it helps to be able to try to wrap my head around programing code and logic without worrying about deadlines or grades Laughing, DeVry goes through stuff really fast, and they only touch on the basics, if at allNeutral.

Galius Zed
Posted - 2010.12.12 04:23:00 - [76]
 

Double-cheers and yay for pseudo code!

vOv



Aquana Abyss
Posted - 2010.12.12 05:31:00 - [77]
 

Wouldn't a better solution just be to remove the drake from game?

In fact, remove missiles too. Razz

Rok Qhang'Rawl
Joint Espionage and Defence Industries
Posted - 2010.12.12 06:22:00 - [78]
 

Good Fight!

The interesting work of optimization is more about figuring out where to make changes first than the details of the solution, but you made both parts rich and meaningful here. Nice work. Thanks for sharing.


CCP Explorer

Posted - 2010.12.12 09:13:00 - [79]
 

Originally by: Jason Edwards
Just be honest... the server code is all in pseudo code and thats why its so bad?
Pseudo code is the only thing the hamsters understand. Confused

CCP Explorer

Posted - 2010.12.12 09:15:00 - [80]
 

Originally by: Motriek
Since a copy of the serialized data is now being sent to all clients, do we (clients/observers) still see personalized transversal figures on our overview? Transversal (radians/sec) differs for every observer.
They are calculated by the client based on the movement vectors.

CCP Explorer

Posted - 2010.12.12 09:23:00 - [81]
 

Originally by: Daneel Trevize
Originally by: Black Dranzer
WHY WOULD YOU DO THAT?
Because premature optimization is evil, so first you get it to work, and then you have other things to do ugh
Indeed. First you write readable code that works. Then, based on measurements, you optimise the parts that need to be optimised.

CCP Explorer

Posted - 2010.12.12 09:29:00 - [82]
 

Originally by: Siena Petrucis
Usally, pilots in a big fleet fight have all weapon effects turned off. So that means there are close to zero observers for missiles. It would be a waste to send all the updates about created and destroyes missiles to clients which do not render it. Does the server take that into account? If not, would it be a possible way for more optimization?
All the clients in the bubble need to have the state of the simulation because they process it in sync with the server. There are also other reasons for the client to know about missiles than to render them, such as the interaction of missiles with AoE weapons.

CCP Explorer

Posted - 2010.12.12 09:35:00 - [83]
 

Originally by: galphi
You could also replace the physical object missiles with the 'fake' missile effects used by the fighter-bombers. It's not like anyone ever uses defender missiles anyway Very Happy
You have to remember that missiles interact with AoE weapons. We have given this significant thought but it's not trivial to implement.

You will note that even if the fighter bomber graphical effect is missile-like and even if the fighter bomber damage is calculated missile-style then you can't use AoE weapons to defend against their missiles.

Lan Staz
Posted - 2010.12.12 10:14:00 - [84]
 

Originally by: Zendoren
With the code not currently taking advantage of multi-threading and/or multi-core processing, I'm assuming that when you reinforce the soler system (kick the other 3 soler system off the node) that you are doing it more for the memory than the processing power?

I believe (hope a dev will correct me if I'm wrong here) that the "reinforced" status is applied to the node, not the blade; one of the 4 nodes on one of the blades now handles just one solar system.

In the general, non-reinforced, case you have many solar systems per node, and 4 nodes per blade (one for each CPU).

Elsa Nietzsche
Posted - 2010.12.12 12:10:00 - [85]
 

one of if not the sexiest blog ever. thanks for this great one.
keep up the great work!

Gnulpie
Minmatar
Miner Tech
Posted - 2010.12.12 12:27:00 - [86]
 

Edited by: Gnulpie on 12/12/2010 12:35:43
Good speedup, this is pretty impressive.


But why does the machoNet::SinglecastByClientID take that long? The Destiny::SendToClients without the SingleCast is only 7.4 ms! So the overhead is not in sorting out the data any more but in sending it. Is it possible to delegate this to a (highly) parallel worker thread which is doing all the work in the background (on other nodes maybe?) or do you get in trouble then with the non-blocking paradigm of Destiny?

Edit: Do you lookup always SessionID's from ClientID's in each SingleCast? That would be a huge waste in this case as they are almost always constant.

Typhado3
Minmatar
Posted - 2010.12.12 13:08:00 - [87]
 

very good to hear about this stuff being done. Also nice to see explanations and graphs.... however that first graph in part 2 the label on the y axis is seconds?? thought it would be cpu

Karak Terrel
As Far As The eYe can see
Chained Reactions
Posted - 2010.12.12 13:52:00 - [88]
 

Saw the algorithm and was like "Oh you can just read it. They must use ruby now" then i realized that is was pseudocode to make language X readable.

Altaree
The Graduates
Morsus Mihi
Posted - 2010.12.12 14:08:00 - [89]
 

This type of dev blog is one of the reasons I joined and still play eve. As a developer myself I love to read this sort of thing!

CCP Masterplan


C C P Alliance
Posted - 2010.12.12 14:15:00 - [90]
 

Edited by: CCP Masterplan on 12/12/2010 14:26:07
Time for another wall-of-text response session :)
Originally by: Daneel Trevize
Edited by: Daneel Trevize on 11/12/2010 18:20:50
Going to repeat myself from part 1, but, re: Destiny being 1Hz

Can you ever lock something that mwd+cloaks within the same second/tick that you ctrl+click to lock them with, say, a preactivated point/other mods?

That probably just depends on how the dice roll regarding network packet ordering and tasklet scheduling. Chances are: probably not, but I can't say for certain.

Originally by: Carniflex
Say, I have weapon system that with 3 damage mods has RoF of 4.2 seconds and with 4 damage mods RoF of 3.95 seconds...

Module activations/deactivations are handled by a different system (Dogma). Dogma doesn't have a discrete tick-rate like Destiny, it simply runs as often as it can and processes as many effects as it can in a reasonable amount of time. Dogma effects might have consequences, such as adding a missile into space. During its next tick Destiny will then pick up that a missile has been added, and perform the necessary additions/deletions step to inform the clients.
Even though missile can only be added to space on a 1Hz tick, the actual module cycling will still correctly use sub-second precision. (Until things get laggy, and then cycling might get delayed)

Quote:
Why wasn't this done in the first place?

This is a two-part answer:
Firstly, as a start-up with minimal budget, simply getting to launch is priority number one. Sure, you could spend a lot of time projecting where your hotspots might be if you are very successful, but by then you will have ran out of time and money, and have no releasable product.

Secondly, when it is laid out in several lines of psuedocode, it becomes very easy to see what is wrong. However those few lines represent many hundres of lines of real code, spread across multiple modules, that have evolved over time to do many things. It was quite a lot of work to understand the low-level elements, and then to see how they piece together, finally forming the full picture.
It is entirely possible that initially it was written in a different way altogether. Piece-by-piece it was changed over time, eventually arriving at where it was before I began looking into it.

Originally by: Hylax Ciai
Edited by: Hylax Ciai on 11/12/2010 22:33:37
So, the main reason for missiles being items and not just effects, is that their damage is not applied instantly?

Also, seeing that you put a nested loop in there i just couldn't think of anything else than "Man. Today is so loopy." Laughing
Unfortunately i've seen just a few episodes of the series..

Correct. Time-of-flight is what makes missiles an interestingly different mechanic compared to turrets.
Also, I see what you did there. Nice find Wink


Pages: 1 2 [3] 4 5 6

This thread is older than 90 days and has been locked due to inactivity.


 


The new forums are live

Please adjust your bookmarks to https://forums.eveonline.com

These forums are archived and read-only