Windows – Identifying software affecting download speed

downloadinternetinternet-speedwifi-driverwindows 10

I am trying to troubleshoot a family members PC that is getting a very poor download speed compared to all other computer on the network.

All other computers get around 23Mb/s down 4Mb/s up. But this computer is getting a >0.1Mb/s down and 4Mb/s up.

I initially thought this was a wifi issue however when accessing files on a local NAS I get 35MB/s up and down.

Troubleshooting further I found I do not have the issue when using a wired connection but do have the issue when using a variety of different USB wifi dongles with different chipsets (or the inbuilt PCI adapters)

I have also tested the connection from Ubuntu which did not have any issues so I believe I can rule out hardware

I have removed the drivers and reinstalled the latest version, with no effect.

All this leads me to believe it is an issue with some software affecting only internet downloads. Looking around a number of people seem to have had issues with AMD quick stream/sync but this is not installed on this machine.

How can I go about troubleshooting what software is causing me trouble, noting I was not able to test in safe mode as the drivers for the card do not get loaded.


EDIT: Added Part Details

  • Operating system: Windows 10
  • Motherboard: Gigabyte B150M-HD3
  • Processor: I5-6500
  • PCI Wifi Card: ASUS PCE-AC56, using driver Asus 7.35.317.0 dated 19/09/2015
  • USB Wifi Adapter (with same issue): Netgear WNDA3100v2 driver version Netgear 5.100.68.29 dated 13/10/2010
  • Router: ASUS DSL-AC68U

I have now tested in safe mode, with the same issue still occuring, and have run the sfc scan with no errors found.

Best Answer

I don't have a simple, quick solution for you, but I do have an idea for something that should at least work. First I'll list some trivial things you should check for - I'm guessing you've done them already, but it doesn't hurt to be sure. You haven't mentioned which OS you're using, but since it's not Ubuntu I'm guessing Windows. If it isn't, modify the details in this solution for your OS (e.g. instead of PowerShell use bash or whatever, replace utilities with equivalent ones, etc.).

Simple Tests

  • Make sure you don't have something installed and purposely configured to limit download speed, like NetLimiter.
  • Check the network usage of all your running processes like atype suggested and verify that everything is low.
  • Run tracert to see if the holdup is really internal (and not, say, in your router). You said you could get good speeds to your NAS (which actually makes it less probable that it's an internal problem), so maybe there's another point in your route that's choking your bandwidth for some reason.

Complicated Test to Find the Guilty Process/Service

This requires a little coding - nothing too much, though.

Basically, the idea is to suspend every running process/service one at a time and see if your download speed improves. For this you'll need to use the Windows API as shown in the example here (just change the GetDiskFreeSpaceW function to whichever function you need).

Processes

  1. List all the running processes with Get-Process.
  2. Loop over the list and for each process:

    1. Verify that this isn't the process running the script by comparing to $pid (you might also need to check for parent/ancestor processes; I'm not sure).

    2. Suspend the process using the DebugActiveProcess Windows API function. Also, this may prove useful.

    3. Waiting for a few seconds here is probably a good idea, but it may be OK to skip this.

    4. With the process now disabled, test your download bandwidth. I found this page with some examples on how to do that in PowerShell, and this seems like the simplest way:

      $a=Get-Date; Invoke-WebRequest http://client.akamai.com/install/test-objects/10MB.bin|Out-Null; "$((10/((Get-Date)-$a).TotalSeconds)*8) Mbps"
      

      You can also try using this speed test script; it's in Python so you should be able to run it on another OS if you need to.

    5. If the bandwidth passes your desired threshold (say, 1 Mbps; decide for yourself) then this process is limiting your download speed. Print out its name or process ID or whatever and stop the loop.

    6. Resume the process by invoking the DebugActiveProcessStop function of the Windows API.

Services

It's possible that what's limiting your download speed is a service and not a process. In this case you can do the same thing as I suggested for processes, only you need to use different API functions (Suspend-Service and Resume-Service) and you don't need to verify you aren't suspending yourself (since the script is not a service).

Caveats

There may be critical system processes and services that you should avoid stopping, and possibly even can't. In case of the former you'll need to make an exclusions list, and in case of the latter you'll need to take into account that your API calls can fail (actually, you should do that anyway, and perhaps print out a warning when this happens and continue).


I know all of this is more work than you hoped to do, but it's the best idea I've got for you. I hope it helps you solve your problem.

Related Question