Introduction

I encountered my first computer performance problem 25 years ago. A professor at my college wanted to build a tightrope for his children in the backyard. He needed to know how strong the rope would have to be, so he asked if I could help. Eager to brandish my new-found programming expertise, I readily volunteered. He told me the weight of his children and the length he wanted the tightrope to be, and I was off in a rush to the time-sharing terminal. I created the program, punched in the paper tape, and soon returned to him with the answer, gleeful with my success.

A few weeks later, another professor managing our link to the time-sharing computer stopped by and asked me if I knew what had caused the computer service to bill us an extra $600 that month. I knew we were charged for connect time and for computation time, but the bill seemed incredible to me and I could think of no reason for it. A few days later it dawned on me. My little program to compute the tensile strength of the tightrope iterated repeatedly from 0 to degree x, where x was the angle of descent of the tightrope. Then x would be increased, but the program started back at 0 again. A very simple change to the program would have made it hundreds of times more efficient. $600. Ouch.

So my first performance-measurement tool was a bill. Sometimes a bill is still the most effective tool, because poor computer performance costs money. And solving a performance problem by buying the wrong piece of hardware wastes money. But the biggest cost of poor performance is in the productivity of all the people who use our systems and our programs. If we could properly tune all the programs and computers in the country we could pay off the national debt. Well, make a dent anyway.

We want to help you to avoid that $600 bill, which (given inflation) is likely to be somewhat larger today. This book describes the dynamic behavior of the Microsoft® Windows NT™ operating system and its applications, and how that behavior affects their performance.

This book will prove useful to a wide range of computer professionals, including:

Because we figure that our readers include people with different backgrounds and with exposure to a wide variety of different systems, we have tried to be careful to define our terminology as we go along. If we're going to win this game, we need to start with a level playing field. Hopefully this will not prove too ponderous for those of you well-versed in computer science. Even if you are, you should stay on your toes: like all systems, Windows NT has its own terminology.

Once you have read this book, you will be able to:

This book is extremely topical, which is both an asset and a liability. It is tied to the initial release of Windows NT 3.5, and reveals a host of details that are extremely important for you to understand if you are to manage the performance of Windows NT. But such details may change in subsequent releases. If you are working with a later release of Windows NT, you may find that some algorithms have been refined and some counter names have changed, and some of the hints we mention here may no longer apply. We've tried to make sure that you'll have all the tools in your toolkit to characterize any changes clearly for yourself as they emerge in new releases.

As you will discover, optimizing Windows NT is not an issue of tweaking many magic system parameters. Instead you will learn a new set of powerful tools for analyzing system performance. Each tool will lead you to the next until you have decimated the bottleneck demon.

On the floppy disk (or CD-ROM) provided with this book, you will find a synthetic load generator along with quite a few other useful tools. The synthetic load generator, which helps you perform controlled performance experiments on your system, is described in Appendix C of this book. The other utilities have online documentation. We discuss most of these tools in the text as we cover related topics, but you should browse the floppy disk for tools which might be useful in your situation. Give them a try. They don't weigh much, so you might as well carry them around.

There are a few topics we have not tried to cover at all in this book. For example, we have not tried to help you to minimize the disk space required for Windows NT on your computer. As already mentioned, we have not tried to provide an exhaustive treatise on the effects of changing the parameters listed in Appendix B, mainly because we think you'll never need to change them unless your situation is quite unusual. And we have not tried to do an exhaustive comparison of the performance of Windows NT on this or that hardware platform. Instead, we have enabled you to do that comparison in your own environment.

A book like this is the result of an enormous team effort. It is a book built upon a great foundation of software. At the base of that foundation is the dedicated team that built Windows NT (led by Dave Cutler), that tested it (led by Moshe Dunie and Ken Gregg), and that documented it (led by Chris Brown and Peggy Etchevers). I designed and helped implement Performance Monitor, but the bulk of the code was written by Hon-Wah Chan and Mike Moskowitz, with a key contribution by Bob Watson, and help from Christos Tsollis and all the NT development team members who added counters to Windows NT. Windows NT also supports a strong set of application performance tuning tools provided with this book and in the Windows NT Software Development Kit and Device Driver Kit. These were implemented by Reza Baghai (lead programmer), with help from Paramesh Vaidyanathan, Lee Smith, Tom Zakrajsek, Mark Leaming, Mark Lucovsky, Lou Perazzoli, Mark Enstrom, and Phillip Marino. And I want to give special thanks to the dedicated editing team for this book. If this book is readable at all, it is due to their many tireless hours, and if it's not it's because I mangled the text hopelessly in the first place.

All these dedicated individuals have toiled long and hard to arm you with the most advanced tools for bottleneck detection and capacity planning. So go forth and slay those bottlenecks. It's a tough job, but somebody has to do it!

Russ Blake
Fall 1994

Russ Blake is a graduate of Antioch College (BA, Philosophy) and holds an MS degree in Computer Science from the University of Wisconsin, Madison. He has been involved in the construction of operating systems and performance monitoring tools since joining the HP3000 development team at Hewlett Packard in the early 70's. He invented and authored the Xray performance monitor for Tandem Computers. After a stint in robotics and its real-time performance concerns, he joined Sun Microsystems as Director of Operations for the Software Products Division. For the last five years, he has been Manager of Advanced Operating Systems Performance at Microsoft Corporation. He designed and led the construction of Windows NT Performance Monitor, and created the other principal performance tools used to tune the Windows NT operating system and Windows NT applications. He is currently investigating methods for program optimization and automatic bottleneck-detection in the Microsoft Advanced Technology Research group.