648 lines
29 KiB
HTML
648 lines
29 KiB
HTML
<html>
|
|
|
|
<head>
|
|
<title>CTRTEST Information</title>
|
|
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<h1>CTRTEST Information</h1>
|
|
|
|
<p>CTRTEST is a test program designed to allow the Extensible Performance Counter
|
|
developer to test their performance DLL in an isolated scenario. Normally, the developer
|
|
must run the DLL in some performance monitoring client (e.g. Performance Monitor) which
|
|
calls the DLL in the context of lots of other functions making debugging and
|
|
troubleshooting difficult. </p>
|
|
|
|
<p>CTRTEST allows the developer of performance DLL's to test, debug and stress their DLL's
|
|
without the need or influence of any other program or function. CTRTEST also provides a
|
|
way to stress test the DLL in a multi-threaded environment. Although function
|
|
calls on a particular performance library are synchronized within the process,
|
|
it is important that the library support features such as Open/Close
|
|
ref-counting in order to operate correctly in a multiple threaded
|
|
environment. This is
|
|
especially important in that this emulates the environment that the DLL will operate in
|
|
when performance counters are monitored by a remote client. This is also a very
|
|
critical test since if the DLL fails during remote performance monitoring it can cause the
|
|
entire system to fail (i.e. "Blue Screen").</p>
|
|
|
|
<p>CTRTEST also allows the developer to run their DLL's in combination with other specific
|
|
Counter DLL's in order to test for possible interaction problems.</p>
|
|
|
|
<h2>CTRTEST and Monitoring Clients</h2>
|
|
|
|
<p>Testing with ctrtest.exe is a method of “black box” testing which
|
|
attempts to establish a benchmark for determining whether a performance library
|
|
can be considered to be “trusted”.<span style="mso-spacerun: yes"> </span>A
|
|
trusted performance library will not be subjected to the level of run-time
|
|
validation in Wbemperf.dll (via WMI) and Perflib (via RegQueryValuEx(
|
|
HKey_PerformanceData ) ) that un-trusted performance libraries undergo.<span style="mso-spacerun: yes">
|
|
</span>The reduced amount of error checking means higher performance from
|
|
applications retrieving data from trusted performance libraries.</p>
|
|
|
|
<h2>Running CTRTEST</h2>
|
|
|
|
<p>The command line syntax of CTRTEST is</p>
|
|
|
|
<blockquote>
|
|
<p><small><strong><font face="Lucida Console">CTRTEST <path to ini file> </font></strong></small></p>
|
|
</blockquote>
|
|
|
|
<p>where:</p>
|
|
|
|
<p><small><font face="Lucida Console"><strong><path to ini file></strong></font></small>
|
|
is the location of the CTRTEST.INI file that contains the execution parameters. If
|
|
this is not provided, CTRTEST will default to the current working directory for the
|
|
location of the CTRTEST.INI file.</p>
|
|
|
|
<h2>CTRTEST.INI</h2>
|
|
|
|
<p>The format of the INI file is as follows:</p>
|
|
|
|
<p>[main]<br>
|
|
NumThreads=10<br>
|
|
CycleCount=100<br>
|
|
LoopCount=1<br>
|
|
Random=1<br>
|
|
StopOnError=11<br>
|
|
NumObjects=2<br>
|
|
Object0=perfproc<br>
|
|
Object1=perfos<br>
|
|
Counter1=238</p>
|
|
|
|
<p><strong><small><font face="Lucida Console">NumThreads</font></small></strong> is the
|
|
number of threads that will run during the test at the same time. Each thread will run the
|
|
same "Open, Collect X n, Close" cycle that is specified by CycleCount.</p>
|
|
|
|
<p><strong><small><font face="Lucida Console">CycleCount</font></small></strong> is the
|
|
number of times CTRTEST will call Open, Collect and Close in that sequence. This entry
|
|
must be a decimal number.</p>
|
|
|
|
<p><strong><small><font face="Lucida Console">LoopCount</font></small></strong> is the
|
|
number of times CTRTEST will call the collect function between the Open and Close
|
|
functions during each cylce. This entry must be a decimal number.</p>
|
|
|
|
<p><strong><small><font face="Lucida Console">Random</font></small></strong> controls
|
|
randomization on each cycle. If this value is non-zero, each time a cycle is run,
|
|
CTRTEST will randomly choose a performance library to query.</p>
|
|
|
|
<p><strong><small><font face="Lucida Console">StopOnError</font></small></strong> controls
|
|
the behavior of ctrtest when an error is encountered. A value of 0
|
|
indicates that the application should continue running after an error is
|
|
encountered, a 1 will cause the threads to gracefully terminate and the
|
|
application will stop. A value of 2 will cause a debug breakpoint to be
|
|
thrown, and processing will terminate immediately terminate at the offending
|
|
error check.</p>
|
|
|
|
<p><strong><small><font face="Lucida Console">NumObjects</font></small></strong> indicates
|
|
how many performance DLL's CTRTEST should work with.</p>
|
|
|
|
<p><strong><small><font face="Lucida Console">Objectn</font></small></strong> specifies
|
|
the name of the service the performance counters are registered under. CTRTEST will only
|
|
test counter DLL's that have been registered by LODCTR. This is also the name that your
|
|
DLL will be listed with in the EXCTRLST list box. If your DLL supports more than one
|
|
service entry, then you'll need to repeat the test for each service.</p>
|
|
|
|
<p><strong><small><font face="Lucida Console">Countern</font></small></strong> specifies
|
|
the query string that will be passed into the corresponding performance DLL's Collect
|
|
function. If no value is specified, CTRTEST will default to use "Global".</p>
|
|
|
|
<p>For example, in the sample INI file above, when CTRTEST executes, it will spawn 10
|
|
threads that will each perform 100 Open/Collect/Close Cycles. During each cycle,
|
|
Collect will be called once. On each cycle on each thread, CTRTEST will randomly
|
|
choose between the "perfproc" and "perfos" performance DLL's.
|
|
When the Collect function is called for "perfproc", CTRTEST will specify
|
|
a query string of "Global". When the Collect function is called for
|
|
"perfos", CTRTEST will specify a query string of "238" (which in this
|
|
case is the "Processor" object).</p>
|
|
|
|
<h2>Testing with CTRTEST</h2>
|
|
|
|
<p>While CTRTEST will spew statistics to the console (these can be redirected to a file
|
|
for later processing). It's also important to monitor your test run using Performance
|
|
Monitor. You should monitor the following counters from the Process object:</p>
|
|
|
|
<blockquote>
|
|
<p>-- Private Bytes<br>
|
|
-- Handle Count<br>
|
|
-- Thread Count</p>
|
|
</blockquote>
|
|
|
|
<p>While the test is running, these counters should not increase during the test. They
|
|
should reach some operating level and stay there or below, but not slope up. If the plot
|
|
of any of these counters goes up, then you probably have a resource leak somewhere in the
|
|
DLL. You should run this test both from within a debugger as well as on it's own. Running
|
|
in a debugger will allow you to catch any exceptions that may or may not be handled. Also
|
|
running the test inside other tools such as NuMega's BoundsChecker can help spot memory
|
|
and other resource leaks.</p>
|
|
|
|
<p>CTRTEST will also check that returned buffers do not have memory overwrite errors or
|
|
that the returned buffer sizes make sense (e.g. less than or equal to the size of the
|
|
specified buffer). If it encounters these sorts of conditions, it will stop
|
|
processing.</p>
|
|
|
|
<p>Before you attempt to run your counter DLL in a "retail" or
|
|
"production" environment, it should run cleanly with the following settings
|
|
(This is the bare minimum test): </p>
|
|
|
|
<p>[main]<br>
|
|
NumThreads=10<br>
|
|
CycleCount=100<br>
|
|
LoopCount=100<br>
|
|
NumObjects=1<br>
|
|
Object0=<your service name here></p>
|
|
|
|
<p>Ideally you'll run more thorough tests such as</p>
|
|
|
|
<p>[main]<br>
|
|
NumThreads=10<br>
|
|
CycleCount=1000<br>
|
|
LoopCount=100<br>
|
|
NumObjects=1<br>
|
|
Object0=<your service name here></p>
|
|
|
|
<p>You should also try settings such as the following to check for potential interaction
|
|
problems:</p>
|
|
|
|
<p>[main]<br>
|
|
NumThreads=10<br>
|
|
CycleCount=1000<br>
|
|
LoopCount=100<br>
|
|
Randomt=1<br>
|
|
NumObjects=5<br>
|
|
Object0=<your service name here><br>
|
|
Object1=perfproc<br>
|
|
Object2=perfos<br>
|
|
Object3=perfnet<br>
|
|
Object4=perfdisk</p>
|
|
|
|
<p>You can use EXCTRLST to get a list of all Performance DLL's on a system, if you are
|
|
suspecting interaction problems with another DLL other than the base ones mentioned above.</p>
|
|
<h2>Test Outline</h2>
|
|
<table border="1" cellspacing="0" cellpadding="0" width="708" style="border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0in 5.4pt 0in 5.4pt; border-style: none; border-width: medium">
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal" align="center" style="text-align:center"><b>Test<o:p>
|
|
</o:p>
|
|
</b></p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border:solid windowtext .5pt;
|
|
border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal" align="center" style="text-align:center"><b>Goal<o:p>
|
|
</o:p>
|
|
</b></p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border:solid windowtext .5pt;
|
|
border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal" align="center" style="text-align:center"><b>Error
|
|
Checks<o:p>
|
|
</o:p>
|
|
</b></p>
|
|
</td>
|
|
</tr>
|
|
<tr style="height:1.45pt;mso-height-rule:exactly">
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt;
|
|
height:1.45pt;mso-height-rule:exactly">
|
|
<p class="MsoNormal"> <o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt;height:1.45pt;mso-height-rule:exactly">
|
|
<p class="MsoNormal"> <o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt;height:1.45pt;mso-height-rule:exactly">
|
|
<p class="MsoNormal"> <o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Open entry point call on a performance library<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Opens performance library without failing.<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Assertion<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Collect entry point call on a performance library<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Collects performance blob consisting of 0 or more
|
|
bytes.<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Assertion; Blob offset not equal to advance in blob
|
|
pointer; Heap Corruption<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Close entry point call on a performance library<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Closes performance library without failing.<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Assertion<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Multiple overlapping calls to Open, Collect and Close
|
|
entry points on a performance library<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Open / close reference counting succeeds and
|
|
collection can occur.<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Assertion<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Processing multiple performance libraries on shared<span style="mso-spacerun: yes">
|
|
</span>thread <o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Ensure that performance libraries may co-exist in
|
|
shared heap space.<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Assertion; Heap Corruption<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Blob boundary validation<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Ensure that the blob returned from the Collection
|
|
function did not over-write guard byte data outside of the allocated
|
|
buffer<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Assertion; Guard byte overwrite; Blob size comparison
|
|
to allocated buffer size<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Blob offset validation<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Walk the blob and ensure that all offsets resolve to
|
|
a value within the blob boundaries<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Assertion; Boundary validation<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Buffer size sanity check<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Ensure that the memory allocation required by the
|
|
performance blob does not exceed a maximum threshold (MAX_BUFFER_SIZE). <o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Assertion; Out-of-memory; Max. buffer size<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">Buffer
|
|
size validation</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">Ensure that the value of the buffer size returned
|
|
from the collect function is less than the size of the allocated buffer </td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt"> </td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Entry point latency<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Total wait time for obtaining the perflib-specific
|
|
mutex is less than a maximum threshold<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">WaitForSingleObject timeout<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Enumerate Class Definitions <o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Number of Class Definitions specified in Collect
|
|
parameter should be the same as the number within the performance blob<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Mismatch<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Blob size and pointer advancement<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">The blob size returned from the collect function
|
|
should be equal to the blob pointer displacement<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Equivalence<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Blob offset validation<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Ensure that blob offsets are non-zero<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Equivalence<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Instance Validation<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Validate number of instances stored for each class is
|
|
equal to the number of instances specified by NumInstances in the
|
|
PERF_OBJECT_TYPE block.<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Mismatch<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Singleton Validation<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Validate that singleton object has the same number of
|
|
counters as specified by NumCounters in the PERF_OBJECT_TYPE block.<span style="color:red"><o:p>
|
|
</o:p>
|
|
</span></p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Mismatch<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Counter Validation<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Validate that the number of counter definitions
|
|
stored for each instance is equal to the number of counters specified by
|
|
NumCounters in the PERF_OBJECT_TYPE block.<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Mismatch<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="179" valign="top" style="width:134.5pt;border:solid windowtext .5pt;
|
|
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">8 byte alignment<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="212" valign="top" style="width:158.9pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Check that the returned buffer is 8-byte aligned.<o:p>
|
|
</o:p>
|
|
</p>
|
|
</td>
|
|
<td width="194" valign="top" style="width:145.85pt;border-top:none;border-left:
|
|
none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
|
|
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
|
|
padding:0in 5.4pt 0in 5.4pt">
|
|
<p class="MsoNormal">Masking</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html>
|