1
0

perftest.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913
  1. /*++
  2. Copyright (c) 2015 Minoca Corp. All Rights Reserved
  3. Module Name:
  4. perftest.h
  5. Abstract:
  6. This header contains definitions for the performance benchmark tests.
  7. Author:
  8. Chris Stevens 27-Apr-2015
  9. --*/
  10. //
  11. // ------------------------------------------------------------------- Includes
  12. //
  13. #include <sys/time.h>
  14. //
  15. // ---------------------------------------------------------------- Definitions
  16. //
  17. //
  18. // Performance test names and descriptions.
  19. //
  20. #define ALL_TEST_NAME "all"
  21. #define ALL_TEST_DESCRIPTION "Runs all of the performance tests in sequence."
  22. #define FORK_TEST_NAME "fork"
  23. #define FORK_TEST_DESCRIPTION "Benchmarks the fork() C library routine."
  24. #define EXEC_TEST_NAME "exec"
  25. #define EXEC_TEST_DESCRIPTION "Benchmarks the exec() C library routine."
  26. #define OPEN_TEST_NAME "open"
  27. #define OPEN_TEST_DESCRIPTION \
  28. "Benchmarks the open() and close() C library routines."
  29. #define CREATE_TEST_NAME "create"
  30. #define CREATE_TEST_DESCRIPTION \
  31. "Benchmarks the create() and remove() C library routines."
  32. #define DUP_TEST_NAME "dup"
  33. #define DUP_TEST_DESCRIPTION "Benchmarks the dup() C library routine."
  34. #define RENAME_TEST_NAME "rename"
  35. #define RENAME_TEST_DESCRIPTION "Benchmakrs the rename() C library routine."
  36. #define GETPPID_TEST_NAME "getppid"
  37. #define GETPPID_TEST_DESCRIPTION "Benchmarks the getppid() C library routine."
  38. #define PIPE_IO_TEST_NAME "pipe_io"
  39. #define PIPE_IO_TEST_DESCRIPTION "Benchmarks pipe I/O throughput."
  40. #define READ_TEST_NAME "read"
  41. #define READ_TEST_DESCRIPTION "Benchmarks read() throughput."
  42. #define WRITE_TEST_NAME "write"
  43. #define WRITE_TEST_DESCRIPTION "Benchmarks write() throughput."
  44. #define COPY_TEST_NAME "copy"
  45. #define COPY_TEST_DESCRIPTION \
  46. "Benchmarks read()/write() throughput copying data between files."
  47. #define DLOPEN_TEST_NAME "dlopen"
  48. #define DLOPEN_TEST_DESCRIPTION \
  49. "Benchmarks the dlopen() and dlclose() C library routines."
  50. #define MMAP_PRIVATE_TEST_NAME "mmap_private"
  51. #define MMAP_PRIVATE_TEST_DESCRIPTION \
  52. "Benchmarks the mmap() and munmap() C library routines with MAP_PRIVATE."
  53. #define MMAP_SHARED_TEST_NAME "mmap_shared"
  54. #define MMAP_SHARED_TEST_DESCRIPTION \
  55. "Benchmarks the mmap() and munmap() C library routines with MAP_SHARED."
  56. #define MMAP_ANON_TEST_NAME "mmap_anon"
  57. #define MMAP_ANON_TEST_DESCRIPTION \
  58. "Benchmarks the mmap() and munmap() C library routines with MAP_ANON."
  59. #define MMAP_IO_PRIVATE_TEST_NAME "mmap_io_private"
  60. #define MMAP_IO_PRIVATE_TEST_DESCRIPTION \
  61. "Benchmarks the I/O throughput on private memory mapped regions."
  62. #define MMAP_IO_SHARED_TEST_NAME "mmap_io_shared"
  63. #define MMAP_IO_SHARED_TEST_DESCRIPTION \
  64. "Benchmarks the I/O throughput on shared memory mapped regions."
  65. #define MMAP_IO_ANON_TEST_NAME "mmap_io_anon"
  66. #define MMAP_IO_ANON_TEST_DESCRIPTION \
  67. "Benchmarks the I/O throughput on anonymous memory mapped regions."
  68. #define MALLOC_SMALL_TEST_NAME "malloc_small"
  69. #define MALLOC_SMALL_TEST_DESCRIPTION \
  70. "Benchmarks malloc() and free() using a small allocation size."
  71. #define MALLOC_LARGE_TEST_NAME "malloc_large"
  72. #define MALLOC_LARGE_TEST_DESCRIPTION \
  73. "Benchmarks malloc() and free() using a large allocation size."
  74. #define MALLOC_RANDOM_TEST_NAME "malloc_random"
  75. #define MALLOC_RANDOM_TEST_DESCRIPTION \
  76. "Benchmarks malloc() and free() using a random allocation size."
  77. #define MALLOC_CONTENDED_TEST_NAME "malloc_contended"
  78. #define MALLOC_CONTENDED_TEST_DESCRIPTION \
  79. "Benchmarks malloc() and free() with multiple threads."
  80. #define PTHREAD_JOIN_TEST_NAME "pthread_join"
  81. #define PTHREAD_JOIN_TEST_DESCRIPTION \
  82. "Benchmarks thread creation with pthread_join()."
  83. #define PTHREAD_DETACH_TEST_NAME "pthread_detach"
  84. #define PTHREAD_DETACH_TEST_DESCRIPTION \
  85. "Benchmarks thread creation with pthread_detach()."
  86. #define MUTEX_TEST_NAME "mutex"
  87. #define MUTEX_TEST_DESCRIPTION \
  88. "Benchmarks pthread mutex lock and unlock routines."
  89. #define MUTEX_CONTENDED_TEST_NAME "mutex_contended"
  90. #define MUTEX_CONTENDED_TEST_DESCRIPTION \
  91. "Benchmarks pthread mutex lock and unlock routines under contention."
  92. //
  93. // Default test durations, in seconds.
  94. //
  95. #define FORK_TEST_DEFAULT_DURATION 60
  96. #define EXEC_TEST_DEFAULT_DURATION 60
  97. #define OPEN_TEST_DEFAULT_DURATION 30
  98. #define CREATE_TEST_DEFAULT_DURATION 30
  99. #define DUP_TEST_DEFAULT_DURATION 30
  100. #define RENAME_TEST_DEFAULT_DURATION 30
  101. #define GETPPID_TEST_DEFAULT_DURATION 10
  102. #define PIPE_IO_TEST_DEFAULT_DURATION 30
  103. #define READ_TEST_DEFAULT_DURATION 60
  104. #define WRITE_TEST_DEFAULT_DURATION 60
  105. #define COPY_TEST_DEFAULT_DURATION 60
  106. #define DLOPEN_TEST_DEFAULT_DURATION 30
  107. #define MMAP_PRIVATE_TEST_DEFAULT_DURATION 30
  108. #define MMAP_SHARED_TEST_DEFAULT_DURATION 30
  109. #define MMAP_ANON_TEST_DEFAULT_DURATION 30
  110. #define MMAP_IO_PRIVATE_TEST_DEFAULT_DURATION 30
  111. #define MMAP_IO_SHARED_TEST_DEFAULT_DURATION 30
  112. #define MMAP_IO_ANON_TEST_DEFAULT_DURATION 30
  113. #define MALLOC_SMALL_TEST_DEFAULT_DURATION 30
  114. #define MALLOC_LARGE_TEST_DEFAULT_DURATION 30
  115. #define MALLOC_RANDOM_TEST_DEFAULT_DURATION 30
  116. #define MALLOC_CONTENDED_TEST_DEFAULT_DURATION 30
  117. #define PTHREAD_JOIN_TEST_DEFAULT_DURATION 30
  118. #define PTHREAD_DETACH_TEST_DEFAULT_DURATION 30
  119. #define MUTEX_TEST_DEFAULT_DURATION 30
  120. #define MUTEX_CONTENDED_TEST_DEFAULT_DURATION 30
  121. //
  122. // Define the number of variables supplied to an iteration of the execute test
  123. // loop.
  124. //
  125. #define EXEC_LOOP_ARGUMENT_COUNT 5
  126. //
  127. // ------------------------------------------------------ Data Type Definitions
  128. //
  129. typedef enum _PT_TEST_TYPE {
  130. PtTestAll,
  131. PtTestFork,
  132. PtTestExec,
  133. PtTestOpen,
  134. PtTestCreate,
  135. PtTestDup,
  136. PtTestRename,
  137. PtTestGetppid,
  138. PtTestPipeIo,
  139. PtTestRead,
  140. PtTestWrite,
  141. PtTestCopy,
  142. PtTestDlopen,
  143. PtTestMmapPrivate,
  144. PtTestMmapShared,
  145. PtTestMmapAnon,
  146. PtTestMmapIoPrivate,
  147. PtTestMmapIoShared,
  148. PtTestMmapIoAnon,
  149. PtTestMallocSmall,
  150. PtTestMallocLarge,
  151. PtTestMallocRandom,
  152. PtTestMallocContended,
  153. PtTestPthreadJoin,
  154. PtTestPthreadDetach,
  155. PtTestMutex,
  156. PtTestMutexContended,
  157. PtTestTypeCount
  158. } PT_TEST_TYPE, *PPT_TEST_TYPE;
  159. /*++
  160. Enumeration Description:
  161. This enumeration describes the type of results a performance benchmark test
  162. can return.
  163. Values:
  164. PtResultInvalid - Indicates an invalid test result type.
  165. PtResulIterations - Indicates that the results are stored as the raw number
  166. of test iterations executed over the duration of the test.
  167. PtResultsBytes - Indicates that the results are stored as the number of
  168. bytes processed over the duration of the test.
  169. PtResultTypeCount - Indicates the number of different result types.
  170. --*/
  171. typedef enum _PT_RESULT_TYPE {
  172. PtResultInvalid,
  173. PtResultIterations,
  174. PtResultBytes,
  175. PtResultTypeCount
  176. } PT_RESULT_TYPE, *PPT_RESULT_TYPE;
  177. /*++
  178. Structure Description:
  179. This structure defines a performance test resource usage.
  180. Members:
  181. RealTime - Stores the actual wall clock consumed by the test.
  182. UserTime - Stores the user time used by the test.
  183. SystemTime - Stores the system time used by the test.
  184. --*/
  185. typedef struct _PT_TEST_RESOURCE_USAGE {
  186. struct timeval RealTime;
  187. struct timeval UserTime;
  188. struct timeval SystemTime;
  189. } PT_TEST_RESOURCE_USAGE, *PPT_TEST_RESOURCE_USAGE;
  190. /*++
  191. Structure Description:
  192. This structure defines a performance test result.
  193. Members:
  194. Status - Stores 0 on success or a non-zero error value.
  195. ResourceUsageValid - Stores 0 if the resource usage data is invalid and 1
  196. if it is valid.
  197. ResourceUsage - Stores resource usage information for the test.
  198. Type - Stores the type of result returned by the test.
  199. Iterations - Stores the number of iterations the test made.
  200. Bytes - Stores the number of bytes the test processed.
  201. --*/
  202. typedef struct _PT_TEST_RESULT {
  203. int Status;
  204. int ResourceUsageValid;
  205. PT_TEST_RESOURCE_USAGE ResourceUsage;
  206. PT_RESULT_TYPE Type;
  207. union {
  208. unsigned long long Iterations;
  209. unsigned long long Bytes;
  210. } Data;
  211. } PT_TEST_RESULT, *PPT_TEST_RESULT;
  212. typedef struct _PT_TEST_INFORMATION PT_TEST_INFORMATION, *PPT_TEST_INFORMATION;
  213. typedef
  214. void
  215. (*PPT_TEST_ROUTINE) (
  216. PPT_TEST_INFORMATION Test,
  217. PPT_TEST_RESULT Result
  218. );
  219. /*++
  220. Routine Description:
  221. This routine prototype represents a function that gets called to perform
  222. a performance test.
  223. Arguments:
  224. Test - Supplies a pointer to the performance test being executed.
  225. Result - Supplies a pointer to a performance test result structure that
  226. receives the tests results.
  227. Return Value:
  228. None.
  229. --*/
  230. /*++
  231. Structure Description:
  232. This structure defines an individual performance benchmark test.
  233. Members:
  234. Name - Stores a pointer to a string containing the name of the test.
  235. Description - Stores a pointer to a null terminated string containing a
  236. short one-liner describing the test.
  237. Type - Stores the type value for the test.
  238. Routine - Stores a pointer to the routine to execute for the test.
  239. Duration - Stores the duration of the test, in seconds.
  240. ThreadCount - Stores the number of threads to spin up for tests that
  241. benchmark contention.
  242. --*/
  243. struct _PT_TEST_INFORMATION {
  244. char *Name;
  245. char *Description;
  246. PPT_TEST_ROUTINE Routine;
  247. PT_TEST_TYPE TestType;
  248. PT_RESULT_TYPE ResultType;
  249. time_t Duration;
  250. long ThreadCount;
  251. };
  252. //
  253. // -------------------------------------------------------------------- Globals
  254. //
  255. //
  256. // Store a point to the program name for the individual tests to access.
  257. //
  258. extern char *PtProgramPath;
  259. //
  260. // -------------------------------------------------------- Function Prototypes
  261. //
  262. //
  263. // Performance test library routines.
  264. //
  265. int
  266. PtStartTimedTest (
  267. time_t Duration
  268. );
  269. /*++
  270. Routine Description:
  271. This routine starts a timed performance test. It will collect initial
  272. resource usage and then set an alarm to stop the test after the given
  273. duration. Only one test can run at a time for each process.
  274. Arguments:
  275. Duration - Supplies the desired duration of the test, in seconds.
  276. Return Value:
  277. 0 on success.
  278. -1 on error, and the errno variable will contain more information.
  279. --*/
  280. int
  281. PtFinishTimedTest (
  282. PPT_TEST_RESULT Result
  283. );
  284. /*++
  285. Routine Description:
  286. This routine finalizes a running test that has stopped. It will collect the
  287. final usage statistics and set them in the given result. It makes sure that
  288. the alarm is disabled and stops the test.
  289. Arguments:
  290. Result - Supplies a pointer to the test result that will receive the test's
  291. resource usage, including child resources.
  292. Return Value:
  293. 0 on success.
  294. -1 on error, and the errno variable will contain more information.
  295. --*/
  296. int
  297. PtIsTimedTestRunning (
  298. void
  299. );
  300. /*++
  301. Routine Description:
  302. This routine determines whether or not a timed test is running.
  303. Arguments:
  304. None.
  305. Return Value:
  306. 1 if a test is currently running, or 0 otherwise.
  307. --*/
  308. int
  309. PtCollectResourceUsageStart (
  310. void
  311. );
  312. /*++
  313. Routine Description:
  314. This routine starts collecting resource usage by taking a snapshot of the
  315. current process's usage and the usage of any children it has waited on.
  316. Arguments:
  317. None.
  318. Return Value:
  319. 0 on success.
  320. -1 on error, and the errno variable will contain more information.
  321. --*/
  322. int
  323. PtCollectResourceUsageStop (
  324. PPT_TEST_RESULT Result
  325. );
  326. /*++
  327. Routine Description:
  328. This routine stops collecting resource usage data for the current test and
  329. fills result with the test's resource usage stats.
  330. Arguments:
  331. Result - Supplies a pointer to the test result that will receive the test's
  332. resource usage, including child resources.
  333. Return Value:
  334. 0 on success.
  335. -1 on error, and the errno variable will contain more information.
  336. --*/
  337. //
  338. // Individual test routines.
  339. //
  340. void
  341. ForkMain (
  342. PPT_TEST_INFORMATION Test,
  343. PPT_TEST_RESULT Result
  344. );
  345. /*++
  346. Routine Description:
  347. This routine performs the fork performance benchmark test.
  348. Arguments:
  349. Test - Supplies a pointer to the performance test being executed.
  350. Result - Supplies a pointer to a performance test result structure that
  351. receives the tests results.
  352. Return Value:
  353. None.
  354. --*/
  355. void
  356. ExecMain (
  357. PPT_TEST_INFORMATION Test,
  358. PPT_TEST_RESULT Result
  359. );
  360. /*++
  361. Routine Description:
  362. This routine performs the exec performance benchmark test.
  363. Arguments:
  364. Test - Supplies a pointer to the performance test being executed.
  365. Result - Supplies a pointer to a performance test result structure that
  366. receives the tests results.
  367. Return Value:
  368. None.
  369. --*/
  370. int
  371. ExecLoop (
  372. int ArgumentCount,
  373. char **Arguments
  374. );
  375. /*++
  376. Routine Description:
  377. This routine implements an interation of the exec test.
  378. Arguments:
  379. ArgumentCount - Supplies the number of elements in the arguments array.
  380. Arguments - Supplies an array of strings. The array count is bounded by the
  381. previous parameter, and the strings are null-terminated.
  382. Return Value:
  383. 0 on success.
  384. Non-zero on failure.
  385. --*/
  386. void
  387. OpenMain (
  388. PPT_TEST_INFORMATION Test,
  389. PPT_TEST_RESULT Result
  390. );
  391. /*++
  392. Routine Description:
  393. This routine performs the open performance benchmark test.
  394. Arguments:
  395. Test - Supplies a pointer to the performance test being executed.
  396. Result - Supplies a pointer to a performance test result structure that
  397. receives the tests results.
  398. Return Value:
  399. None.
  400. --*/
  401. void
  402. CreateMain (
  403. PPT_TEST_INFORMATION Test,
  404. PPT_TEST_RESULT Result
  405. );
  406. /*++
  407. Routine Description:
  408. This routine performs the create performance benchmark test.
  409. Arguments:
  410. Test - Supplies a pointer to the performance test being executed.
  411. Result - Supplies a pointer to a performance test result structure that
  412. receives the tests results.
  413. Return Value:
  414. None.
  415. --*/
  416. void
  417. DupMain (
  418. PPT_TEST_INFORMATION Test,
  419. PPT_TEST_RESULT Result
  420. );
  421. /*++
  422. Routine Description:
  423. This routine performs the dup performance benchmark test.
  424. Arguments:
  425. Test - Supplies a pointer to the performance test being executed.
  426. Result - Supplies a pointer to a performance test result structure that
  427. receives the tests results.
  428. Return Value:
  429. None.
  430. --*/
  431. void
  432. RenameMain (
  433. PPT_TEST_INFORMATION Test,
  434. PPT_TEST_RESULT Result
  435. );
  436. /*++
  437. Routine Description:
  438. This routine performs the rename performance benchmark test.
  439. Arguments:
  440. Test - Supplies a pointer to the performance test being executed.
  441. Result - Supplies a pointer to a performance test result structure that
  442. receives the tests results.
  443. Return Value:
  444. None.
  445. --*/
  446. void
  447. GetppidMain (
  448. PPT_TEST_INFORMATION Test,
  449. PPT_TEST_RESULT Result
  450. );
  451. /*++
  452. Routine Description:
  453. This routine performs the getppid performance benchmark test.
  454. Arguments:
  455. Test - Supplies a pointer to the performance test being executed.
  456. Result - Supplies a pointer to a performance test result structure that
  457. receives the tests results.
  458. Return Value:
  459. None.
  460. --*/
  461. void
  462. PipeIoMain (
  463. PPT_TEST_INFORMATION Test,
  464. PPT_TEST_RESULT Result
  465. );
  466. /*++
  467. Routine Description:
  468. This routine performs the pipe I/O performance benchmark test.
  469. Arguments:
  470. Test - Supplies a pointer to the performance test being executed.
  471. Result - Supplies a pointer to a performance test result structure that
  472. receives the tests results.
  473. Return Value:
  474. None.
  475. --*/
  476. void
  477. ReadMain (
  478. PPT_TEST_INFORMATION Test,
  479. PPT_TEST_RESULT Result
  480. );
  481. /*++
  482. Routine Description:
  483. This routine performs the read performance benchmark test.
  484. Arguments:
  485. Test - Supplies a pointer to the performance test being executed.
  486. Result - Supplies a pointer to a performance test result structure that
  487. receives the tests results.
  488. Return Value:
  489. None.
  490. --*/
  491. void
  492. WriteMain (
  493. PPT_TEST_INFORMATION Test,
  494. PPT_TEST_RESULT Result
  495. );
  496. /*++
  497. Routine Description:
  498. This routine performs the write performance benchmark test.
  499. Arguments:
  500. Test - Supplies a pointer to the performance test being executed.
  501. Result - Supplies a pointer to a performance test result structure that
  502. receives the tests results.
  503. Return Value:
  504. None.
  505. --*/
  506. void
  507. CopyMain (
  508. PPT_TEST_INFORMATION Test,
  509. PPT_TEST_RESULT Result
  510. );
  511. /*++
  512. Routine Description:
  513. This routine performs the file copy performance benchmark test.
  514. Arguments:
  515. Test - Supplies a pointer to the performance test being executed.
  516. Result - Supplies a pointer to a performance test result structure that
  517. receives the tests results.
  518. Return Value:
  519. None.
  520. --*/
  521. void
  522. DlopenMain (
  523. PPT_TEST_INFORMATION Test,
  524. PPT_TEST_RESULT Result
  525. );
  526. /*++
  527. Routine Description:
  528. This routine performs the dynamic library open performance benchmark test.
  529. Arguments:
  530. Test - Supplies a pointer to the performance test being executed.
  531. Result - Supplies a pointer to a performance test result structure that
  532. receives the tests results.
  533. Return Value:
  534. None.
  535. --*/
  536. void
  537. MmapMain (
  538. PPT_TEST_INFORMATION Test,
  539. PPT_TEST_RESULT Result
  540. );
  541. /*++
  542. Routine Description:
  543. This routine performs the memory map performance benchmark tests.
  544. Arguments:
  545. Test - Supplies a pointer to the performance test being executed.
  546. Result - Supplies a pointer to a performance test result structure that
  547. receives the tests results.
  548. Return Value:
  549. None.
  550. --*/
  551. void
  552. MallocMain (
  553. PPT_TEST_INFORMATION Test,
  554. PPT_TEST_RESULT Result
  555. );
  556. /*++
  557. Routine Description:
  558. This routine performs the malloc performance benchmark tests.
  559. Arguments:
  560. Test - Supplies a pointer to the performance test being executed.
  561. Result - Supplies a pointer to a performance test result structure that
  562. receives the tests results.
  563. Return Value:
  564. None.
  565. --*/
  566. void
  567. PthreadMain (
  568. PPT_TEST_INFORMATION Test,
  569. PPT_TEST_RESULT Result
  570. );
  571. /*++
  572. Routine Description:
  573. This routine performs the pthread performance benchmark tests.
  574. Arguments:
  575. Test - Supplies a pointer to the performance test being executed.
  576. Result - Supplies a pointer to a performance test result structure that
  577. receives the tests results.
  578. Return Value:
  579. None.
  580. --*/
  581. void
  582. MutexMain (
  583. PPT_TEST_INFORMATION Test,
  584. PPT_TEST_RESULT Result
  585. );
  586. /*++
  587. Routine Description:
  588. This routine performs the mutex performance benchmark tests.
  589. Arguments:
  590. Test - Supplies a pointer to the performance test being executed.
  591. Result - Supplies a pointer to a performance test result structure that
  592. receives the tests results.
  593. Return Value:
  594. None.
  595. --*/