Master Your Quantum

In my last blog article I described thread quantum and, at the end of the article, mentioned that one could change this value. Readers, who were driven nuts by my meager attempt to create suspense, could have searched MSDN on their own to find how to change the quantum setting using the Performance Options system dialog. This dialog only lets one change the quantum to favor foreground or background processes. There are, however, a total of seven functionally unique setting for the quantum.

The Performance Options dialog, it turns out, manipulates system registry value HKLM\SYSTEM \CurrentControlSet\ Control\ PriorityControl\ Win32PrioritySeparation. The Win32PrioritySeparation default value is 2 for XPe or XP Pro (and other versions of the Windows OS family, but you’re reading the wrong blog if you’re interested in them). The Performance Options dialog changes the value of Win32PrioritySeparation to either hexadecimal value 0x26, if you select the “Foreground” option, or 0x18, if you select the “Background” option.

If you’re like me, I found this all a bit odd. Well, Win32PrioritySeparation is composed of three 2-bit bit fields. The most significant bit field, represented by bits 0x10 and 0x20, determine if long or short quantum will be used. Bits represented by 0x04 and 0x08 determine if the foreground threads will get more quantum than background threads (i.e. a boost) or they will get the same quantum. The two least significant bits, 0x01 and 0x02, are used, if foreground boost is enabled, to determine the amount of the boost.

Even though I’m an avid bit twiddler, I’ll resist the urge to go into more detail. So here are the seven functionally unique settings for Win32PrioritySeparation with the resulting foreground and background quantums.

Win32PrioritySeparation   Foreground   Background
0x28, 0x29, 0x2A                   18                   18
0x18, 0x19, 0x1A                   36                   36
0x24                                    6                     6
0x25, 0x14                            12                   6
0x26                                    18                   6
0x15                                    24                   6
0x16                                    36                   6

Please remember from my last article to divide the quantum by 3 to get the number of clock ticks each thread will receive. Changing Win32PrioritySeparation does not require a restart to see the effect. Also, setting a bit field in Win32PrioritySeparation to values other than those shown in the table will result in the default option being selected. Of course, this all pertains to XPe and XP Pro and there’s no guarantee that the scheduling gurus will conform to the same pattern of behavior in the future.

- Jim

Comments (4)

  1. DeepICE2 says:

    Funny – I was just reading chapter 6 today… Sort of dejavu

  2. donjoe says:

    What about the default value 0x02, how many quanta does that allocate to Fore/Back?

  3. Jim says:

    The value 0x02 implies that the "Short vs. Long" and "Variable vs. Fixed" fields are the default for the OS.

    The default for these fields for XPe & XP Pro is: Short & Variable which is the same as having the following bits additional bits set: 0x24.

    OR'ing this value in with 0x02 gives you 0x26, which you will find in the table in the article.

  4. christian says:

    if i set  0x16 (22 decimal) to the registry i have got more performance for foreground programs… sorry for my bad english…

Skip to main content