Internal Packet loss (first two hops)

alright, Iā€˜m going to do that back home. I also just asked a friend who measured 19 with only the game and spotify drawing bandwith. Could this be due to the game? the moment I closed it yesterday, up- and downstream dropped to 0

Could be the game, it is just that 19 Mbps is a quite a lot; typically games like valorant send one packet per game tick (128 Hz I believe) and actor. Now I think these packets typically are smaller than full MTU (~1500 bytes), but let's assume one full packet per omponent:

(128 * 1500*8)/1000^2 = 1.536 Mbps/oponent

Mmmh, maybe 15-19 Mbps is not that bad 19/1.536 = 12.3697916667 other players, that does not sound that excessive! Maybe my assumption about how much download traffic a modern game requires is off.... How many players do you typically share the server with?

But with a 37 Mbps Shaper 19 Mbps should still go through relatively smoothly.

It depends on the game mode, usually around 9-11

Mmh, so the amount of data is at least not off by an order of magnitude, but still rather high... I guess that still should be confirmed by packet captures during gameplay (also to get an idea how large valorant's packets actually are).

But that still leaves us to puzzle why the shaper at 37 Mbps with only 19 Mbps worth of traffic still drops packets.... we would need to see packet bursts that clog the queue for > 100 ms before the dropper is engaged at all, but if all packets for 12 players come back to back we are talking about:
(12 * 1500*8)/1000^2 = 0.144 Mbit
worth of packets which at 37 Mbps would take roughly
1000 * 0.144/37 = 3.89ms
to service which is way to short to drive the respective cake hashbucket into dropping mode (for at least 100ms the minimum sojourn time would need to stay above 5ms)...

I think I was able to capture some instances of packet loss while wireshark was running:

  • I had several retransmissions (88 in about 5mins) as well as 22 instances where the previous tcp segment was not captured (= packet loss, I if got that right).

  • the source was always a cloudflare server (http://172.64.155.155) - I use their dns servers if that's relevant - and the destination my pc's local ip.

  • part of the info was either "Ignored Unknown Record" or "TCP segment of a reassembled PDU)"

Those are the corresponding xDSL stats:

Previous 15 minutes time = 15 min 0 sec
FEC:		1108	0
CRC:		1		0
ES:		    1		0
SES:		0		0
UAS:		0		0
LOS:		0		0
LOF:		0		0
LOM:		0		0

The xDSL stats are only relevant if you would see considerable more drops in Valorant than cake logs over the same period, but alas it seems that these are well correlated...
You probably know, but only CRCs (and unsuccessful retransmissions that your modem does not log) are indicative of lost packets, so your line seems to be clean right now.

Not sure about the latter, but always try to look at the tc -s qdisc output differences from before and after the capture to see whether these might be caused by your own traffic shaper.

Mmmh, is valorant using these servers as well?

What I would like to know is how many packets and in what interval does the game send in your direction while you play...

I ran another test for about 10mins. I was just running around on an online server without any other players. according to valorant, I dropped 163 packets and could tell that there were some issues (teleporting, lag)

  1. result tc -s qdisc before
root@OpenWrt:~# tc -s qdisc
qdisc noqueue 0: dev lo root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 0: dev eth0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 19005095081 bytes 25545737 pkt (dropped 0, overlimits 0 requeues 609)
 backlog 0b 0p requeues 609
  maxpacket 1514 drop_overlimit 0 new_flow_count 595 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc noqueue 0: dev br-lan root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev eth0.1 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc cake 8011: dev eth0.2 root refcnt 2 bandwidth 10Mbit diffserv3 dual-srchost nat nowash no-ack-filter split-gso rtt 100ms noatm overhead 34 mpu 88 memlimit 8Mb
 Sent 7267520 bytes 18948 pkt (dropped 1, overlimits 454 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 20Kb of 8Mb
 capacity estimate: 10Mbit
 min/max network layer size:           28 /    1480
 min/max overhead-adjusted size:       88 /    1514
 average network hdr offset:           14

                   Bulk  Best Effort        Voice
  thresh        625Kbit       10Mbit     2500Kbit
  target         29.1ms          5ms       7.29ms
  interval        124ms        100ms        102ms
  pk_delay          0us       2.15ms         93us
  av_delay          0us        169us          3us
  sp_delay          0us         16us          3us
  backlog            0b           0b           0b
  pkts                0        18912           37
  bytes               0      7263528         5486
  way_inds            0            6            0
  way_miss            0          469            6
  way_cols            0            0            0
  drops               0            1            0
  marks               0            0            0
  ack_drop            0            0            0
  sp_flows            0            1            1
  bk_flows            0            1            0
  un_flows            0            0            0
  max_len             0         1494          590
  quantum           300          305          300

qdisc ingress ffff: dev eth0.2 parent ffff:fff1 ----------------
 Sent 2798189 bytes 13932 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc cake 8012: dev ifb4eth0.2 root refcnt 2 bandwidth 37500Kbit diffserv3 dual-dsthost nat nowash ingress no-ack-filter split-gso rtt 100ms noatm overhead 34 mpu 88 memlimit 8Mb
 Sent 2982639 bytes 13925 pkt (dropped 7, overlimits 2173 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 294Kb of 8Mb
 capacity estimate: 37500Kbit
 min/max network layer size:           46 /    1500
 min/max overhead-adjusted size:       88 /    1534
 average network hdr offset:           14

                   Bulk  Best Effort        Voice
  thresh       2343Kbit    37500Kbit     9375Kbit
  target         7.75ms          5ms          5ms
  interval        103ms        100ms        100ms
  pk_delay          0us        290us         38us
  av_delay          0us         30us          3us
  sp_delay          0us         16us          3us
  backlog            0b           0b           0b
  pkts                0        13885           47
  bytes               0      2990007         3230
  way_inds            0           11            0
  way_miss            0          475            4
  way_cols            0            0            0
  drops               0            7            0
  marks               0            0            0
  ack_drop            0            0            0
  sp_flows            0            0            1
  bk_flows            0            1            0
  un_flows            0            0            0
  max_len             0         1514           70
  quantum           300         1144          300
  1. after:
root@OpenWrt:~# tc -s qdisc
qdisc noqueue 0: dev lo root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 0: dev eth0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 19029879881 bytes 25626166 pkt (dropped 0, overlimits 0 requeues 610)
 backlog 0b 0p requeues 610
  maxpacket 1514 drop_overlimit 0 new_flow_count 597 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc noqueue 0: dev br-lan root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev eth0.1 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc cake 8011: dev eth0.2 root refcnt 2 bandwidth 10Mbit diffserv3 dual-srchost nat nowash no-ack-filter split-gso rtt 100ms noatm overhead 34 mpu 88 memlimit 8Mb
 Sent 22720563 bytes 63427 pkt (dropped 2, overlimits 1453 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 58Kb of 8Mb
 capacity estimate: 10Mbit
 min/max network layer size:           28 /    1500
 min/max overhead-adjusted size:       88 /    1534
 average network hdr offset:           14

                   Bulk  Best Effort        Voice
  thresh        625Kbit       10Mbit     2500Kbit
  target         29.1ms          5ms       7.29ms
  interval        124ms        100ms        102ms
  pk_delay          0us       1.14ms       1.36ms
  av_delay          0us         56us         74us
  sp_delay          0us         16us         19us
  backlog            0b           0b           0b
  pkts                0        63249          180
  bytes               0     22689861        32250
  way_inds            0            9            0
  way_miss            0         1221            8
  way_cols            0            0            0
  drops               0            2            0
  marks               0            0            0
  ack_drop            0            0            0
  sp_flows            0            1            1
  bk_flows            0            1            0
  un_flows            0            0            0
  max_len             0         1514          590
  quantum           300          305          300

qdisc ingress ffff: dev eth0.2 parent ffff:fff1 ----------------
 Sent 9776467 bytes 47051 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc cake 8012: dev ifb4eth0.2 root refcnt 2 bandwidth 37500Kbit diffserv3 dual-dsthost nat nowash ingress no-ack-filter split-gso rtt 100ms noatm overhead 34 mpu 88 memlimit 8Mb
 Sent 10423069 bytes 47043 pkt (dropped 8, overlimits 5677 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 294Kb of 8Mb
 capacity estimate: 37500Kbit
 min/max network layer size:           46 /    1500
 min/max overhead-adjusted size:       88 /    1534
 average network hdr offset:           14

                   Bulk  Best Effort        Voice
  thresh       2343Kbit    37500Kbit     9375Kbit
  target         7.75ms          5ms          5ms
  interval        103ms        100ms        100ms
  pk_delay          0us        225us         49us
  av_delay          0us         30us         10us
  sp_delay          0us         12us          9us
  backlog            0b           0b           0b
  pkts                0        46892          159
  bytes               0     10424077        11104
  way_inds            0           84            0
  way_miss            0         1229            5
  way_cols            0            0            0
  drops               0            8            0
  marks               0            0            0
  ack_drop            0            0            0
  sp_flows            0            2            0
  bk_flows            0            0            0
  un_flows            0            0            0
  max_len             0         1514          194
  quantum           300         1144          300
  1. xdsl stats:
Previous 15 minutes time = 15 min 0 sec
FEC:		1320		0
CRC:		4		0
ES:		1		0
SES:		0		0
UAS:		0		0
LOS:		0		0
LOF:		0		0
LOM:		0		0
  1. wireshark:
  • 4x TCP Previous segment not captured (all from the game server to my pc)
  • 2x Retransmission
  • time interval (seconds since start):
No.		time 		source 			destination 	protocol 	length	 info
33048	122.694057	162.249.72.1	192.168.10.213	UDP			217		7112 ā†’ 55840 Len=175
33049	122.710033	162.249.72.1	192.168.10.213	UDP			84		7112 ā†’ 55840 Len=42
33050	122.724831	162.249.72.1	192.168.10.213	UDP			74		7112 ā†’ 55840 Len=32

I also took a screenshot of the realtime bandwith graph towards the end (this was just me on an online server without any other players):
Screenshot 2022-06-30 213521

I'm really confused since I can't really see the packet loss indicated by the game itself in the data (whether it is wireshark, xdsl or tc -s qdisc. Nethertheless, it was really noticable that there was something wrong. I had a friend of mine do the same thing and he did not drop a single packet within 10mins

Edit: While I was typing this message, I apparently dropped some more packets even though there was no real load (game menu open):

root@OpenWrt:~# tc -s qdisc
qdisc noqueue 0: dev lo root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 0: dev eth0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 19101488758 bytes 25726194 pkt (dropped 0, overlimits 0 requeues 610)
 backlog 0b 0p requeues 610
  maxpacket 1514 drop_overlimit 0 new_flow_count 597 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc noqueue 0: dev br-lan root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev eth0.1 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc cake 8011: dev eth0.2 root refcnt 2 bandwidth 10Mbit diffserv3 dual-srchost nat nowash no-ack-filter split-gso rtt 100ms noatm overhead 34 mpu 88 memlimit 8Mb
 Sent 29835620 bytes 103192 pkt (dropped 9, overlimits 8991 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 58Kb of 8Mb
 capacity estimate: 10Mbit
 min/max network layer size:           28 /    1500
 min/max overhead-adjusted size:       88 /    1534
 average network hdr offset:           14

                   Bulk  Best Effort        Voice
  thresh        625Kbit       10Mbit     2500Kbit
  target         29.1ms          5ms       7.29ms
  interval        124ms        100ms        102ms
  pk_delay          0us       12.5ms       1.09ms
  av_delay          0us       1.05ms         63us
  sp_delay          0us         14us          9us
  backlog            0b           0b           0b
  pkts                0       102964          237
  bytes               0     29797530        47504
  way_inds            0          231            0
  way_miss            0         3379           11
  way_cols            0            0            0
  drops               0            9            0
  marks               0            0            0
  ack_drop            0            0            0
  sp_flows            0            1            1
  bk_flows            0            1            0
  un_flows            0            0            0
  max_len             0         1514          590
  quantum           300          305          300

qdisc ingress ffff: dev eth0.2 parent ffff:fff1 ----------------
 Sent 72994395 bytes 106485 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc cake 8012: dev ifb4eth0.2 root refcnt 2 bandwidth 37500Kbit diffserv3 dual-dsthost nat nowash ingress no-ack-filter split-gso rtt 100ms noatm overhead 34 mpu 88 memlimit 8Mb
 Sent 74432445 bytes 106448 pkt (dropped 37, overlimits 82212 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 294Kb of 8Mb
 capacity estimate: 37500Kbit
 min/max network layer size:           46 /    1500
 min/max overhead-adjusted size:       88 /    1534
 average network hdr offset:           14

                   Bulk  Best Effort        Voice
  thresh       2343Kbit    37500Kbit     9375Kbit
  target         7.75ms          5ms          5ms
  interval        103ms        100ms        100ms
  pk_delay          4us        520us        107us
  av_delay          0us         85us         17us
  sp_delay          0us         15us         13us
  backlog            0b           0b           0b
  pkts                1       106013          471
  bytes              90     74452331        32764
  way_inds            0          417            0
  way_miss            1         3375            5
  way_cols            0            0            0
  drops               0           37            0
  marks               0            0            0
  ack_drop            0            0            0
  sp_flows            0            6            1
  bk_flows            0            1            0
  un_flows            0            0            0
  max_len            90         1514          194
  quantum           300         1144          300

Odd, in the first test you reported drops (cake, xdsl, wireshark* combined) do not come close to what the game reports, which indicates that these drops came either before your router/dsl link (e.g. if your ISP has congested peering/paths to the game servers or if you end up playing on an overloaded server); or after your router on the way to your gaming machine...

*) Most games use UDP and there wireshark really does not know whether a packet was dropped/is missing

Exactly, the numbers - especially cake - are not great but definitely way lower than the in game netstats.
I already replaced the cable between my pc and router; does this mean I should doubt my ISP's verdict (= line stability is solid + no packet loss measurable on their end)?

That clearly depends... the stats on your DSL link indicate that you are not having massive DSL problems, so your ISP might be right here, but it could still be that they have issues further up in their network (but again the drops could also happen truly outside of their domain).

Maybe look at the ethernet statistics of your gaming computer before and after playing a game, that is an unlikely but not impossible place to loose some packets...

Today I did another run for about an hour. The result was the same: cake and wireshark showed some packet loss, xdsl stats a couple of crc errors but what really confused me is that most of the lost packets I see within wireshark ( tcp.analysis.lost_segment) were sent from my modem to my pc. Can you make anything out of that?

Edit:
Interestingly, all these entries look exactly the same:

No.     Time        Source      Destination     Protocol  Length   Info
210953	1075.333841	192.168.1.1	192.168.10.213	TCP	      1514	   [TCP Previous segment not captured] 80 ā†’ 61708 [ACK] Seq=123817 Ack=385 Win=6432 Len=1460 [TCP segment of a reassembled PDU]

Edit2: In fact every dropped package shows "Len=1460" as part of its info even though the values within the length column vary

Smaller packet delivery units are reassembled to make the whole packet

I got an update I'd like to share with you guys: Logging with PingPlotter over the past couple of days, I realized that packet loss really is dependant on the interval: while 2,5 and 5 are totally fine, 1 and 0,5 seconds show >50% packet loss for the first two hops. Is this something I could fix within open wrt?

Edit: For 0,5s, I observed something that puzzled me: PL for the first hop (internal router ip) was constantly at 50% while the value slowly climbed up for the second hop (external ipv4 address), starting at around 20 all the way up to 70%

Increase the ICMP rate limit... but really that is purely cosmetic, the easiest way forward is to ignore these two hops (as long as higher-up hops show considerably less/no packet loss).

It seems like the three hops following my external ip (third one = last from my ISP's network before they hand it over to the valorant servers) are - even though this happens much slower - also following the 'build up' on the second hop. They start at 0% packet loss but went up to 4, 6, and 8% packet loss. I could not spot any CRC errors within the same time frame

Edit: The moment I restart to ping, PL is gone for these hops again. With a larger interval (2,5s) there is no such 'build up' of PL

It is a well known fact that network operators consider ICMP more of a courtesy than something they strictly owe the network's users so many hops will either down-prioritize ICMP response generation or rate limit it or both. So ping/traceroute/mtr/pingplotter are still useful tools, but not as easy to interpret as one would like. Here is a link to a great description of the issues, albeit a but technical:
https://archive.nanog.org/sites/default/files/10_Roisman_Traceroute.pdf
See the section titled "Prioritization and Rate Limiting" :wink:

Thank you for these slides! They really helped me to understand what I'm doing there when I'm pinging several IPs at once.
Today, I realized something that was rather odd to me: Packet Loss jumped to 100% for less than a sec when I turned wifi on/off. Is this normal behaviour (I was able to replicate it consistently) or could it indicate some router malfunction?

It depends, if pingplotter runs on a machine connected via the WiFi being switched off and on again, I would expect packet loss, if pingplotter runs on a computer connected to the router via wired ethernet I would expect no packet loss.

I ran PingPlotter on a PC connected via LAN (motherboard without wifi) and deactivated wifi via Luci web interface on the same machine.

Ah, then I would not expect packetloss, but I have not tested that myself, so can not tell whether my intuition is correct for OpenWrt's default behavior.