The current world record for the most concurrent players in a single online multiplayer battle is 6,142, set by CCP Games in EVE Online. However, the sheer number of players meant that the gameplay experience when the record was set was distorted, slowed down past the point of enjoyment. But is there another way? Hadean set out to break the world record and show that its technology can support thousands of players in the same multiplayer battle without any compromises. This talk examines the record attempt, the challenges and ultimately, the outcome.
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
Hadean: How We Tackled A Gaming World Record
1. How We Tackled
A Gaming Record
Rashid Mansoor (CTO) & Aidan Hobson-Sayers (VP Product)
2. Today’s talk
1. Who we are and the gaming record we targeted
2. How our technology enabled us to do this
3. What we learned from EVE: Aether Wars
4. Introducing EVE Aether Wars: Phase Two
3. Who is Hadean?
● Hadean is a deep tech start-up founded
in 2015
● We are based in London and have
raised £12.35 million in funding to date
● We won a spot at Unbound as one of
the top 50 startups in Europe
4. Which record were we targeting?
6,142 concurrent players
in EVE Online’s Battle of 9-4RP2
5. What challenges did CCP Games face?
● EVE Online uses a game mechanic called Time Dilation (TiDi) to help
manage the lag in large scale battles
● Time Dilation slows the gameplay in EVE Online down to a vast degree
● Time Dilation heavily impacted the battle when the record was set in The
Battle of 9-4R
6. Aether Engine:
The world’s first distributed game engine
● Runs on entire compute clusters and data centres, and dynamically scale up and down
on the cloud
● Much the same way that UE4, Unity, or CryEngine run on gaming rigs
● Aether Engine lets game developers build complex and rich experiences
without limiting their creative vision
8. 1st Platform
Mainframe
2nd Platform
Client-Server
3rd Platform
Cloud
Mobile, Social, Cloud,
Big Data
Billions of users
Millions of apps
PCs, LANs, Internet
100s millions of users
10s thousands of apps
Mainframes, Minicomputers
Millions of users
Thousands of apps
To date, there have been three
generations of computing
9. 1st Platform
Mainframe
2nd Platform
Client-Server
3rd Platform
Cloud
Cloud, Edge, 5G
Billions of users,
apps, and sensors
Mobile, Social, Cloud,
Big Data
Billions of users
Millions of apps
PCs, LANs, Internet
100s millions of users
10s thousands of apps
Mainframes, Minicomputers
Millions of users
Thousands of apps
Cloud Edge 5G ???
We are now seeing the rise
of the 4th Platform
10. 1st Platform
Mainframe
2nd Platform
Client-Server
3rd Platform
Cloud
Cloud, Edge, 5G
Billions of users,
apps, and sensors
Mobile, Social, Cloud,
Big Data
Billions of users
Millions of apps
PCs, LANs, Internet
100s millions of users
10s thousands of apps
Mainframes, Minicomputers
Millions of users
Thousands of apps
4th Platform
Hadean Compute Model
The 4th Platform: powered by HadeanOS
11. Everyone gets a CPU
● Aether Engine consists of a
distributed Octree data structure
● This allows the simulation to
dynamically grow and shrink
across the cloud
12.
13. Building an engine
with a familiar API
void initialise([...], cell_state &state) {
}
void initialise_cell([...], cell_state &state) {
}
void cell_tick([...], cell_state &state, float delta_time) {
}
struct physics_update_system {
typedef std::tuple<c_physics> components;
using ecs_type =
aether::constrained_ecs<cell_state, components>;
public:
void operator()([...], ecs_type &state, float delta_time) {
}
};
struct c_physics {
};
15. Our ECS
● Data-driven design
● Achieve performance on coherent memory architectures
● Is being rapidly seen as the way for game programming
(e.g. Unity is moving in that direction and showing great
performance)
16. Hadean ECS: distributed by default
struct physics_update_system {
void operator()(const aether_cell_state<octree_traits> &aether_state, ecs_type &state, float delta_time) {
auto entities = state.local_entities<c_physics>();
for(auto p: entities) {
auto phys = p.get<c_physics>();
auto& state = phys->state;
state.step(delta_time);
}
check_collisions(entities, delta_time);
}
};
void physics_state::step(float delta_time) {
const float t = delta_time;
const float t_sqr = t * t;
const auto acceleration = force * inverse_mass;
linear_velocity = linear_velocity + (acceleration * t);
if (linear_velocity.norm() > max_linear_velocity) { // Cap the velocity
linear_velocity = linear_velocity.normalized() * max_linear_velocity;
}
position = position + (linear_velocity * t) + (acceleration * 0.5f * t_sqr);
// Angular velocity etc
[...]
}
17. Towards a Distributed Game Engine
Aether Sim
64 workers/box
M boxes
Dispatcher
E
dispatchers/box
O boxes
NA
State Muxers
S muxers/box
N boxes
NA 2500 Players
UK 2500 Players
EU 2500 Players
JP 2500 Players
1 Europe Central Azure Datacenter
R Edge Azure Datacenters
(UK, East Europe, Japan,
North America)
R Regions
(UK, East Europe, Japan,
North America)
UK
State Muxers
EU
State Muxers
JP
State Muxers
● 50MB/s compressed down per muxer box
● 9MB/s up total
● 230ms RTT worst case europe west to Japan
● 10GB/s relevanced down total
● 9MB/s up total
● 60ms RTT estimate
Home Users
Approximated/te
sted using AWS
Lambdas in the
four regions
Everything on Azure uses
- 8 NICs per box
- global peering
- accelerated networking
Constants
M (sim scale) = [4-10]
N (state scale) = ~4
O (event scale) = ~4
R (region scale) = 4
E (event load) = 8
S (state load) = ~8
Component counts
Workers = M*64 = ~256-640
Routers = E*O = ~32
Muxers = R*S*N = ~128
Forwarders = R = 4
Event forwarder
Event forwarder
Event forwarder
Event forwarder
18. ● Netcode is crucial for networked
games, but doesn’t directly
contribute to the creative vision
● For EVE: AW 2 we began building
a ‘netcode standard library’ for the
Engine to permit configurability at
every level
● We will dogfood this to enable an
easy ‘getting started’, with ultimate
configurability down the line
Intro NetCode Slide
19. Communicating State: Bottleneck
● A game world distributed across several servers poses some fresh
challenges
● Game State is huge
● Bandwidth to clients is very limited
● Solution: send neighbourhoods only; vary update rates
20. Communicating State: Details
● We use R-trees to spatially index entities around players
● We do rapid reads to compute ‘all neighbours in radius‘ for multiple fixed radii
● We send neighbors with different update rates depending on radial (or
spherical sector) distance and entity type
● The logic is highly extensible for game type and given other factors (e.g.
bandwidth, latency, QoS)
21. Communicating State: Other Problems
● R-trees may not be the optimal
solution -- we needed a quick
fix that is better than naive
approach
● Trade-off between speed of
update of the index vs speed
of reads (both critical to good
performance)
● Next experiment: Voronoi
tessellation on an octree (e.g.
Drost & Ilic, 2017)
22.
23.
24. ● Run on 768 CPU cores distributed across 8x client connection servers
● Players from 121 countries in a single game world
EVE Aether Wars: live playtest at GDC19
26. Our Learnings: Communication
● Communication is the biggest problem. Between cores, between servers,
between data-centres… and between people!
● Edge and cloud backbones are good but not a solve-all. We saw great
bandwidth and reliability but still had to deal with ping constraints
27. Our Learnings:
Netcode
● A careful balance between player
experience, bandwidth/latency,
server CPU/memory - no one size
fits all!
● We need to work on our distributed
debugging - stack traces that are
meaningful on a distributed engine
or game requires special tooling
28. Our Learnings: Planning
● Building tooling upfront so we can
check when and where things go
wrong
● Representative scale testing
shouldn’t wait - at scale, you need
bots that look like players so you
can get a feel for the actual
performance of your system
29. Our Learnings: Gameplay Constraints
● Engine performance at scale
is very much dependent on
gameplay
● You can get everything right
for a specific CPU/machine,
network and cloud but some
aspects can still be off due to
gameplay demands
30. Our Learnings: Logistics
● We ran the playtest during GDC -
this was suboptimal for securing
players to take part
● For Phase Two, we asked the
community what time they’d prefer
and used that to run the playtest
31. Our First Step
● We still have a lot to learn about
building engines and games in
general
● We also need to learn about the
demands of different game
genres… or even just different
games
32. Building With Our Partners
● We want to get our Aether Engine
SDK out so that we can see how the
community will break things and teach
us that we don’t know what we don’t
know
● We’ve come a long way with CCP
Games but we want to hear from you
as well!
34. EVE: Aether Wars - Battle Report
● 3,852 human players participated
● A total of 14,274 ships in battle
● Players from 121 different countries, from Hawaii to Siberia
● A steady 50ms tick rate throughout the playtest
35. However...
● Gameplay was relatively simple: a
massive dog fight in space
● Despite the server holding strong,
bandwidth to the client and rendering
made the experience poor for some
36. Also...
● We learned that server/bandwidth usage cost would’ve been prohibitive for
real games
● Because of that we have done (and are continuing to do) massive
optimisations on the server end
● We’re already seeing some great results!
37. “It’s a huge milestone in the EVE: Aether
Wars project between Hadean and CCP
Games, as part of the continued drive to
explore the future of large-scale multiplayer
simulation.”
“Did EVE: Aether Wars succeed? As tech
demo, absolutely. Hadean proved right
then and there that they could have nearly
15,000 players simultaneously connected
and not crash the server.”
“Over the course of the action, some 88,988 ships
were destroyed, making other sci-fi sagas such as
Mass Effect look like a grazed knee by comparison.”
What did they say?
38. “We knew that Hadean’s tech held massive
potential and I’m ecstatic to see that potential
realised for the first time with EVE: Aether
Wars. I’m convinced that our partnership will
continue to break new grounds in virtual
worlds.”
Hilmar V. Petursson
CEO
39.
40.
41. EVE Aether Wars:
Phase Two
● Showcasing a compelling multiplayer
experience at enormous scale
● Building on the technological success of
Phase One and pushing the boundaries
even further
● A richer, deeper gameplay experience
42. ...and you can join in!
● The EVE Aether Wars: Phase Two playtest will take place later today at 19:00
CEST (lasting roughly an hour)
● All participants will receive an exclusive EVE Online skin bundle and the
chance to win a trip for two to Las Vegas and a Corsair PC rig
● Follow #EVEAetherWars if you can’t take part!
● Sign up at www.hadean.com/eveaetherwars
Hi everyone and thanks for joining us for today’s talk. My name’s Rashid Mansoor. I’m the CTO of Hadean and I’m joined here by Aidan Hobson Sayers, our Head of Product.
Today, we’d like to talk to you about how we targeted a multiplayer gaming record in March earlier this year with our EVE: Aether Wars project, which took place live at Game Developers Conference in San Francisco.
It was an incredibly ambitious project that hadn’t ever really been done before, so we hope that those of you with an interest in large-scale multiplayer games development will find this talk interesting and also useful, as we go over some of the challenges involved and how our technology helped solve those challenges.
There are four areas we’re going to cover in this talk.
First of all, we’re going to tell you who we are and the gaming record we targeted at Game Developers Conference earlier this year.
Then we’ll talk about the technology we’ve built and how it enabled us to tackle this record. We’ll cover Aether Engine, our distributed game engine, and we’ll also tell you about our Hadean OS tech and the 4th platform.
Then we’ll talk about what we learned from building and running EVE: Aether Wars. Those of you in this room who are involved with multiplayer development will recognise some of the challenges we’ll be talking about in this section.
Finally, we’ll end by talking a little about EVE Aether Wars: Phase Two, which is the next iteration of the project. This playtest will actually take place later this evening at 7pm and we hope that this talk will inspire some of you to take part. The end of the talk is also where we will share details on how you can take part in EVE Aether Wars: Phase Two.
We are Hadean, a deep tech start-up founded in 2015. We’re based in Shoreditch and we currently have a headcount of around 50 staff and we’re continuing to expand quickly. If there are any engine developers or full stack developers in the room, have a look at our careers page on our website, as we’re currently hiring for those positions.
We’ve raised £12.35 million in funding to date.
We’ve featured in the likes of Business Insider and CityAM while we’ve been covered in big specialist gaming outlets such as PC Gamer and Rock Paper Shotgun.
We’ve been named by Silicon Republic as one of the top 10 superb start-ups to watch in London and in July this year, we won a spot at Unbound London as one of the top 50 start-ups in Europe selected for their start-up showcase, which is something we’re particularly proud of.
So let’s talk about the record. The gaming record we wanted to break was for the most concurrent players involved in a single online multiplayer battle. The record for this is 6,142 players.
This record was set in EVE Online in January 2018. So you’ll note how, at this point, CCP Games were the holder of this record and yet were also helping us to break this record. After all, who better to help us break the record than the current holders?
It’s hard to convey that sense of scale but here’s an action-packed screenshot showing you what the biggest multiplayer battle in history looks like -- EVE Online’s Battle of 9-4RP2
However, setting this record came with a few problems, as you might expect with a battle involving over 6,000 players at the same time.
To help manage server load in enormous large-scale conflicts, CCP Games introduced a mechanic to EVE Online called Time Dilation back in 2011. It’s a mechanic that’s still being used in EVE Online today.
Time Dilation slows gameplay down. With the enormous amount of players involved in The Siege of 9-4, Time Dilation kicked in and slowed the gameplay to a crawl, so much so that players had to completely change their tactics to compensate for the heavy delay.
As a result, this landmark battle wasn’t truly representative of EVE Online’s famous strategic multiplayer combat.
So let’s talk about the technology we’ve created as Hadean and how it helped us target that record.
We’ve created Aether Engine, which is the world’s first and only distributed game engine. The gaming record that we’re talking about today is the most concurrent players in a single online battle and our record attempt was only possible because of our Aether Engine tech.
Aether Engine is built to run on the cloud, in a private data centre, or your homegrown cluster. Existing game engines such as Unity and Unreal Engine are designed to be modular, high-performance, close-to-the-metal software frameworks that maximise the potential of powerful gaming PCs, consoles and mobile devices.
Aether Engine takes this one step further and is designed to breakdown this final barrier. It runs on entire compute clusters, data centres or even dynamically scales up and down on the cloud.
What this means for game developers is that because Aether Engine automatically handles scaling, load balancing, networking, and persistence, you can focus on game design and programming.
Aether Engine lets you build complex worlds and rich experiences without limiting your creative vision.
Game engines and the way multiplayer games have been historically designed centre around the constraints of the limited hardware availability but with Aether Engine, you can create new types of multiplayer games and experiences. Again, it’s because of Aether Engine that we were able to target the gaming record for most concurrent players in a single online multiplayer battle.
Aether Engine is an application library that we’ve built on top of Hadean OS. Hadean OS is our Operating System we’ve created that is designed for building scale-invariant programs.
A few tens of lines of code could run on a single core on a laptop or be deployed and scale seamlessly across hundreds or thousands of cloud VMs and bare metal server nodes alike.
Our goal is that if we can make it possible for people to write programs without worrying what scale they run at, then that removes a tremendous barrier to the ability to process data, to analyse things, to compute things in nature and so on.
To date, we have seen three generations of computing.
We’ve seen FIRST PLATFORM, which is Unix on mainframes and mini-computers. There’s SECOND PLATFORM, which is Windows and Linux on Micro-computers and there’s THIRD PLATFORM, which is iOS and Android on mobile devices supported by first-gen cloud.
We’re now witnessing the rapid convergence of the 4th generation of computing platforms, which is the 4th platform.
The Cloud, Edge data centres and high-speed networking (such as 5G and infiniband) have formed a pervasive, invisible, ambient computing infrastructure that is ever-present and always available.
Yet we’re still building for the 4th platform using the operating systems and compute models of the 2nd platform: Windows and Linux.
At Hadean we’ve spent the last several years thinking about what computing needs to look like in this massively-distributed, geographically-dispersed, high-performance, hyperscale world. The end result is the Hadean Compute Model (HCM) which is exposed by our Operating System: Hadean OS.
To maintain the ecosystems built up over the years, Hadean OS also preserves Linux’s binary format and library compatibility.
Aether Engine is an application that sits on top of our Hadean OS technology.
The Aether Engine core consists of a distributed Octree data structure that allows the simulation to dynamically grow and shrink across the cloud, running at higher fidelity when needed.
TEXT TO BE ADDED
https://github.com/ccpgames/gamescom-simulation/blob/master/Simulation/simulate.cc#L393-L414
Initialise and tick and how that maps to unreal initialise and tick [Snippet showing Initialise/Tick()]
Talk more about tick function
Talk about ECS and performance considerations
Distributed engine architecture and how it is deployed across data centers [Get Tech Deck or Case Study from Mike]
How we ran a global test with 10k+ connected clients
We use R-trees to spatially index entities around players
We do rapid reads to compute ‘all neighbours in radius’ for multiple fixed radii
We send neighbors with different update rates depending on radial (or spherical sector) distance and entity type
The logic is highly extensible for game type and given other factors (e.g. bandwidth, latency, QoS)
R-trees perhaps not the optimal solution. We needed a quick fix that is better than naive approachThere is a trade-off between speed of update of the index vs speed of reads. Both are critical to good performance
Next experiment: Voronoi tesselation on an octree (Drost & Ilic)
So to demonstrate the power of Aether Engine to the world we built EVE Aether Wars, a multiplayer deathmatch experience designed to support thousands of players in the same single-shard battle. We created EVE: Aether Wars as a tech demo to showcase the unique edge of Aether EngineEVE Aether Wars was a project we built with assistance from legendary MMO studio CCP Games. We assume all of you here are familiar with CCP Games but for those of you who aren’t, CCP Games are the creators of EVE Online, the space-faring MMO that launched back in 2003 and continues to push boundaries of technology and gameplay today.
...
We ran EVE Aether Wars on 768 CPU cores distributed across 8x client connection servers and 121 geographies in a single seamless world.
We wanted to do this live at Game Developers Conference in San Francisco, to show the confidence we have in our tech. We had a lot of feedback from peers in the games industry telling us we were mad for wanting to do this live at Game Developers Conference as there was no margin for error.
But that’s exactly why we wanted to do it this way - as a statement to the world of what Aether Engine can help game developers achieve.
So what did we learn from EVE: Aether Wars?
Communication was the biggest problem. What we found was communication between cores, between servers and between data-centres was the most troublesome obstacle.
Beyond that, communication between people was something that we could have improved as well. We quickly learned how important is was to keep the lines of communication open and frequent between everyone working on this project.
We also realised that edge and cloud backbones are good but not a solve-all. We saw great bandwidth and reliability but we had to deal with ping constraints.
Getting netcode right is a careful balance between player experience, bandwidth and latency and server CPU and memory. There is no one-size-fits-all solution.
Distributed debugging is something we need to get better at and something we have a vision for. Stack traces that are meaningful on a distributed engine or game require some special tooling.
We could have improved our planning around the project. A key takeaway for us was realising that if we build tooling upfront, then we can check when and where things go wrong.
We also realised that representative scale testing shouldn’t wait. When building projects like this at large scale, you need bots that look like players, so you can get a feel for the actual performance of your system.
Engine performance at scale is very much dependent on gameplay.
You can also get everything right for a specific CPU or machine, network and cloud, and even then, some aspects can still be off due to gameplay demands.
This is why we kept gameplay simple for EVE Aether Wars and it’s one of the main areas of improvement we focused on for the next iteration.
Finally, there were some logistical challenges outside of our tech.
We ran the EVE Aether Wars playtest during GDC because we wanted to run the tech demo live at a conference to show how confident we were in our tech performing on a big stage. However, we didn’t consider the playerbase when doing this. GDC runs from 10am to 6pm during several weekdays, which meant a lot of our community couldn’t make it because they were at work or at college and so on.
So for Phase Two, we asked the community what time they’d like the playtest to run at and we made a decision based on that
We realised we still have a lot to learn about building engines and also building games in general. Working with CCP Games has been enlightening in this regard but there’s still much more for us to learn.
We also need to learn about the demands of different game genres… or even just different games.
We’re excited to release our Aether Engine SDK so that we can see how our community will break things. We don’t know what we don’t know.
Ultimately, it’ll be your input and feedback that will help shape what Aether Engine becomes, and we’d love for you to push our technology as you see fit.
So after all that, how did we do on the day?
We had a total of 3,852 real players and a total of 14,274 ships all doing battle in EVE Aether Wars.
Players joined from 121 different countries around the world, stretching from Siberia to Hawaii. We also noticed there were interesting clusters of players joining from certain regions. For example, alongside the expected UK and US regions, we also had a large influx of players from Russia and Japan, which we found quite surprising.
Most importantly, even with all of those different regions across the globe connecting, we maintained a steady 50ms tick rate throughout the playtest.
But there are some considerations that we need to weigh up against this success.
The first one is that the actual gameplay for EVE: Aether Wars was relatively simple - it was a massive dogfight in space. It was a simple gameplay experience but that gave us an easy goal to target for Phase Two, as we built more game features and physical interactions, thanks to our continued relationship working alongside CCP Games.
We should also mention that despite the server holding strong, bandwidth to the client and rendering made the experience poor for some. Again, this gave us something that we could build on, so improving this aspect became a major focus for us for EVE Aether Wars Phase Two.
Another learning from us following EVE: Aether Wars is that server and bandwidth usage cost would have been prohibitive for real games.
As a result, we focused on massive optimisations on the server end, and we’re already seeing great results because of this.
This is just a handful of quotes across specialist media and our playtest also saw coverage in the likes of PC Gamer, Rock Paper Shotgun, Screen rant and many more too.
...and here’s what Hilmar Petursson, CEO of CCP Games, had to say about the test
This brings us onto EVE Aether Wars: Phase Two, the next iteration of our EVE Aether Wars project.
This is what EVE Aether Wars Phase Two looks like.
It’s set in Abyssal Deadspace from EVE Online and visually, as you can see from the screenshots, it now has far more atmosphere.
So EVE Aether Wars Phase Two will show the world what exciting and compelling mutiplayer gameplay looks and feels like at enormous scale.
With Phase One, we showed that our technology can support thousands of players in the same multiplayer battle. The purpose of Phase Two is to show what sort of compelling gameplay experiences can exist at that scale, while also sparking the imaginations of industry professionals and gamers who take part.
Ultimately, we want to see what the games industry can create using our Aether Engine technology to push the boundaries of what’s possible and we see EVE Aether Wars Phase Two as an important step towards that.
EVE Aether Wars Phase Two will take place at 7pm this evening, so after a full day of Devcom talks, you can relax in the evening by helping take part in gaming history.
There are also some cool prizes for getting involved. We have an exclusive EVE Online skin for all participants and there will be a prize draw with a trip for two to Las Vegas on offer, along with a Corsair PC gaming right up for grabs.
If you can’t take part, we encourage you to follow the EVE Aether Wars hashtag on the screen. Given there will be thousands and thousands of players battling each other in the same online battle, it’ll be just as exciting to watch the mayhem as it will be to take part, so make sure you check out the action as it happens.
Thanks for your time today. We hope you found our talk interesting and informative. We have a stand in the Business Area at Gamescom this year if you’d like to ask us more questions in person or see the technology for yourself.
We’re in Hall 2.2 and at booth 57.
Thank you for listening.