View Single Post
Old 08-10-2009, 04:53 AM   #17
NeoLojik
Junior Member
 
Join Date: Jul 2009
Posts: 8
Default

Ok, I've finally solved it, and it's not a Ventrilo issue, but rather a Vista-only one.

The problem:
With the release of Vista, Microsoft added a system service to monitor the multimedia subsystem for streaming audio and video, called the Multimedia Class Scheduler (MMC). When this service detects streaming media (and a lot of applications trigger this), it throttles network traffic to ensure smooth network playback.

Unfortunately, this was conceived in the days where single-core CPU's and 100MBit LAN's were common, and their solution drastically affects gigabit speeds.

I'll explain why this problem isn't far more widespread in a moment.

MMC is nothing more than a packet limiter. When certain applications run, MMC puts a hard-cap on the number of packets which can pass over the network interface per second.

At a standard TCP/IP frame size, that's ~1,500 bytes x 10,000 packets (the limit imposed by MMC), which after overhead works out at about 11-12MB/sec.

From SP1 in Vista, you can tweak this limit via the registry. Initially I tried setting it to 30 (for 30,000 packets), but only managed half network speed. Upping it to 60 or 70 made no difference.

Instead I set it to FFFFFFFF (Hexidecimal) or 4294967295 (Decimal) which effectively sets the cap at such a high limit that you'll never hit it.

Network transfer speeds are now the same when either connected, or disconnected on Ventrilo, with no degradation to Ventrilo quality (what's 4-5KB/sec when the interface can do 65-75MB/sec =P ).

Jumbo frames:
Before I post the how-to for changing the registry, here's the reason why some people haven't noticed it.

As the MMC limit is a *packet* limit, those on a gigabit network with jumbo-frames are far less likely to see the issue. Jumbo frames increase the TCP frame size from ~1,500 to a maximum of 9,000 bytes. As you can imagine, 10,000 frames at 9,000 bytes per frame is roughly 80MB/sec after overhead.

My machines here don't enable jumbo frames by default, but I'm willing to bet that would also solve the issue.

The solution:
So, here's how to tweak the limit yourself. Perhaps this should be added to the Ventrilo FAQ?

1) Open Regedit.exe
2) Navigate to: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile
3) In the right pane, double click NetworkThrottlingIndex
4) Set the value to FFFFFFFF, Hexadecimal
5) Close Regedit
6) Reboot

Once the machine is rebooted, the limit will be removed. To undo the change, follow the instructions above, but set the value to: a (Hexadecimal), or 10 (Decimal). Reboot again and the limit will be put back.

This issue doesn't exist in Windows XP as the service doesn't exist. Apparently Windows 7 has corrected this particular flaw, so it's a Vista -only- issue.

Hopefully this will help someone who has been suffering the same problem. It's nice to finally have it solved.
NeoLojik is offline