top
What it's really useful for
Windows Task Manager is a simple, GUI tool that enables you to have a good guess at (amongst other things):
- Processes running
- What processes are using all the CPU (to the level of each core)
- Who's eating all the memory
- How much time each core is sitting idle
Use this tool to confirm which processes are running, and identify processes that are maxing out CPU (these are the bottleneck processes), processes that are eating so much memory that its affecting their performance (and the performance of other processes that are starved of memory), and processes that would love to be doing something for you if only they weren't waiting for IO to complete (these can often be rewritten to make better use of IO, leading to some stunning performance improvements). This tool is crude; this is a good thing. The closer in you want to zoom on a process, the more intricate the tool you need and the more knowledge and skill and time you need to do it. Start with big handfuls, and zoom in, each time using a more intircate tool, guided in direction by the previous tool.
Basic use, basic interpretation
On a typical modern windows machine, you can summon this with CTRL+SHIFT+ESC. You can also find it in through the standard menus.
Invocation
It's typically started via a menu, and thus just needs clicking. It will look something like this:
In windows 8 and 10, it's had a redesign and looks like this:
Interpretation
As is the way here, big handfuls come first. The first places to look when concerned about performance are the tab entitled "Performance" and the tab entitled "Processes". The processes tab was shown above; here's what the performance tab might look like:
When thinking about performance at the very high-level, one of two things is happening; the process is saturating the processor (i.e. the processor running the process is working as hard as it can) or the process is spending a lot of time waiting around for something and the processor has spare, unused capacity. If the processor is spending a lot of time waiting around for something, making your code run faster isn't going to help - it'll just have more time to wait around for whatever its waiting for. We can use the task manager to determine which of these two cases we've got on our hands.
What does the processes tab tell us, in terms of really high-level information about how a given process is performing? There are many columns in the table, and there are many many more that can be shown if so desired. These default columns, though, are enough for a broad high-level examination of what's. The Image Name column is simply the name of the executable being run. Sometimes an executable may have "*32" after its name. This indicates the process is a 32bit process. This is not entirely without relevance in terms of performance, but for the moment let's put that aside.
The PID column is the "Process ID"; a number assigned to each process to uniquely identify it. The CPU is of key interest in this simple high-level view. This is a measure of what percentage of the total available CPU time (across all cores) is being used by each running process. We can see that something called "System Idle Process" is devouring over 80% of the CPU in this case. It's not too far off the mark to consider this an identifier of how much CPU time is being left on the table; how much spare capacity there is. In this case, we can see that something called "simpleHeavyBurn.exe" is using a steady 13% of CPU. That's a test program that we'll come to shortly, intended to experiment with this instrumentation.
The Performance tab; what does that tell us? This tab presents (by default) a history of the load on each core in the system, and a history of memory use. Again, in broad terms, if we look at this and see that the overall usage (far left) is low, and we see that many cores are not saturated, we know that there is CPU left on the table; whatever the bottleneck in our program is, it's not that we've simply used up all the available processing power.