[HN Gopher] Riot Games Tech Blog: Artificial Latency for Remote ...
       ___________________________________________________________________
        
       Riot Games Tech Blog: Artificial Latency for Remote Competitors
        
       Author : kevinU
       Score  : 182 points
       Date   : 2022-05-17 15:49 UTC (7 hours ago)
        
 (HTM) web link (lolesports.com)
 (TXT) w3m dump (lolesports.com)
        
       | dematz wrote:
       | As context this was a big international fiasco. Nobody was acting
       | maliciously but fans of RNG and other teams felt wronged. RNG
       | didn't want to attend due to covid restrictions on travel but
       | Riot really wants Chinese viewers in international tournaments,
       | hence all this online latency work. Pros on other teams were lied
       | to by the false latency information which must be almost paranoia
       | inducing to be told it's only 35ms even when it (correctly) feels
       | higher. In the end RNG had to replay their games, which was not
       | as bad as it could have been since they were vs much weaker
       | teams, but still annoying.
       | 
       | Anyways, by "scenarios where the actual ping was significantly
       | lower than the target latency" do they mean like if the ping from
       | Busan-server is 10 but they want it to feel like 35? I feel like
       | that's the one scenario you'd care about, making the Busan
       | players have 35 ping was the whole point.
       | 
       | Edit - also the other scenario, where the actual ping is
       | significantly _higher_ than the target latency...well in that
       | case your latency service would be some sort of magical time
       | travel box! Adding latency is literally the _only_ thing it can
       | do right? It 's not possible to lower it. Maybe the it depends
       | what they mean by "significantly" but idk the target latency was
       | 35ms so like at most they could be 35ms lower than that.
       | 
       | I guess they didn't catch it because the bug was in the latency
       | service itself which gave the wrong value to both the in game
       | display and to the old network monitoring system. Idk in
       | hindsight it's easy to say if you're going to introduce this new
       | ping equalizing service it might break how you test ping
       | especially because it hasn't been tested in soloq. But meh a lot
       | easier to see what happened in hindsight after they write it all
       | up.
        
         | ear7h wrote:
         | > I feel like that's the one scenario you'd care about, making
         | the Busan players have 35 ping was the whole point
         | 
         | I think the key word is "significantly". The post states that
         | the tool was originally developed for matches where both teams
         | would be remotely connected, so neither team would have a
         | significantly different latency (you can usually enginneer this
         | by the first approach they suggested, of picking a server in
         | between two locations).
        
         | vikingerik wrote:
         | You can in fact have that magical time-travel approach to get
         | apparent latency lower than the real number. Keep a history of
         | the game state at every tick, so you can roll back to any
         | previous instant. If real latency from one client is 50 ms, and
         | you're targeting 35 ms, you roll back the game state by 15 ms
         | each time input comes in from that client, and re-run the game
         | logic from that point forwards and send the resulting state
         | update to all clients. Those clients will see a bit of
         | jumpiness in the game state, which isn't ideal, but may be the
         | lesser evil compared to enduring more latency.
         | 
         | (I have no idea what LoL in particular supports or implements,
         | but that's the general idea.)
        
           | [deleted]
        
           | __turbobrew__ wrote:
           | I really dislike games which rewind state based upon latency.
           | It penalizes people with good ping and can lead to very weird
           | game states where a large rollback can cause teleportation of
           | a laggy player as seen by non laggy players.
           | 
           | Team Fortress 2 is particularly bad where high latency
           | players can teleport around or you can shoot and hit a laggy
           | player but it doesn't register by the server due to a
           | rollback. Some players purposely exploit this function by
           | artificially increasing their ping values to absurd levels
           | (700ms or more) which makes them very hard to hit. Many
           | community TF2 servers enforce maximum ping limits for this
           | reason.
           | 
           | Most notably high pings are used to exploit when playing as
           | the Spy class due to the fundamental purpose of the class is
           | to get behind you to backstab you. If you have 700 ping can
           | abuse the fact that you you can get behind players due to the
           | game being out of sync and if you can backstab a player the
           | server will roll back and kill the non-laggy player even
           | though you were no where near behind them from their non-
           | laggy perspective.
        
           | meinersbur wrote:
           | That's just another kind of latency. Additional time has
           | still passed from you (or the enemy player) doing an action,
           | and you seeing the results of that action on your screen.
           | 
           | By contrast, the server rolling back the game state is
           | indistinguishable from the server always being 15ms behind
           | and the clients running the simulation ahead of time (which
           | they do anyway for fluency [1]). The "jumpiness" is called
           | rubberbanding [2].
           | 
           | [1] https://www.gabrielgambetta.com/client-side-prediction-
           | serve...
           | 
           | [2] https://www.urbandictionary.com/define.php?term=rubberban
           | din...
        
           | [deleted]
        
           | jchw wrote:
           | This strategy is commonly referred to as being in the class
           | of "latency hiding" as it doesn't actually improve latency,
           | it just allows you to reduce _apparent_ latency. In practice
           | it's still useful but I think it's _mainly_ useful because it
           | allows for _local_ input to be buffered significantly less
           | than if you were to compensate for lag by adding buffering
           | only. However, _that_ is not always useful. It is mainly
           | useful in games where netplay is handled in a lock-step
           | fashion, where each peer needs to keep every action coherent
           | frame-wise. That makes sense for things like fighting games,
           | but it doesn't make all that much for say, puzzle games, even
           | though those can be quite latency sensitive too.
           | 
           | Either way, there is nothing magic. At the end of the day,
           | the soonest you can see an action is still physically
           | unchanged. Especially since the prediction model that makes
           | the most sense is just assuming no action.
           | 
           | That said, I dunno enough about MOBAs to try and postulate on
           | how much it matters, and I have no idea if LoL is using
           | lockstep or some other approach.
        
             | skocznymroczny wrote:
             | LoL is not using lockstep. Lockstep has two big
             | disadvantages for a competitive game. Tt requires both
             | client to have the full game state to run the simulation,
             | which makes creation of maphacks trivial. The second issue
             | with lockstep is that if one player is lagging, all players
             | are lagging, which is also not something you'd like to have
             | in a fast paced competitive game.
        
               | reitzensteinm wrote:
               | What to do when one player is lagging is a design choice.
               | You can instead keep the game going and feed in their
               | delayed inputs.
        
               | bee_rider wrote:
               | I can definitely see why the maphack thing would be an
               | issue generally, but in the case of a broadcast esports
               | competition is it so significant? They seem to have put
               | an awful lot of engineering effort into their special lag
               | system for this tournament, so I assume they at least
               | have some pretty decent budget. So, presumably they could
               | create a special client (possibly even sending the
               | competitors locked down hardware). This seems like it
               | would let them do some things we'd normally consider
               | impossible or 'magic' -- assume both sides of the pipes
               | are going to tell you the truth about everything...
        
               | jimmydorry wrote:
               | There are pretty regular esports scandals involving
               | cheating. Heck, we've seen players bring their cheats in
               | via special drivers embedded in their peripherals (which
               | is why almost every serious in-person tournament provides
               | peripherals + PC and does not allow the player access to
               | them outside of supervision).
        
           | [deleted]
        
           | [deleted]
        
       | whateveracct wrote:
       | A good software lesson here.
       | 
       | They built a complex system to tweak tens of ms (at most) of ping
       | to equalize. And they had a bug and it disadvantaged on team.
       | Thus, they have to replay due to unfairness introduced by Riot
       | itself.
       | 
       | They could've gone Option 1 - all teams at their natural ping.
       | While it wouldn't be as perfect in theory, it wouldn't have
       | resulted in replaying matches. Plenty of other esports and
       | fighting games play at natural ping and have real results. There
       | is unfairness due to location, but only scrubs blame 5-15ms ping
       | advantage for a loss in a game as strategic as LoL.
       | 
       | People play Melee with ping differences bigger than that and it
       | works fine lol. Waaay more technical game shows that there's
       | tolerance.
       | 
       | Not to mention that the server option could've had some system to
       | distribute across advantageous servers over the course of a
       | series.
        
         | holmium wrote:
         | > People play Melee with ping differences bigger than that and
         | it works fine lol. Waaay more technical game shows that there's
         | tolerance.
         | 
         | I dunno; I'd imagine people would be mad if there was a 15ms
         | ping differential in Melee. I think the online/netplay
         | tournament results are already looked at different than
         | offline, console results.
         | 
         | Moreover, I'm pretty sure that you can't have a differential
         | ping in a P2P game with rollback, so the competitive issues are
         | different between the two scenes. I understand Riot wanting to
         | equalize them. In Melee specifically, I think that the players
         | have to decide on a common frame delay to play, right? If so,
         | then the Melee community has come to the same solution for
         | competitive netplay as Riot has.
        
           | whateveracct wrote:
           | Most Melee players use a frame delay that's equivalent to the
           | lag present in a Gamecube + CRT setup. A little artificial
           | input lag goes a long way!
        
         | darkwizard42 wrote:
         | I think you are completely incorrect when you say that a 5-15ms
         | ping advantage doesn't cause a massive effect in a game of LoL.
         | Even the greatest player of the game (Faker) mentioned the
         | difference between "35"ms and the near 0 that Korean players
         | are used to playing.
         | 
         | Low ping is part of players' muscle memory in how they react to
         | visual signals. Changing that slightly creates a big
         | difference, especially in the early and mid game where the
         | outplays are less strategic and can often be more mechanical.
         | 
         | Even in later game teamfighting, the familiarity with latency
         | between key/mouse input and actual in-game movement is
         | mechanically intense (ex. auto-spacing in a close teamfight)
        
         | DixieDev wrote:
         | This shouldn't detract too much from your point, but for
         | fighting games the situation is slightly different from most
         | other genres:
         | 
         | Modern fighting games, as well as older ones that have been
         | modded to included this (such as Melee), have a netcode model
         | called "rollback" that can negate network-induced latency on
         | local inputs. The trade-off is that what you see is usually
         | inaccurate until you receive inputs from the remote player's
         | machine.
         | 
         | Despite fighters often requiring fast reaction speeds, this
         | downside is not a big deal granted that the ping is low. The
         | first few frames of many actions are generally quite subtle,
         | enough that they are quite hard to distinguish from each other;
         | it's usually specific keyframes/poses that people will actually
         | be reacting to.
         | 
         | Melee is probably hurt the most though, as movement is
         | extremely fast and very important, and the difference between
         | wavedashing left or right is not masked by subtle animations.
        
         | gosukiwi wrote:
         | There is a huge difference between 0 ping and 35 ping though,
         | particularly in pro-level LoL. It is strategic but that ping
         | can be the difference between flashing a skillshot or not, and
         | swinging the whole course of a teamfight.
         | 
         | Of course 35 ping is not THAT bad and I agree, while unfair, it
         | wouldnt be the end of the world, it's not even Worlds, just
         | MSI, an invitational event.
        
           | tester756 wrote:
           | MSI is "just" 50% of international tournaments
           | 
           | imo it's very serious tournament
        
             | gosukiwi wrote:
             | It is a very serious tournament, it's just not as important
             | as Worlds
        
           | [deleted]
        
         | xboxnolifes wrote:
         | > People play Melee with ping differences bigger than that and
         | it works fine lol. Waaay more technical game shows that there's
         | tolerance.
         | 
         | Sure, people play with ping disparity in tons of competitive
         | games, but that's because there's not really an alternative for
         | online play. It's "play with a ping disparity" or "don't play
         | at all".
         | 
         | Once there is more widespread reliable alternative, which Riot
         | seems to be working toward in their own game tournaments, maybe
         | we'll see if this tolerance persists in competitive
         | tournaments.
        
       | gareth_untether wrote:
       | Reminds me of the cable lengths for black boxes connected to the
       | network in Wall Street. Each cable is the same length regardless
       | of which computer is closer to the access point.
        
         | jedberg wrote:
         | I never understood why they didn't use randomized length micro
         | batches to solve this.
         | 
         | Instead of processing orders instantly, wait between 200ms and
         | 500ms and then process all orders that came in that window in
         | random order. Then being 5ms closer to the server wouldn't
         | matter.
        
           | blibble wrote:
           | this is called a periodic auction and has been common on
           | European exchanges for nearly a decade
           | 
           | (though the matching algorithm varies)
        
           | teen wrote:
           | That's the same problem, you're just trying to get into the
           | earliest window
        
             | jedberg wrote:
             | Ok but you don't know the window size for any given batch,
             | so game theory-wise your best bet is to just process as
             | fast as you can and then place your order.
        
           | w-m wrote:
           | I don't think I get how that solves the issue: you would have
           | set a fixed cutoff time, where you switch from one
           | window/batch to the next. It doesn't matter when you arrive
           | within the window. But statistically, even for random window
           | lengths, if you have a smaller latency, you will make the
           | cutoff for the earlier window more often.
        
             | foota wrote:
             | If the window is as large as 500ms then anyone can hit that
             | most of the time, provided they have a good enough clock
             | and decent network.
        
             | jedberg wrote:
             | But because of the random ordering within the windows, it
             | won't matter. In most cases you wouldn't hit the cutoff.
        
           | pdpi wrote:
           | 2-500 ms latency for games is atrocious. That's an order of
           | magnitude higher than what this tournament was targeting.
        
             | jedberg wrote:
             | This thread is about HFT.
        
               | pdpi wrote:
               | So it is. I somehow managed to miss that at the top of
               | the thread. My bad!
        
           | axg11 wrote:
           | That sounds like a complex solution. Sometimes a dumb
           | solution that works good enough is better than a complex
           | solution that _probably_ can't be exploited.
        
             | jedberg wrote:
             | It's complex on one end to reduce complexity on the other
             | -- the trading companies wouldn't have to worry about
             | millisecond optimizations if they trading batches were
             | 200ms windows. So the wire lengths wouldn't matter but also
             | not mattering is the processor, memory, software, etc. for
             | the trading companies. Seems like a good tradeoff.
             | 
             | And honestly the wire thing probably isn't real. Light
             | moves 30cm in a nanosecond. The wire lengths could be 3
             | meters different and only make a 10ns difference. Not sure
             | that would matter all that much.
        
               | JamesSwift wrote:
               | I think it just moves the goal post of the problem. If I
               | now have a 200ms window, then I need to optimize for that
               | 200ms cutoff. I want to do as much work as possible while
               | _still reaching the cutoff_ and so minimization of "non
               | work" still matters. Not only that, but now you
               | incentivize filling up that 200ms with 200ms of analysis.
        
               | gmueckl wrote:
               | Isn't that where the randomness of the trading interval
               | comes in? How do you optimally fill out a time interval
               | with a length that is unknown to you?
        
               | JamesSwift wrote:
               | Ah, I didnt interpret the comment as being a variable
               | delay. I think the point still holds though that you
               | would still optimize for the lower bound.
        
               | jedberg wrote:
               | You could, but then if say the delay is 439ms, then
               | you'll sit idle for 239ms. It would make more sense from
               | a game theory perspective to simply process for as long
               | as necessary and then place the order.
        
               | blibble wrote:
               | the wire thing is definitely real for IEX
               | 
               | it's part of the exchange's license
               | 
               | and they have several videos of the rather large wire
               | 
               | there's even a tom scott video on it:
               | https://www.youtube.com/watch?v=d8BcCLLX4N4
        
               | [deleted]
        
               | axg11 wrote:
               | I used to work in HFT. I promise you that companies would
               | still try to exploit randomized batches. There is an
               | advantage to being the very last entrant into a batch
               | (most up to date information). Truly random batches are
               | not trivial to implement and any statistical pattern in
               | the batching could be exploited.
        
               | jerf wrote:
               | "Truly random batches are not trivial to implement and
               | any statistical pattern in the batching could be
               | exploited."
               | 
               | If an HFT manages to exploit a _correctly_ implemented
               | entropy-pool random number generator using AES-256 to
               | extend the stream as needed, they 're welcome to pick up
               | a few more bucks as far as I'm concerned.
               | 
               | Yes, problems have existed before but I'm sure in this
               | case we can assume high-assurance and careful
               | programming, not some fresh grad being assigned the
               | problem and thinking linear congruential generators sound
               | really cool.
        
           | teddyh wrote:
           | Probably because such a system is not provably fair - you
           | can't prove your system is truly random.
        
             | jedberg wrote:
             | You would use an external source of randomness, which you
             | can definitely prove is _sufficiently_ random.
        
               | teddyh wrote:
               | You could do something like this:
               | 
               | * Pre-publish, for each time batch, a public key. You
               | could publish lists of these well in advance.
               | 
               | * Let everyone submit, alongside each order, a number
               | arbitrarily selected by them. It does not matter how they
               | select the number, but it would be simpler if everyone
               | chose distinct numbers.
               | 
               | * When order processing is done, do it by the order of
               | closeness of the submitted number to the _private_ key.
               | Publish the private key after order submission is closed.
               | 
               | * Everybody can now verify that the order of processing
               | is indeed by the order of the previously secret private
               | key, and everybody can verify that the private key
               | corresponds to the previously published private key.
        
               | Natfan wrote:
               | Alternatively, just do what Cloudflare does (did?), and
               | have some cameras pointed at lava lamps[0].
               | 
               | [0]: https://www.youtube.com/watch?v=1cUUfMeOijg
        
               | can16358p wrote:
               | Something very similar is done on smart contracts to
               | introduce randomness (at least to the practical extent)
               | on blockchain. Good thought experiment nevertheless to
               | provably inject randomness into a system with untrusting
               | parties.
        
               | jedberg wrote:
               | That seems unnecessary. Today the traders have to trust
               | the exchange to process fairly and in order -- there is
               | no verifiability. The verifiability would be nice, but
               | unnecessary.
        
         | jakey_bakey wrote:
         | That's neat, I didn't know about this. Very cool.
        
         | Misdicorl wrote:
         | Perhaps apocryphal/silly, but amusing nonetheless. Story goes
         | that this means you want to be in the computer _furthest_ from
         | the interconnect because light travels _slightly_ faster in
         | straight fiber than in coiled fiber.
        
           | colejohnson66 wrote:
           | Not apocryphal; IEX has 38 miles of wire in their building.
           | Tom Scott did a video a few years ago about it:
           | https://www.youtube.com/watch?v=d8BcCLLX4N4
        
             | vmception wrote:
             | Does IEX have any liquidity or uptake yet?
        
               | infinityio wrote:
               | Apparently they have 2.6% market share for trading in the
               | US?
        
           | Humdeee wrote:
           | I work in this space and although true (this is called modal
           | dispersion), there are compensation techniques always used in
           | termination equipment to 'handicap' or mitigate these
           | occurrences. Not perfect, but very, very, very small deltas.
           | Unsure if it's enough to act upon without knowing the length
           | from output to next input.
        
       | upwardbound wrote:
       | It looks like the error they made was this: They added too much
       | latency because they forgot to account for the latency they added
       | in the client. You can see from their architecture diagram
       | (Figure 4) that the latency measurement didn't include the client
       | delay.
       | 
       | https://images.contentstack.io/v3/assets/bltad9188aa9a70543a...
       | 
       | The blog post states: "The existing network monitoring system
       | measured the latency at the networking layer as shown by the
       | green arrow."
        
         | chabons wrote:
         | I read that section as comparing what they logged before vs
         | what the player experiences: the time taken for an input to be
         | registered and it's effect communicated to the user. Maybe I'm
         | wrong, but I don't think the intention was a precise
         | description of the error, but rather the hazard of not having
         | logs which reflect what the user experiences.
        
           | upwardbound wrote:
           | They stated that they use the same calculation for the logs
           | as for other purposes such as latency compensation. From near
           | the top of the blog post:
           | 
           | "The reason we did not find it sooner is that the cause of
           | the issue was a code bug that miscalculated latency, which
           | meant that the values in our logs were also wrong."
           | 
           | And from later in the post:
           | 
           | "Our logs were not displaying the issue because the
           | calculation was wrong. It explained why the latency was worse
           | in the venue than on the internet servers"
        
             | chabons wrote:
             | Right, but my point was that I think you're reading into
             | the diagram beyond it's intended purpose. I'm not sure how
             | you can tell that they're logging only the server-side
             | delay, and not the client-side delay, from a systems
             | diagram which shows each of those as a box connected by a
             | bi-directional arrow. For instance, it's clear to me that
             | they don't include the latency included by the game engine
             | in that metric, but not whether they include the server-
             | added latency or if they're aware of it and subtract it
             | off.
        
       | mleonhard wrote:
       | They used a complex and buggy solution when a simple solution
       | exists: Use the `tc` traffic control [0] program to configure the
       | Linux kernel to add a fixed amount of latency to traffic from the
       | local players [1]. If the game server does not run on Linux, they
       | could put a Linux bridge/router in front of it.
       | 
       | [0] https://en.wikipedia.org/wiki/Tc_%28Linux%29
       | 
       | [1] https://serverfault.com/a/841865
        
         | connor4312 wrote:
         | As I understand the blog post, the difficult (and buggy) part
         | is not the addition of latency, but calculating how much
         | latency to add and where to add it. I'm not sure how tc would
         | help much here, and actually don't see anything to indicate
         | they weren't using tc already.
        
         | spmurrayzzz wrote:
         | `tc` would give you non-deterministic microbursts that would be
         | hard to quantify as to whether they impacted competitive
         | integrity. This is an incredibly complex problem if they
         | actually care about millisecond level precision in small duty
         | cycles.
        
       | someweirdperson wrote:
       | Artificial or natural delays, I am somewhat confused that one end
       | measuring/calculating ping can end up with a wrong value.
       | Transmit at local time x, receive at local time y, subtract. It
       | only needs a working local clock.
       | 
       | Second surprising thing is artifical latency added on the client.
       | Anything on the client I would avoid, if possible.
       | 
       | Third, this all looks like magically connecting two ends. But it
       | is packets flowing from one to the other, and the other to the
       | one. Latency could be added to each independently, even on one
       | end, by artificially buffering to-be-send and/or received
       | packets.
       | 
       | What are the implications for game-play with an asymetric
       | latency, e.g. theoretical 0 delay to receive vs. long delay to
       | transmit, or vice versa?
        
         | chabons wrote:
         | I think the symmetric delay here makes sense, since you're
         | trying to simulate the latency of a (likely) symmetric
         | connection between another client and the server.
         | 
         | If you only add latency on the transmission, then 2 actions
         | taken at the same time by players with different amounts of
         | physical latency will be processed at different times. If we
         | assume the game clocks on each client and the server are in
         | sync, then this creates a competitive advantage for the player
         | with lower physical latency. For instance, if we have a timing
         | battle (ie: Zhonya's hourglass), where both players know that
         | at time 'T' they must each take an action, and the first to do
         | so comes out on top, then the player with higher physical
         | latency is at a disadvantage.
        
           | [deleted]
        
           | bcrosby95 wrote:
           | You can accomplish this by putting it all on the client, all
           | on the server, or a mix of both (what they chose).
           | 
           | For all on the server, you could add latency right after
           | receiving data from the client, but before game code
           | processes it, and before sending data to the client.
           | 
           | That said, there likely were technical considerations
           | involved in their decision to do a mix of both.
        
             | chabons wrote:
             | That's a good point, I hadn't thought of having independent
             | send a receive delays on the server, simulating a delayed
             | connection from the client's perspective without having it
             | participate.
             | 
             | I now wonder too what those technical considerations are,
             | since having the client add latency requires trusting the
             | client to add the delay and not cheat.
        
               | [deleted]
        
           | [deleted]
        
       | frozenlettuce wrote:
       | Warcraft 3's (pre-reforged) Battle.net had a 250ms delay for all
       | players (when it was launched dialup connections were still
       | common)
        
       | tester756 wrote:
       | I still don't understand
       | 
       | they didn't let anyone proficient at LoL even try using it?
        
         | colinmhayes wrote:
         | The difference was .01 seconds. It's not immediately obvious
         | that there is a problem.
        
           | RheingoldRiver wrote:
           | It was immediately obvious to competitors and reported on day
           | 1 of competition.
        
           | joebob42 wrote:
           | I suck at lol, the amount of ping it takes for me to be able
           | to tell it's different is only like 30-40 ms. Pro players
           | being able to tell and care at half that seems pretty likely.
        
           | tester756 wrote:
           | >The difference was .01 seconds. It's not immediately obvious
           | that there is a problem.
           | 
           | in games you really feel ping differences
           | 
           | if you were playing e.g for a year on 5ping and then jumped
           | on 30, then you'll feel that in games like LoL and probably
           | CSGO? idk about the second one.
        
             | colinmhayes wrote:
             | They said the ping was 45 instead of 35. I'm not denying
             | that the pros can tell the difference, I'm saying it
             | wouldn't be obvious to whatever tester they had that it was
             | 10ms off.
        
               | Karrot_Kream wrote:
               | As others have said, the pros noticed. Having an
               | incorrect calculation and seeing large jitter spikes can
               | probably push the latency into something like 50ms
               | momentarily, enough for pros to lose their "immersion".
        
       | jannyfer wrote:
       | The part I was interested about the most was glossed over.
       | 
       | In what situation can this happen?
       | 
       | > we realized that there was a calculation error that only
       | manifested in scenarios where the actual ping was significantly
       | lower than the target latency. In this situation the actual
       | latency would be considerably higher than what is displayed on
       | the overlay on the player's screens.
        
         | bobogei81123 wrote:
         | My guess is that they did not add in the client delay.
        
           | upwardbound wrote:
           | Exactly right.
           | 
           | They added too much latency because they forgot to account
           | for the latency they added in the client. You can see from
           | their architecture diagram (Figure 4) that the latency
           | measurement didn't include the client delay.
           | 
           | https://images.contentstack.io/v3/assets/bltad9188aa9a70543a.
           | ..
           | 
           | The blog post states: "The existing network monitoring system
           | measured the latency at the networking layer as shown by the
           | green arrow."
        
             | jannyfer wrote:
             | That kind of error would apply all the time.
             | 
             | But the blog post states: "a calculation error that only
             | manifested in scenarios where the actual ping was
             | significantly lower than the target latency".
        
               | upwardbound wrote:
               | Sadly, my guess is that they are transparently lying
               | about that. Since they apply the lag half on the client
               | and half on the server, their lag compensation would have
               | been off by a factor of 2x (or a factor of 100% from a
               | relative perspective) and so they might be just claiming
               | that a 100% error isn't very large when the total lag
               | difference is small. "Yes we were supposed to add 2ms and
               | we added 4ms instead, but at the end we were still only
               | wrong by 2ms (in the other direction) which is not a big
               | deal."
        
               | joebob42 wrote:
               | I think in practice this issue doubles the added latency,
               | which would only be noticable if the actual ping is
               | "significantly" lower.
               | 
               | Because realized ping is over by as much as original ping
               | was under, so if original wasn't significantly under...
        
         | mleonhard wrote:
         | That's also the kind of error that one can easily catch with a
         | unit test.
        
         | wswope wrote:
         | Knowing the classic Riot Games MO: I'd bet money there was a
         | plus instead of a minus that made it through code review, and
         | they're being intentionally vague to save face.
        
       | NelsonMinar wrote:
       | Some data: 8 years ago someone found going from 35ms to 0ms
       | latency meant you were likely to win games 1-2% more of the time:
       | https://www.reddit.com/r/dataisbeautiful/comments/1t23a0/lat...
       | 
       | And this is a little different, but Riot found that playing on
       | ethernet instead of wifi made you about 1% more likely to win
       | games.
       | https://web.archive.org/web/20160814131032/http://na.leagueo...
        
         | Karrot_Kream wrote:
         | I'm going to guess this effect is lower because it's being
         | marginalized across all player skill levels (ELO). In Riot's
         | post you can see that the higher tier the player is at, the
         | more likely they are to use Ethernet. If you conditioned on ELO
         | I suspect you'll find a much larger effect.
        
       | Kuinox wrote:
       | Seems something very hard to do in software but very easy to do
       | in hardware.
        
         | bob1029 wrote:
         | I'd argue the complexity of trying to achieve this at all is
         | too much to bear in practice, especially considering the type
         | of customers this would be inflicted upon. Competitive gamers
         | will now _also_ be wondering if the  "fake lag" system is
         | bugged, in addition to all of the other problems that could
         | still exist.
         | 
         | Some problems cannot be solved with clever tricks.
        
           | infinityio wrote:
           | if they pulled an IEX and just ran the Busan clients through
           | a few km of fibre to induce delay they could use native pings
           | and verify easily
        
         | bostonsre wrote:
         | Think other people have already done the hard part. Wouldn't be
         | too hard to write something that wraps tc and ping.
         | # hping -S -p 1234 somehost.com       HPING somehost.com (ens3
         | 1.2.3.4): S set, 40 headers + 0 data bytes       len=46
         | ip=1.2.3.4 ttl=64 DF id=0 sport=1234 flags=SA seq=0 win=26883
         | rtt=0.9 ms       len=46 ip=1.2.3.4 ttl=64 DF id=0 sport=1234
         | flags=SA seq=1 win=26883 rtt=0.8 ms       len=46 ip=1.2.3.4
         | ttl=64 DF id=0 sport=1234 flags=SA seq=2 win=26883 rtt=0.7 ms
         | # tc qdisc add dev ens3 root netem delay 25ms            #
         | hping -S -p 1234 somehost.com       HPING somehost.com (ens3
         | 1.2.3.4): S set, 40 headers + 0 data bytes       len=46
         | ip=1.2.3.4 ttl=64 DF id=0 sport=1234 flags=SA seq=0 win=26883
         | rtt=25.9 ms       len=46 ip=1.2.3.4 ttl=64 DF id=0 sport=1234
         | flags=SA seq=1 win=26883 rtt=25.8 ms       len=46 ip=1.2.3.4
         | ttl=64 DF id=0 sport=1234 flags=SA seq=2 win=26883 rtt=25.7 ms
        
           | merb wrote:
           | well adjusting the latency is the easy part. doing it in real
           | time while observing the connection and making adjustments,
           | that is when it becomes hard.
           | 
           | and they did it basically after the network stack, so if a
           | paket took 40ms they added no latency if it took 20ms they
           | added 15ms and so on.
           | 
           | so EACH paket was evaluated and of course this is not an easy
           | feat, because lol is serverside authoritive so the latency
           | must be correct inside the server and the client for each
           | packet.
        
             | bostonsre wrote:
             | Yea, I guess the question is whether or not to try to do it
             | at the packet level or just keep a running average of ping
             | latency and adjust it over time. They said `adjust the
             | latency (ping) to 35 ms` so I am assuming they are just
             | trying to do something like attempting to maintain an
             | average ping latency of 35 ms.
        
       | joshuak wrote:
       | Distributed consensus is hard. Very hard. Anyone dismissing the
       | problem as "should never have hopped," hasn't a clue as to how
       | hard and error prone reliable distributed consensus is. 35 ms lag
       | in overall responsiveness is an eternity in competitive game
       | play.
       | 
       | There are videos floating around that show drawing on a tablet
       | surface with various input latencies (perhaps someone has a link,
       | I can't find them at the moment). 35ms latency is very noticeable
       | to anyone never mind professional competitors.
       | 
       | Because of the tricks game designers must pull off in lieu of
       | proper distributed consensus which has hard requirements bound by
       | the laws of physics, it is completely likely there are lots of
       | bugs in the system. I think Riot did the best anyone could
       | reasonably have expected of them, and the write up is
       | particularly informative and helpful.
        
         | joebob42 wrote:
         | There's no consensus involved in the bug.
        
       | hsnewman wrote:
       | Decwars used to "equalize" latency for consoles verses dialups
       | (in the 1970's)...
        
         | NelsonMinar wrote:
         | Wow for real? That's amazing. I'd love to read more about that,
         | it seems quite innovative!
        
       | sdwr wrote:
       | I love the intent and actions behind this post. Finding an unfair
       | bug mid-tournament is serious, and it takes courage and integrity
       | on the part of the technical team to
       | 
       | -listen to the players
       | 
       | -investigate past what your own analytics are saying
       | 
       | -find and fix the bug under time pressure
       | 
       | -and disclose the (potentially embarrassing!) initial mistake
       | 
       | I think the article itself could have been worded better though.
       | It didnt feel very clear. As a reader, I want to know what went
       | wrong, how it was handled, and feel confident that you are on top
       | of the issue. All the stuff about "why we chose our network
       | topography" reads as details at best, justification/excuses at
       | worst.
        
         | bigcat12345678 wrote:
         | Yep, look at what Valve is doing to dota 2...
        
           | gverrilla wrote:
           | would you care to elaborate? I didn't play dota in a few
           | years
        
         | DantesKite wrote:
         | The technical team acted honorably, but the upper stewardship
         | at Riot games behaved horrendously.
         | 
         | They sacrificed the competitive integrity of their sport
         | because they didn't want to exclude RNG from the tournament,
         | because they wanted the audience of the Chinese market.
         | 
         | This article goes into more detail, giving a larger context for
         | why this situation shouldn't have never happened in the first
         | place.
         | 
         | https://www.invenglobal.com/articles/17207/montecristo-its-e...
        
           | colinmhayes wrote:
           | > because they wanted the audience of the Chinese market.
           | 
           | Or maybe because the tournament would've been shit without
           | them? Who wants to watch an international tournament with
           | only 1 of the clearly top 2 regions represented? WHole thing
           | would've been a forgone conclusion at that point.
        
             | DantesKite wrote:
             | Yes, the tournament would have been worse without them.
             | What I'm saying is that does not somehow justify penalizing
             | the other teams and the tournament writ large to "even" the
             | playing field if you value competitive integrity.
             | 
             | As the article states, increasing the ping doesn't make it
             | more fair for the other teams because they actually
             | traveled to the event. They're physically there. It only
             | makes it more fair for RNG who can't attend because of
             | Covid restrictions.
             | 
             | To paraphrase, it "punishes the teams who are there for a
             | team that isn't."
             | 
             | From a business perspective of course, I agree with you.
             | It's definitely better to sacrifice the level of play for
             | viewership (and it does sacrifice the level of play because
             | artificially increasing the ping at a LAN event makes the
             | game worse).
             | 
             | But if you're running a competitive eSport and you want a
             | fair sport, it's a terrible decision.
        
               | bee_rider wrote:
               | Fairness isn't a perk applied to a team, it is a property
               | of the game.
               | 
               | Unless "ability to travel during a pandemic" is
               | considered a skill for this game, it should not be
               | factored into the competition. So, if teams who can't
               | travel to be game are going to be included, then the host
               | must find a way to provide a fair game. This means that
               | remote and local players should have the same latency.
        
               | colinmhayes wrote:
               | > increasing the ping doesn't make it more fair for the
               | other teams because they actually traveled to the event
               | 
               | Can't agree. Those teams had an advantage when playing
               | RNG. Taking away that advantage does actually make the
               | event more fair for them, even though they are being
               | disadvantaged.
        
               | DantesKite wrote:
               | Could you clarify what you mean by "those teams had an
               | advantage when playing RNG"? I may have missed something.
               | I'm not sure what advantage you're referring to.
        
               | colinmhayes wrote:
               | Without the ping adjustment the travelling teams would
               | have a ping far lower than RNG. That is not fair, even if
               | it is out of the teams control.
        
       ___________________________________________________________________
       (page generated 2022-05-17 23:00 UTC)