[HN Gopher] Valorant's 128-Tick Servers (2020)
       ___________________________________________________________________
        
       Valorant's 128-Tick Servers (2020)
        
       Author : nairadithya
       Score  : 148 points
       Date   : 2025-10-06 20:47 UTC (2 hours ago)
        
 (HTM) web link (technology.riotgames.com)
 (TXT) w3m dump (technology.riotgames.com)
        
       | mmmeff wrote:
       | Take notes, Valve.
        
         | Linkd wrote:
         | As a lifelong Valve/CS fan, I've been so disappointed with
         | subtick. It was pitched as generational evolution to the games
         | netcode. Yet years later they're still playing catchup to what
         | CS:GO provided..
         | 
         | Hopefully competition from Valorant and others puts more
         | pressure to make things happen at Valve.
        
           | koakuma-chan wrote:
           | I didn't notice any difference between 64 and subtick.
        
         | Thev00d00 wrote:
         | Sub tick is probably more accurate overall but I do think the
         | cs2 animation netcode is crap and hides a lot of the positives.
         | Hopefully moving to Animgraph 2 will help that, who knows
        
           | ozgrakkurt wrote:
           | Sub tick seems to be bs in practice. CS feeling on valve
           | servers isn't even close to valorant
        
         | fngjdflmdflg wrote:
         | This is from 2020. Valve wanted to be smart and invented a new
         | "subtick" system in 2023 which isn't as good as 128 tick. To
         | make things worse, CS is a paid game, not free like Valorant,
         | and makes probably much more money. They seemingly just don't
         | care enough about the problem to solve it correctly. That or
         | there is more work to be done on subtick to make it work better
         | than 128.
        
           | Hikikomori wrote:
           | CSGO could do 128 tick, Valve just doesn't want to pay for
           | it, but you can easily find private hosted servers with 128
           | tick. Riot did put in a lot of work to get it down so much
           | though.
        
           | Tiberium wrote:
           | Nowadays Counter Strike 2 is free to play, although a paid
           | prime upgrade is almost required if you want to play decent
           | matches with less cheaters. FACEIT requires prime status too.
           | 
           | https://help.steampowered.com/en/faqs/view/4D81-BB44-4F5C-9B.
           | ..
        
           | AceJohnny2 wrote:
           | > _CS is a paid game, not free like Valorant, and makes
           | probably much more money_
           | 
           | (Veering offtopic here) Remember that Valve invented the
           | free-to-play business model when they made TF2 free. As Gabe
           | Newell said in some interview long ago, they made _more_
           | money from TF2 after it went F2P ( "sell more hats!")
           | 
           | Point being, being a paid vs free game is largely irrelevant
           | to the profitability & engineering budget.
           | 
           | That said, I'm not sure why you say CS is a paid game. It is
           | also free-to-play. Is some playable content locked behind a
           | paywall?
        
       | jauntywundrkind wrote:
       | > _In VALORANT's case, .5ms is a meaningful chunk of our 2.34ms
       | budget. You could process nearly a 1 /4th of a frame in that
       | time! There's 0% chance that any of the game server's memory is
       | still going to be hot in cache._
       | 
       | This feels like an unideal architectural choice, if this is the
       | case!?
       | 
       | Sounds like each game server is independent. I wonder if anyone
       | has more shared state multi-hosting? Warm up a service process,
       | then fork it as needed, so there's some share i-cache? Have
       | things like levels and hit boxes in immutable memfd, shared with
       | each service instance, so that the d-cache can maybe share across
       | instances?
       | 
       | With heartbleed et al, a context switch probably has to totally
       | burn down the caches now a days? So maybe this wouldn't be enough
       | to keep data hot, that you might need a multi-threaded not multi-
       | process architecture to see shared caching wins. Obviously I
       | dunno, but it feels like caches are shorter lived than they used
       | to be!
       | 
       | I remember being super hopeful that maybe something like Google
       | Stadia could open up some interesting game architecture wins, by
       | trying to render multiple different clients cooperatively rather
       | than as individual client processes. Afaik nothing like that ever
       | emerged, but it feels like there's some cool architecture wins
       | out there & possible.
        
         | Ellipsis753 wrote:
         | It does sound like each server is its own process. I think
         | you're correct that it would be a little faster if all games
         | shared a single process. That said, then if one crashed it'd
         | bring the rest down.
         | 
         | This is one of those things that might take weeks just to
         | _test_. Personally I suspect the speedup by merging them would
         | be pretty minor, so I think they've made the right choice just
         | keeping them separate.
         | 
         | I've found context switching to be surprisingly cheap when you
         | only have a few hundred threads. But ultimately, no way to know
         | for sure without testing it. A lot of optimization is just
         | vibes and hypothesize.
        
       | deathanatos wrote:
       | 128 ticks _per second_ servers. (And lo, suddenly the article 's
       | thesis is inherently clear.)
       | 
       | A "tick", or an update, is a single step forward in the game's
       | state. UPS (as I'll call it from here) or tick rate is the
       | frequency of those. So, 128 ticks/s == 128 updates per sec.
       | 
       | That's a high number. For comparison, Factorio is 60 UPS, and
       | Minecraft is 20 UPS.
       | 
       | At first I imagined an FPS's state would be considerably smaller,
       | which should support a higher tick rate. But I also forgot about
       | fog of war & visibility (Factorio for example just trusts the
       | clients), and needing to animate for hitbox detection. (Though I
       | was curious if they're always animating players? I assume there'd
       | be a big single rectangular bounding box or sphere, and only once
       | a projectile is in that range, then animations occur. I assume
       | they've thought of this & it just isn't in there. But then there
       | was the note about not animating the "buy" portion, too...)
        
         | actionfromafar wrote:
         | And Fortnite is allegedly 30 ticks per second.
        
           | Hikikomori wrote:
           | And a few more players.
        
           | NekkoDroid wrote:
           | Apex Legends is at 20 IIRC (My memory is from 2-3 years back
           | on this one tho)
           | 
           | CSGO was at 64 for the standard servers and 128 for Faceit
           | (IIRC CS2 is doing some dynamic tick schenanigans unless they
           | changed back on that)
           | 
           | Overwatch is I think at 60
        
             | shaokind wrote:
             | CS2 is 64 tick under the hood, with interpolation between
             | the ticks. In the beta, server operators could modify the
             | tick rate by patching the server binary, but when that
             | revealed inconsistencies (which was meant to be avoided
             | with the "subtick" system), they hard coded the client side
             | tick rate to 64 [0].
             | 
             | [0]: https://twitter.com/thexpaw/status/1702277004656050220
        
             | sosodev wrote:
             | CS2 is mostly 64 tick from what I understand. The "sub-
             | tick" stuff is timestamping actions that happen on a local
             | frame before the next tick. So in theory the client feels
             | perfectly responsive and the server can adjust for the
             | delta between your frame and the tick.
             | 
             | In practice it seems to have been an implementation
             | nightmare because they've regularly shipped both bugs and
             | fixes for the "sub-tick" system.
             | 
             | The netcode in CS2 is generally much worse than CSGO or
             | other source games. The game transmits way more data for
             | each tick and they disabled snapshot buffering by default.
             | Meaning that way more players are experiencing jank when
             | their network inevitably drops packets.
        
               | pton_xd wrote:
               | That's very interesting. The CS2 netcode always felt a
               | little brittle and janky to me, but I could never pin
               | point exactly what was causing the issues. Especially
               | since other games mostly run fine for me.
               | 
               | I also remember reading a few posts about their new
               | subtick system but never put two and two together.
               | Hopefully they keep refining it.
        
               | shaokind wrote:
               | Worth noting that part of the packet size appears to be
               | due to animation data, which they've begun the process of
               | transitioning to a more efficient system. [0]
               | 
               | With that being said: totally agree on the netcode.
               | 
               | [0]: https://old.reddit.com/r/GlobalOffensive/comments/1f
               | wgd59/an...
        
               | andrepd wrote:
               | It's actually incredible how CSGO was such a great game
               | and it's been replaced (not deprecated, replaced!) by CS2
               | which is _still_ inferior over 2 years after the launch.
        
             | omnimus wrote:
             | Its strange Apex is 20 ticks... it is often as fasr as FPS
             | get. Is it because of number of players at same map that is
             | a lot higher than in other games?
        
           | Thaxll wrote:
           | Fortnite has to handle 100 players on the same process, very
           | different from 128hz @10players max.
        
             | charcircuit wrote:
             | That's not an excuse to give up on performance. The map is
             | also much bigger which spreads people out.
        
         | Hikikomori wrote:
         | Client update was measured to be 73, not quite matching the 128
         | server tick and update rate. Maybe it changed in the last 5
         | years. CSGO private servers also ran with 128 tick rate.
         | 
         | https://www.youtube.com/watch?v=ftC1Rpi8mtg
        
         | ASalazarMX wrote:
         | Fallout 76, for example, lets you see where other players are
         | facing/looking at, or where are they pointing their guns even
         | if they don't fire. The models are animated according to the
         | input their users.
         | 
         | I don't think its ticks per second are great, because the game
         | is known for significant lag when more than a dozen of players
         | are in the same place shooting at things.
        
           | esseph wrote:
           | 20-30 is believed commonly by the Fallout 76 community.
        
           | lazide wrote:
           | Lag is different than 'unloaded' ticks per second.
        
         | calvinmorrison wrote:
         | OSRS plays on 0.6 TPS... or 100 ticks per minute kind of funny
         | how different that is.
        
           | SchemaLoad wrote:
           | OSRS players hate when they have to actually play the game.
           | They just want to click the screen every 10 minutes while
           | playing something else.
        
             | calvinmorrison wrote:
             | me_irl
        
             | Liquix wrote:
             | ...what? the game is full of highly technical and demanding
             | challenges which require "tick-perfect" inputs 2-5x per
             | 0.6s game tick.
        
               | andrepd wrote:
               | OSRS is a rhythm game. Fight me.
        
           | orlp wrote:
           | No, OSRS is 100 ticks per minute which gives 0.6 second
           | ticks, which rounds to 1.667 ticks per second.
        
             | typpilol wrote:
             | Yup. As a plugin dev it has its weird quirks but it's quite
             | amazing how the entire time runs at that speed
        
             | jsheard wrote:
             | Eve Online probably wins the slowest tickrate award with
             | its whopping 1 tick per second.
        
               | Liquix wrote:
               | IIRC it gets even slower during massive battles where
               | there are hundreds/thousands of players on the same
               | server and area
               | 
               | https://wiki.eveuniversity.org/Time_dilation
        
         | magicalhippo wrote:
         | When Battlefield 4 launched it had terrible network
         | performance. Battlefield 3 wasn't great but somehow BF4 was way
         | worse. Turned out while clients sent updates to the server at
         | 30 Hz, the server sent updates back only at 10 Hz[1].
         | 
         | This was the same as BF3, but there were also some issues with
         | server load making things worse and high-ping compensation not
         | working great.
         | 
         | After much pushback from players, including some great analysis
         | by Battle(non)sense[2] that really got traction, the devs got
         | the green light on improving the network code and worked a
         | _long_ time on that. In the end they got high-tickrate
         | servers[3][4], up to 144Hz though I mostly played on 120Hz
         | servers, along with a lot of other improvements.
         | 
         | The difference between a 120Hz server and a 30Hz was night and
         | day for anyone who could tell the difference between the mouse
         | and the keyboard. Problem was that by then the game was half-
         | dead... but it was great for the 15 of us or so still playing
         | it at that time.
         | 
         | [1]:
         | https://www.reddit.com/r/battlefield_4/comments/1xtq4a/battl...
         | 
         | [2]: https://www.youtube.com/@BattleNonSense
         | 
         | [3]:
         | https://www.reddit.com/r/battlefield_4/comments/35ci2r/120hz...
         | 
         | [4]:
         | https://www.reddit.com/r/battlefield_4/comments/3my0re/high_...
        
         | shit_game wrote:
         | Also for comparison, the Runescapes (both RS3 and Oldschool
         | Runescape) have a 0.6 tick/second system (100 ticks/minute). It
         | works rather well for these games, which I guess highlights
         | that some games either a) can get away with high latencies
         | depending on their gameplay mechanics, or b) will evolve
         | gameplay mechanics based on the inherent limitations of their
         | engines/these latencies. RS3 initially leaned into the 0.6s
         | tick system (which is a remnant of its transitions from
         | DeviousMUD to Runescape Classic to RS2) and eventually
         | developed an ability-based combat system on top of what was
         | previously a purely point-and-click combat system, whereas OSRS
         | has evolved new mechanics that play into this 0.6s tick system
         | and integrate seamlessly into the point-and-click combat
         | system.
         | 
         | Having played both of these games for years (literally, years
         | of logged-in in-game time), most FPS games with faster tick
         | systems generally feel pretty fluid to me, to the point where I
         | don't think I've ever noticed the tick system acting strange in
         | an FPS beyond extreme network issues. The technical challenges
         | that go into making this so are incredible, as outlined in TFA.
        
       | whalesalad wrote:
       | I wonder if any game servers are implemented in Erlang?
        
         | seivan wrote:
         | Network connection, lobby, matchmaking, leaderboards or even
         | chats, yes. But the actual simulation, probably not for fast
         | paced twitchy shooter.
         | 
         | Also not just for performance reasons, I wouldn't call BeamVM
         | hard realtime, but also for code. Your game server would
         | usually be the client but headless (without rendering). Helps
         | with reuse and architecture.
        
           | bogwog wrote:
           | IIRC, Activision/Blizzard uses Erlang for their matchmaking
           | systems (or used to... I saw it in a very old talk)
        
           | mikhmha wrote:
           | In the case of Call of Duty: Black Ops 1. Thee matchmaking +
           | leaderboards system was implemented by DemonWare (3rd party)
           | in Erlang.
           | 
           | Erlang actually has good enough performance for many types of
           | multiplayer games. Though you are correct that it may not cut
           | it for fast paced twitch shooters. Well...I'm not exactly
           | sure about that. You can offload lots of expensive physics
           | computations to NIF's. In my game the most expensive
           | computation is AI path-finding. Though this never occurs on
           | the main simulation tick. Other processes run this on their
           | own time.
        
         | echelon wrote:
         | It sounds like they're so heavily invested in Unreal Engine
         | that it's become the entire stack.
         | 
         | I was imagining some blindingly fast C or Rust on bare metal.
         | 
         | That UE4 code snippet is brutal on the eyes.
        
         | andrewflnr wrote:
         | I distinctly remembered that Eve Online was in Erlang, went to
         | go find sources and found out I was 100% wrong. But I did find
         | this thread about a game called "Vendetta Online" that has
         | Erlang... involved, though the blog post with details seems to
         | be gone. Anyway, enjoy! http://lambda-the-
         | ultimate.org/node/2102
        
           | Cyph0n wrote:
           | Eve used Stackless Python.
           | 
           | CoD Black Ops used/uses Erlang for most of its backend afaik.
           | https://www.erlang-
           | factory.com/upload/presentations/395/Erla...
        
         | mikhmha wrote:
         | I am currently doing this! Working on an MMO game server
         | implemented in Elixir. It works AMAZING and you get so much
         | extra observability and reliability features for FREE.
         | 
         | I don't know why its not more popular. Before I started the
         | project, some people said that BeamVM would not cut it for
         | performance. But this was not true. For many types of games, we
         | are not doing expensive computation on each tick. Rather its
         | just checking rules for interactions between clients and some
         | quick AABB + visibility checks.
        
         | Thaxll wrote:
         | You'll never get a modern FPS gameserver with good performance
         | written in a GC language. Erlang is also pretty slow, it's
         | Python like performance. Very far from C#, Go and Java.
         | 
         | The other reason is that the client and the server have to be
         | written in the same language.
        
           | Sohcahtoa82 wrote:
           | > The other reason is that the client and the server have to
           | be written in the same language.
           | 
           | This isn't true _at all_.
           | 
           | Sure, it can help to have both client and server built using
           | the same engine or framework, but it's not a hard
           | requirement.
           | 
           | Heck, the fact that you can have browser-based games when the
           | server is written in Python is proof enough that they don't
           | need to be the same language.
        
       | holoduke wrote:
       | But animations are now lerped after each 4 frames. Do tickrate is
       | 32 with interpolation. Not sure if sudden direction changes now
       | might result in ghost hits. Some hardcore quake fans probably
       | know the answer.
        
       | xmprt wrote:
       | We should add 2020 to this. I read this article earlier and
       | thought there had been some updates to the architecture.
        
       | mmanfrin wrote:
       | Great irony of finishing a league game just now where the whole
       | game lagged (for everyone in the game) to find this at the top of
       | HN.
        
         | ajkjk wrote:
         | not very ironic at all really, since they're different games?
        
           | dankwizard wrote:
           | Same company, different focus
        
       | greatgib wrote:
       | This deep dive article is very nice.                  At any
       | given time, ~50 of those games are going to be in the buy phase.
       | Players will be purchasing equipment safely behind their spawn
       | barriers and no shots can hurt them. We realized we don't even
       | need to do any server-side animation during the buy phase, we
       | could just turn it off.
       | 
       | That explains the current trend of "online" video game that is so
       | annoying: For 10 minutes of play, you have to wait for 10 minutes
       | of lobby time and forced animations, like end game animations.
       | 
       | On BO6 it kills me, you just want to play, sometimes you don't
       | have more than 30 minutes for a quick video game session, and
       | with the current games, you always have to wait a very very long
       | time. Painfully annoying.
        
         | nemothekid wrote:
         | This is not equivalent to "lobby time or end game animations"
         | in other games.
         | 
         | In Valorant (similar to Counter Strike), at the start of the
         | game you have 60 seconds to buy your weapons and abilities for
         | the round. Valorant/CS is typically a best-of-13, and before
         | each round is a 60 second "buy" period.
        
           | typewithrhythm wrote:
           | It's the idea that if they leave more players idling in a
           | lobby, but period, or animation, that it costs them less.
           | 
           | It's a deceptive way to sell people less game.
        
           | dgunay wrote:
           | In CS you can leave the buy zone immediately. I don't
           | necessarily believe that Valorant's decision to fence players
           | in their spawn for the first minute during the buy period is
           | simply to save on server costs, especially because they
           | realized that optimization possibility after the fact. Being
           | able to buy your weapons quickly may have an element of
           | skill, but it doesn't make for particularly interesting
           | gameplay. They may have just decided that they'd rather level
           | this part of the playing field so people can focus on the
           | core tactical FPS gameplay.
        
             | LorenzoGood wrote:
             | In CS you have a 20 second+ buy phase where you can't move.
        
             | andrepd wrote:
             | In CS you have 15 seconds to buy, which is more than enough
             | for any non-newbie.
        
       | Liquix wrote:
       | very interesting read, it seems like
       | management/engineering/vendors were all willing to get on the
       | same page to hit the frame budget. especially the bit about
       | profiling every line of game code into an appropriate bucket -
       | sounds like a lot of work which paid off handsomely.
       | 
       |  _If you just make a list of "performance tweaks" you might learn
       | about in, say, a game dev blog post on the internet, and execute
       | them without considering your application's specific needs and
       | considerations, you might hurt performance more than you help
       | it._
       | 
       | nice.
        
       | syspec wrote:
       | This post reads less like an engineering deep dive and more like
       | a Xeon product brochure that wandered into a video game blog.
       | They casually name-drop every Intel optimization short of
       | tattooing "Hyperthreaded" on their foreheads.
        
         | mtoner23 wrote:
         | well of course they would. they bought all intel hardware. and
         | they are making one of the most perfromant multiplayer servers
         | ever. they should be mentioning every optimization possible. if
         | they had amd thread ripper servers they would mention all those
         | features too.
        
       | Havoc wrote:
       | You can mess with the code all day long, but you're not getting
       | away from raw latency.
       | 
       | The modern matchmaking approach groups people by skill not
       | latency, so you get a pretty wild mix of latency.
       | 
       | It feels nothing like the old regional servers. Sure the skill
       | mix was varied, but at least you got your ass handed to you in
       | crisp <10ms by actual skill. Now it's all getting knife noscoped
       | around a corner by a guy that rubberbanded 200ms into the next
       | sector of the map already while insulting your mom and wearing a
       | unicorn skin
        
       ___________________________________________________________________
       (page generated 2025-10-06 23:00 UTC)