I hate Vista, but since one of the things I do is track operating systems, I keep it running on one (1) system.
One of the things I find remarkably disagreeable about this junker of an operating system is that its network software is just awful. For example, it took me quite a lot of digging before I found a way to get Vista to work at all with most NAS (Network Attached Storage) devices.
An eternal problem with Vista, and one I’m not alone in finding, is that it’s slower than the guy in the left-hand lane who doesn’t understand the concept of ‘passing’ when it comes to transferring files across my network. How slow as it? There were times, on a 100Mbps connection when I was averaging a MB transferred ever 7 seconds. That would be great, if I were transferring files over my 3Mbps DSL Internet connection, it’s horrible on a LAN.
I had hoped that Vista SP1 would solve this problem. It didn’t.
Then I installed Server 2008. I immediately noticed that when my Vista PC—a HP Pavilion Media Center TV m7360n PC with a 2.8GHz Pentium D 920 dual-core processor with a 100Mbps Fast Ethernet connection–talked to the Windows Server 2008 box the data zoomed along at the rate I had expected it to. All my other PC operating systems—SLED (SUSE Linux Enterprise Desktop) 10 SP1; Xandros 4; Ubuntu 8.04; OpenSUSE 10.3; Mac OS X 10.3; MEPIS 6.5 and 7; and Windows XP SP3—also sped along at the appropriate speed with the Server 2008 system.
So what was going wrong when Vista tried to trade files with my Server 2003, RHEL (Red Hat Enterprise Linux) 5, SLES (SUSE Linux Enterprise Server) 10 SP1 servers and a variety of NAS devices? The fact that it was running well with Server 2008 gave me my clue.
It wasn’t that Server 2008 was a great file server—although it is good—it’s that both Server 2008 and Vista share a new and ‘improved’ TCP/IP stack. If only I had a nickel for every time Microsoft told me that they had improved something.
Then I started digging to see if I could find just how Microsoft had ‘improved’ the Vista TCP/IP stack. To no surprise, I found the pieces of my answer in a back issue of Mark Minasi‘s newsletter. Now, Minasi, if you don’t know him, is one of the best, if not the best, Windows experts around. He knows the theory, he knows the practice, and he knows when Microsoft is full of BS, which is why you won’t find any books by him on Windows ME or XP Home. If, God-forbid, I ever had to oversee a massive Windows migration or the like, I’d be calling him to see what he’s charging for consulting these days, and pay it.
This time, however, his notes on Vista and 2008’s New TCP windows were enough. It turns out that Vista and 2008 adjust the size of their TCP window sizes using an algorithm that takes into account three different values. It sounds like a fine idea, but when you’re using any other TCP/IP stack in existence—include Microsoft’s own earlier versions—it flops.
We also, as is so typical of Microsoft, don’t really know how their TCP Window size adjustment algorithm works, or, for that matter, exactly how it’s making its changes to those windows. The bottom line though is that when Vista auto-adjusts its TCP windows size it quickly become terribly ineffective at file transfers with operating systems that use normal TCP/IP.
The answer, as you might have guessed at this point, was to turn off Vista’s TCP tuning. To do that, open up an Administrative cmd (command) window and enter:
C:\> netsh interface tcp set global autotuninglevel=disabled
The Linux users among you will see the irony that to get Vista to network properly you have to open up what’s essentially a root shell to enter an arcane command. Isn’t this the kind of thing that Windows users have been complaining about having to do in Unix/Linux since the very beginning?
Be that as it may, once you’ve made this change you’ll pleased to see that Vista SP1 will now copy, move and save files to a network drive almost as fast as any of my Linux desktops or Windows XP SP3. Have I mentioned yet that I hate Vista?