Practical options for EVE performance issues

Here is a relevant Reddit thread on the performance topic posted by Wulkans. I highly encourage everyone who cares about EVE’s long term health to upvote it.

Pretty easy to do real time commentary on a still life. :smirk:

–Gadget the Critic

2 Likes

Yes
game engine needs rewrite to future proof it as well, mass fleet battles are pinnacle of eve gameplay anything that help in those should be pursued regardless of time and cost,not only that but AI as well would massively benefit with new engine under the hood.

Bunch of dudes getting drunk in basement build eve 1.0 it is time to build 2.0 couple of games worth of time and millions of dollars are already wasted for nothing i think it is time for CCP to do something major for eve too.

First come, first “served”. Make it to the instanced battle “dead space” before other pilots can warp in, then you get to come, regardless if you were one of the parties that agreed to the battle ahead of time. If you are too late and the site is full, too bad.

I’m an industrialist too. :wink:

Every time I see an antimatter round fired I hear ISK going into my wallet. :rofl:

There are the Resource Wars sites that are like that in Eve, but those serve a completely different purpose and are in no way involved with alliance-level conflicts.

This solution reminds me sharded/clustered solutions. Can i join a Roleplay server plix? Eve is actually build upon complete oposite of what you just proposed.

There is a misunderstanding here.
Just because your CPU is 100% load does not actually mean the bottleneck is the CPU. if you CPU is 99%iowait then it is definitely not the CPU.

Another misunderstanding is to believe that multi threading magically enhances performances. You need to modify your software architecture to handle multi threading. That means most of the time, you need to have dedicated layers of software to synchronization, caching, communication between the threads, which may enhance performances when it comes to the game but then have a big impact on the global server performances.
As you may know, resource synchronization cost can be expressed as max load % and is proportional to the number of accesses to the resource. That’s the reason why WiFi fails as soon as there are enough users : the “air” channel is used for synchronization(of itself), thus a high % of the time it is unavailable (chipset can compensate by increasing delay between transmissions, which is exactly like TiDi ; but in the end you still have too many synchronization tasks)

I’ve worked on modelling systems. In those systems, you have a matrix of states for all elements. Every tick you apply linear and logical (which is linear) rules to the states based on the states of previous tick.
Those systems are heavily parallelized . Modelling the weather for a week ? Modelling a nuclear explosion near the coasts to the granularity of the µm ? Doable in a few thousands GPUs.
Applying user input ? That breaks your complete system. The time you take to update your system with the user data (verification, logging, modelling, transmission of this user input) negates the benefit of having parallel modelling.

Don’t get me wrong, I’m not saying it is not possible to improve Eve server by using parallel computing. I actually thing this is possible, but I like challenges, so I’m a bit biased here.
I’m saying, this is not obvious, this is not proved, and if CCP wants to try it, they are gambling a lot of time and money on a performance increase that may has well not be here.

3 Likes

Well said! You can’t just throw cores at every problem and expect it to go faster. Can three women all work in parallel and have a baby in 3 months?

2 Likes

Not yet, but…

–Futurist Gadget

1 Like

Practical option? Drop parallel processing and replace with serial processing. Make large battles turn-based rather than “real time”. Player gives movement command, defense command, attack command. Commands could be stored on client and sent when the server demands them. Then the server would take as long as needed to process the whole frame (with potential to split the tasks between different cores as it could be an asynchronous process) and a new turn would begin.

Would it be as cool as ordinary combat? No. Would it be a effin lagfest? No. Would it be scalable? Hell, yes! What could be the limit? Well, dunno exactly, but very, very high. Adding extra commands to a finite series is easily scalable when you don’t need to account for anything else and have unlimited time to make the job.

Sometimes you just need to agree that not all round pegs fit into all square holes.

A possibly rather elegant solution to system overcrowding would be to simply clone the system.
I would suggest to allow the servers to reach up to a 50% Tidi situation, but beyond that to actually spread that player base across multiple cloned systems across multiple servers. Fleets and player assets would be randomly(or through a set of rules) assigned to a server.

Those placed in the same instance as a structure being assaulted/defended would have to attempt to do the job, whereas everyone else assigned to different servers can fight it out at their convenience.
After a set time, a fleet shuffle occurs again and fleets may be paired differently (which would prompt a loading cinematic and a temporary invulnerability cloak).

Lore wise you could even explain Tidi as stress on space-time due to too many warp engines within a region, whereas cloned systems could be fractured space-time as it reaches a breaking point.

The workload is already as threaded as it can be, cores aren’t the issue, its that everything HAS to be done in a specific order otherwise everything breaks, when you’re dealing with 1k vs 1k fights you’re already:

  • Tracking the location, speed and direction of every single ship on a per-tick basis
  • Tracking the status of every single activated module on each of those ships
  • Tracking the effects each of those modules have on every entity they affect
  • Tracking the missiles and drones that are currently in flight as they can be interacted with

Here is an example

I warp in a disco BS, i land in range of 8 people, i fire off all 8 of my smartbombs, the server now has to look at my ships location, it needs to look at the types of mods i activated, in this case 8 smartbombs, it needs to look at any skills i have that affect these, it now has to check how many ships were within range when i activated those smartbombs, now in our example i said there were 8 ships hit, lets assume i hit 6 ships but they didn’t die and 2 ships did die, firstly the server has to now go and get the ships of each of those 8 players, it needs to work out how much HP each has, it needs to look at the different resist profiles of each ship, it needs to factor in the skills of each pilot and any active modules or effects, it now needs to apply each of those 8 smartbombs worth of damage to each of those 8 ships which is 64 damage calculations, it then needs to assign that damage to each entity in range, in this case it needs to adjust the remaining HP of 8 targets and for 6 of those it has to store that number for another process to access, in 2 cases the ships didn’t survive, so now the server needs to let every single client on grid (all 2000 of them) that that these 2 ships exploded, it now needs to transition those 2 players from whatever ships they were flying in to their pods, it needs to spawn 2 wrecks and then run the the function to determine what loot survived the ships deaths, it also needs to queue up 4 kill reports along with adjusting any skillpoints in the chance that these 2 dead ships were T3 cruisers, it then needs to start tracking where those 2 pods are and what they are doing as per the rest of the simulation, now imagine the server doing this 100 times

Now bear in mind that it will also have to track projected effects like warp bubbles and gang bonuses, hell, if i’m sitting on a fleet of 10 people and i use 3 gang boosts the server now has to calculate each of those gang effects on each of the ships affected and work out exactly what the new stats of those ships are and thats without them even moving or doing anything

The fact that these fights can happen at all is amazing, people seem to think tidi is the “problem” when infact its the solution, tidi made these fights possible because otherwise they would end up as bugged broken messes like they used to before tidi existed

Time in Eve is quantized. A discrete packet called a tick. The server knows the state of the game that it calculated and save at the end of the last tick and it knows what happened during that tick. It uses that information to update the state of the game during the current tick. If something happens in-game during the tick, it will be processed during the next tick.

Since the scope of work is fully determined at the beginning of a tick, it really doesn’t matter if the calculations are done by a single cpu or distributed across 100. How much the server has to track really doesn’t matter if it can’t change during the tick.

You can argue that the server needs to do things in order and that’s not really an issue since the order is known but, in the context of a 1 second tick, out of order execution caused by network latency will probably have more impact on outcomes.

Rewriting this code would be a lot of work and high risk since it is the foundation that supports the rest of the game and the big fights aren’t that common, but Eve is at a crossroads - Tranquility Tech III was deployed in 2015 and CCP will either need to replace it or migrate to the cloud within the next few years. Moving to the cloud has to be the right choice, economy, reliability and scalability are dramatically superior, but Eve needs to be able to take advantage of the scalability and CCP has some work to do to achieve that.

No. Go away.

Yes it knows how much work its going to “have” to do, that doesn’t mean it can actually do all of that work in real time in the 1 second it actually has, hence tidi which slows down the simulation so that it can get a lot more done in that single second, no amount of rewriting is going to enable you to process that much data in that little time without enforcing hard limits on the number of actions or people present in nay given fight, which isn’t going to happen, there is just too much data for the server to process and it can’t be farmed out to other nodes as the added latency would cause more issues than it even hoped to resolve

Latency only causes issues on the client side, the server is the authority in regards to the simulation, it already knows the stats of your ship and if a client doesn’t send its actions in time they will be disregarded, as per normal and this happens even outside of tidi, if your command misses the window it gets processed at the next available time and will normally result in either a delayed action on your end or the server disregarding that action if the target is no longer legal

“The cloud” doesn’t offer anything CCP doesn’t, i’m not sure what exactly you think the “cloud” is but its literally just a server doing the processing work, there will be zero benefits as there will still be processing limitations even if you used a super computer and tidi would still be the end result in order to keep the simulation functional

TQ already scales just fine, the bottleneck is for single system instances, the cloud won’t change that, you would still need a single authoritative node with complete control of everything in that instance, there isn’t a single computer thats going to be able to handle this properly as the task can’t be distributed any more than it already is

2 Likes

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.