Improve network performance for games

I was experiencing severe performance issues for ages and never could really pinpoint the source. CS:GO was pretty much unplayable because headshots were hardly ever registered as such even though I was 200% sure I nailed a headshot. And lately in Natural Selection 2 (NS2), attacking enemy and not getting the kills.

Someone from the NS2 dev team and a TAW NS2 clan member (TAW DCDarkling) suggested to check the game networking stats (you can usually enable it in most games by opening console menu in a game and using “net_stats 1” command to enable packet statistics) and they were off the charts. Big packet loss and a lot of out of order packets. And I figured out a rather simple solution without the need to change ISP as initially suggested by people 😛

I’m using Intel Pro LAN on my Sabertooth X99. And all I had to do to fix the issues was to change the advanced settings for it. I remember seeing the same/similar settings on Marvell and Realtek controllers so things are pretty similar.

The thing is, all these technologies/settings on network adapters ensure data transmission reliability at expense of increased delay. Which by itself is no problem for regular downloads, but very bad for online gaming. You can’t fix or change how game server behaves, but you can at least ensure client side (your system) is behaving as good as possible for gaming. I’ve seen a dramatic improvement, experience my vary depending on many other factors so don’t expect this guide to magically overcome old copper connections to your house or badly done internet wiring through your home…

Setting network card settings (Windows 8.1 and Windows 10)

Right click on Start button and select Device Manager. Look for Network adapters and double click it. Right click on a network adapter listed in this category and select Properties. Click on Advanced tab.

NetworkAdapterSettings

  • Disable Adaptive Inter-Frame Spacing
  • Disable all power saving settings (Green, Eco, Power Saving etc)
  • Disable Flow Control
  • Disable Interrupt Moderation
  • Set Interrupt Moderation Rate to OFF
  • Set Enable PME to DISABLED
  • Disable all features with “Offload” in the name
  • Disable Packet Priority & VLAN
  • Disable Jumbo Packet

Most of options in this category ensure reliability, but cause delay in network traffic, resulting in game network data being late when it should have already been processed, meaning kills you were suppose to make in a game never happen in time, which is always bad.

  • Set Receive Buffers and Transmit buffers to 96

Connection buffers are a different beast. In one way they help prevent data loss if data can’t be processed in time by your system, but having data in the buffers means it will have a delay again before it actually reaches the game engine (because it’s sitting in the buffers, waiting to get through). If you have a really fast system, using very low values will help reducing the delay because network adapter will be forced to “flush” them faster. With low end systems it may cause packet loss because network adapter will simply drop/reject packets that can’t be fit into the buffers. My Intel Pro LAN only goes as low as 80, but I know Realtek Gigabit LAN goes even below 32. If adapter allows even lower values, experiment with them.

  • Set Receive Side Scaling (RSS) to ENABLED
  • Set number of RSS Queues to a higher value value (2 in my case)

Receive Side Scaling (RSS) helps utilize multiple CPU cores in order to process received network packets faster and spread CPU utilization across many CPU cores. Having this enabled will ensure Receive and Transmit buffers will not get overflown by data, allowing you to have them set to a very low value. It may induce a slight DPC delay because multiple cores have to synchronize communication between each other, but I think faster processing in general helps more than slightly higher DPC delay penalizes it. RSS Queues number defines how many CPU cores will be utilized for network data processing. Value of 2 means 2 out of my 6 cores (Intel 5820K) will be used for networking. Checked the second Realtek LAN chip on my motherboard and it allows me to set up to 4 RSS queues.

Results?

After I’ve changed the settings, average received packet loss has dropped from 10-12% down to 0% (which is what you want at all times!). Out of Order value also dropped from ridiculous 480 down to like 9 or 12 after being in a game for several minutes. Which is acceptable though I’ll try to fiddle some more to make it even lower if possible.

I’ve also noticed my kill:death (kd) ratio has improved dramatically as well as less complaining over kills that didn’t happen even though they should have. So, try it, if you have horrible networking issues like I had, you can’t really make it worse lol 😉

Please note that I’m not an expert in networking, all the stuff described above is what I’ve learned from reading various networking documents and my past knowledge on how computers and networking works. If you have any corrections, please, tell us down below in comments section and I’ll update the info. I may also update this article in the future if I find any other game changing settings that improve things even further.

17 thoughts on “Improve network performance for games

  1. I’ve also tested CS:GO and things are a bit better. Though, hit reg is so fucked up I’m now starting to wonder if Valve has spent decades on researching and developing the most fucked up, broken netcode anyone can code and place into a game. And they surely succeeded. It’s that fucking broken. Also, you can imagine how bad it used to be if it’s still this shitty even after the networking settings change…

    Like

  2. Applied these settings, all but PME as I don’t have that. Should prove interesting if there is any improvement, won’t hold my breath as my ISP is just that bad, I doubt I would be able to notice.

    Like

  3. I do these tweaks as well, they work. I tweak the Receive Buffers and Transmit buffers & queues from the Registry. I have a number of gaming tweaks but i dont have UI. Some of them are my own & cant be found in internet.If someone can work with me to make small program would be great.

    Like

      1. Ok.So you can make an interface. I need different settings in a colon one below the other with on/off toggle or 2 options on & off and to be able to put different batch and .reg files. Can you do that?

        Like

    1. Not that it literally says “Intel Ethernet Connection” on the screenshot… I also don’t get it why everyone glorifies Intel networking so hard. I’ve had Realtek, Atheros, Intel and now Killer and they are all the exact same shit.

      Like

    1. Larger buffers prevent packet loss, but they induce delay. Smaller buffers ensure timely flow of packets because they need to constantly be flushed to have space for new packets, but in case of overflow (when there are more packets than buffer can process), it’ll drop packets and you’ll experience lag. So, finding good balance between both is key to have improved registration.

      Like

      1. Thats not quite true. Larger buffers ensure you have enough space so no need of flushing. The flushing causes small delay, not the other way around. Bigger buffers ensure the flushes will be less frequent. Also that depends on your hardware, its not a rule. In fact Intel recommends to increase them for lower latency. There is a way to increase them even further, outside their specs. You can check my blog if you wanna know how (RSS Queues too). RSS is also an offloading feature btw and you need to enable checksum to work properly. Intel recommends to enable it and increase the queues for lower latency but the RSS profile is important here. It shows only on some drivers though. For absolute lowest latency maybe its best to disable RSS. Like in competitive gaming for ex. Again, that depends on the hardware.

        Like

  4. Two options here: Set Receive & Transmit buffers to the lowest you can set OR the highest – Test it. U can put lowest or highest you can have packet loss if it’s too low or to high. Intel recommends these 2 options to be increased to default. Enable DCA for Windows 7.

    Nikola has no clue what he talks about,, More buffers means the memory takes control over cpu.. when u have bad cpu u never use low settings recieve transmit buffers never.. It is better to use low settings if u have fiber optic and good cpu good memory gpu etc, if u have bad conection u need to use highest possible settings.. I have flow control rx & tx udp tcp same on rx tx and checksum on .. because its better to have on when u gameon high end cpu. Why ? U have already low memory buffers 4 cpu in use and side scalling enabled. And i use low latency interrupt to. And i get best stable ping and best latency possible vs high settings. Why ? My cpu has enough of tasks but network card do the rest and 0 loss packets. When you have bad conection nothing will will help you. Fiber optic is solution. I can use everything on and energy pme on everything i will still have same ping. But latency i mean from cpu to nic is important.. When u oc memory u get more benefits to reach more fps. But if u are pro skilled no need to think about that what settings u need. Just use proper settings for cpu nic and for your internet if u have 500 mbps or 1Gbps IT will not help you to play better.. Never 1 ms difference not solving anything but if u have 100mbps internet than u need to talk With intel or realtek what settings do you need to use for your conection. max buffers not solving anything low buffers not solving anything in gaming.. Most is solves to reac sites normal with no lag delay and download faster etc. For gaming ? 4 cpu or 2 cpu enable side scalling that is minimum what u need.. BUffers for gaming ? lowest possible for good cpu,Highest possible on low end cpu. So simple. Good conection poor cpu 0 packet loss !

    Like

    1. Your comment is a mess I cant read what I’ve supposedly said & where are your words. I even Ctr-F my blog & comments here. Nothing… BTW I say the same thing as you in your 1st few lines.
      “More buffers means the memory takes control over CPU”. – I never said that. Faster CPU will process the buffers faster. RSS uses TCP protocol it doesn’t improve games directly. Flow Control has to be enabled on the other end of the connection to work. It literally holds the transmission when it receives a flow control frame. Low Latency Interrupt enabled causes more CPU usage btw, since you want to reduce the CPU usage so much.
      ProTip-You want to utilize your CPU more not less, unless u have a bottleneck. I’m not sure if interrupt moderation have to be On for it to work-Intel: “LLI enables the network device to bypass the configured interrupt moderation scheme based on the type of data being received”
      BTW your System Latency can be 10-15ms. One ms is the difference b/w life & death in FPS Shooters. Even checking your minimap can kill you. You probably live somewhere in West where your worst ping is 20ms (that or u never played competitively). Ping is also not everything (one metric of many). The travel distance is a big factor. Also the game lag compensation. If only was that easy.

      90% of these options are for Server/NAS, filesharing or Internet Browsing ect, They save power & CPU usage & improve throughput. The problem is Gaming doesn’t need much throughput in online games. It uses small packet bursts. Optimizing for throughput increases latency and the other way around. Its a balance. U cant have both.

      Realtek:
      “When RSS enabled, driver allocates two distinct receive buffers. The receiving buffer size is two times than when RSS disabled.”

      I have more to say but need to sleep.

      Like

Leave a comment