|
Last
updated December 31, 1998
|
|
CacheSet
is an applet that allows you to manipulate the working-set
parameters of the system file cache. Unlike CacheMan, CacheSet runs
on all versions of NT and will work without modifications
on new Service Pack releases. In addition to providing
you the ability to control the minimum and maximum
working set sizes, it also allows you to reset the
Cache's working set, forcing it to grow as necessary
from a minimal starting point. Also unlike CacheMan,
changes made with CacheSet have an immediate
effect on the size of the Cache. Full source code
is included.
Use CacheSet to performance tune the system
Cache size in a way not possible without tweaking
internal variables the way CacheMan does.
Note: To use Cacheset on NT 4.0 Service
Pack 4 and later you must have the "Increase
Quota" privilege (administrator accounts
have this privilege by default). CacheSet
has been updated to enable this privilege so that
it works on SP4.
|
|
CacheSet works
on all released versions of NT. After it starts
it presents the system file cache's current size
(updated twice a second), it's peak size (the largest
it's been since the last reboot), and lets you set
new minimum and maximum working set sizes.
Setting New Sizes
Simply enter the new minimum and maximum sizes and
hit the Apply button. If you get an error,
then one of the following conditions holds: you've
entered a maximum that is smaller than the minimum,
the minimum you've entered is smaller than the minimum
system working-set size, or the maximum you've entered
is larger than the maximum system working-set sizes.
Adjust the values you've entered and try again.
You may notice that the Cache's size changes immediately
and then proceeds to shrink or grow quickly. This
is because the system automatically trims working
sets once a second. The Cache pages that are released
are still in memory, but can be relinquished quickly
for use by other programs that need more memory.
Similarly, the Cache can eaily regain pages as applications
access file system data.
Resetting Previous Values
At any time you can restore the Cache's working
set values that were active when you last started
CacheSet by hitting the Reset button.
Clearing the Cache's Working Set
You can force the Cache to release all of it's pages
by pressing the Clear button. Note that the Cache
can grow again as necessary, and that this is not
the same as flushing the Cache - pages that were
assigned to it are simply made available to other
programs and can be reclaimed by the Cache.
Using the Command-Line Interface
You can enter the minimum and maximum working set
sizes on CacheSet's command line. CacheSet
will apply these new values silently. Thus, you
can add CacheSet to your Start program group
to automatically set the Cache's sizes every time
you boot.
Usage: cacheset [minimum
working set] [maximum working set]
|
|
CacheSet uses a NtQuerySystemInformation
call to obtain information about the Cache's settings
and NtSetSystemInformation to set new sizing
information. The working-set information for a
process serves as guidelines for NT's Memory Manager
regarding how many pages of physical memory should
be assigned to the application. Because they are
guidelines, conditions can result such that the
Memory Manager grows a working-set to a size greater
than the maximum, or shrinks it to less than the
minimum. However, the settings are factors that
will affect the overall allocation, and hence
responsiveness, of an application. In the case
of CacheSet the application is the file
system Cache.
Internally NtSetSystemInformation calls
MmAdjustWorkingSetSize, which either grows
an application's working set or trims it. If the
third parameter passed to MmAdjustWorkingSetSize
is 1, the system Cache's working set is adjusted,
otherwise the adjustment occurs on the current
process (the system information calls affect only
the system cache). Passing in a minimum and maximum
of -1 causes MmAjustWorkingSetSize to perform
a working-set clear operation, releasing all pages
from the application's working set.
|
|
What's
particularly interesting about the interface that
CacheSet uses to do it's work is that it requires
no special privilege to invoke. Thus, you can run
CacheSet from even the Guest account, something
it would be hard to argue is not a form of a security
hole, where anybody can affect the system cache
sizing policy.
Update: As of NT 4.0 Service Pack 4
Microsoft has closed this hole by requiring the
account changing the Cache's working set to have
the "Increase Quota" privilege. The
Administrator user and group accounts have this
privilege by default.
|
Download CacheSet
(15KB)
Download CacheSet
Plus Source (42KB)
Back to Top |
|
|
|
|