Appendix A: FIM Disk Subsystem Performance Testing

Applies To: Forefront Identity Manager, Forefront Identity Manager 2010

The purpose of this appendix is to provide you with information and tools you can use to evaluate the disk subsystem performance of the systems you plan to use for Microsoft® Forefront® Identity Manager (FIM) 2010.

The batch file that is provided in this appendix, referred to as the FIMSQLIO.bat file, requires SQLIO Disk Subsystem Benchmark Tool. You can download the SQLIO Disk Subsystem Benchmark Tool ( from the Microsoft Download Center. Before using the tool, consider reading the Using SQLIO.rtf file that comes with the download and is installed by default in the installation directory of the tool. Although the tool has SQL in its name, there is no requirement to have or install Microsoft SQL Server® in order to run the tool. The tool simply tests the performance of the disk-subsystem on the computer on which it is run.

The FIMSQLIO.bat file is written to simulate IO patterns that may be generated by the FIM 2010 in order to help you determine the saturation point of the disk subsystem. You may also compare your results to those that are published in the performance profile sections under Interpreting SQLIO Test Results.

Configuring and Running Tests

The FIMSQLIO.bat file provided in this appendix include multiple read/write instructions intended to create a load similar in type to the load generated by the FIM 2010 R2 service and FIM 2010 R2 Synchronization service. You can use the FIMSQLIO.bat file and the SQLIO.exe to test your disk subsystem to better gauge the performance of the system. You can also use the results of the tests run in this guide against the results that you achieve, which should give you a better understanding of how your system will perform in a production environment.

Before you run any disk subsystem performance tests, it is important that you ensure prepare the environment properly.

To perform the following procedures, you must be a member of the local Administrators group or have been delegated the appropriate permission. You must also have permissions to read and write to the volumes that you will test using SQLIO.exe.

  1. Ensure that the volume to be tested is excluded from virus scanning checks during the testing period.

  2. Ensure that you have adequate free disk space on the volume on which you will perform the tests. You will likely want to test a range of different test file sizes, such as 5 GB, 10 GB, and 50 GB, in order to find the disk subsystem saturation point. A defragmented volume (or newly formatted volume) should perform better than a volume with existing data and data fragmentation.

  3. Ensure that the volume to be tested is not configured for indexing or compression.

    To ensure indexing and compression are disabled

    1. Open the Disk Management console. To do so, click Start and then type diskmgmt.msc and press ENTER.

    2. Right click the data volume that you plan to test and then click Properties.

    3. On the General tab, ensure that Compress this drive to save disk space is cleared and ensure that Allow files on this drive to have content indexed in addition to file properties is also cleared.


      Not all volumes will provide these options. If you do not see these options on the General tab, you can move on to the next requirement.

      Click OK.

    4. Repeat from step 2 as needed for additional volumes that you plan to test and then close the Disk Management console.

  4. Ensure that Data Execution Prevention (DEP) is configured with an exemption for SQLIO

    To exempt SQLIO from DEP

    1. Open System Properties. To do so, click Start. Type sysdm.cpl and press ENTER.

    2. Click Advanced.

    3. In the Performance section, click Settings.

    4. In Performance Options, click Data Execution Prevention.

    5. If Turn on DEP for essential Windows programs and services only is selected, then you need not configure this setting further and you can click OK twice to confirm and close System Properties.

    6. If Turn on DEP for all programs and services except those I select is enabled, then click Add.

    7. Use the Open dialog box to locate and then click the sqlio.exe file, which is installed by default in the C:\Program Files (x86)\SQLIO folder. Click Open.

    8. Click OK twice to confirm the exemption of SQLIO.exe from DEP.

FIM 2010 R2 and Microsoft SQL Server® best practices advocate configuring the FIM 2010 R2 service and FIM 2010 R2 Synchronization service databases and log files on separate volumes. In addition, each volume should reside on separate physical disks. For more information, see the SQL Server Best Practices Article ( Since database administrators may decide to place the database, log files, and temporary database files on separate volumes, the FIMSQLIO.bat file directs you to run each test separately. Test results are written as separate report in the folder location you specify.


The performance of any processes, services, or other applications that are running on the disk subsystem that you intend to test will be negatively affected by these tests. Likewise, any processes, services, or other applications using the disk subsystem you plan to test will negatively affect the performance reports you receive from the disk subsystem tests you are about to run.

To create the FIMSQLIO.bat file

  1. Copy the batch file code from the FIM SQLIO Batch file topic (FIM SQLIO Batch File).

  2. Paste the contents of the file you copied into a new file named FIMSQLIO.bat.


    You can name the following batch file whatever you like and even use a .cmd file name extension instead of .bat, but this guide refers to it as the FIMSQLIO.bat file.

  3. Ensure the new file is saved with a .bat file name extension and not saved as a text (.txt.) file. You may need to view file name extension in order to modify the file type. See Show or hide file name extensionsfor instructions on showing file name extensions.

  4. You can run the tests by running the FIMSQLIO.bat file from a command prompt or by double-clicking it. If you run into any errors when starting a test, run the batch file as an administrator (right-click Run as administrator).

  5. When the batch file starts, you will be given some warnings, then prompted for several pieces of information. In all cases, there are defaults presented that you can accept by pressing ENTER. The information requested includes the following.

    1. Type the file system path to the folder that has the SQLIO executable file (sqlio.exe). Do not add a trailing backslash to the file system path. For example, if you want the reports sent to C:\SQLIO\Reports, do not enter C:\SQLIO\Reports\. If the file path includes any spaces, be sure to enclose the path in double quotes. For example, “C:\Program Files\Reports” should be typed with double quotes because there is a space between the words Program and Files.

    2. Type the file system path to the folder where you would like the report written. Use the same directions for typing this file system path as you did for the file system path to the SQLIO executable.

    3. Type the volume letter that you want to test and be sure not to add a colon (:) to the end of the drive letter. The default is to test the C: drive, which could result in an error since the C: drive is often protected by additional permissions. Should you want to test the C: drive, you may find it necessary to run the FIMSQLIO.bat file as an administrator and possibly need to configure additional permissions on the volume.

    4. Type the size of the test file that you want test. You should ensure that the test file is at least large enough to exceed the total disk subsystem cache size. You will have to review your hardware documentation or check with the hardware vendor in order to determine the total size of your disk subsystems cache.


The FIMSQLIO.bat file runs a lot of file copy operations. You should not run these tests on an active production computer because you are likely to seriously degrade the performance of the computer and possibly run out of disk space. These tests are designed to stress your system and help you determine disk saturation points.

You should run your tests using a variety of test file sizes as you may achieve different performance results. For example, with the large profile performance tests that were run, test file sizes of 5 GB, 50 GB, and 100 GB were used. The performance decrease was noticeable when the test file size was increased. For more information on SQLIO testing and results, see the SQL Server Best Practices Article

Interpreting SQLIO Test Results

The FIMSQLIO.bat file uses SQLIO to generate several text file reports. When you run the SQLIO tests from the FIMSQLIO.bat file, you are prompted as to where you would like to save the reports. If you accepted the default path, then you will find the reports in the C:\Program Files (x86)\SQLIO folder on the computer on which you ran the FIMSQLIO.bat file.

SQLIO returns and summarize certain performance data during the test run. SQLIO returns performance statistics for the total throughput (MB/sec), the average disk latency (milliseconds), and the number of I/Os per second. In most cases this is enough information to get a basic understanding of the disk subsystem’s current I/O performance. If more detailed information is needed, Windows Performance Monitor and/or SAN specific monitoring tools can be used. For more information see Monitoring I/O Performance Using System Monitor ( in the SQL Server Best Practices article.

  • SQLIO is generally not a CPU-intensive process. However, you should monitor during the run to ensure that there are no CPU bottlenecks, which would skew the results.

  • Larger I/O sizes normally result in slightly higher latencies

  • Focus on number of I/Os per second and latency when reviewing the data volume and TempDB volume tests because they use random I/Os.

  • Focus mainly on throughput (MB/s) and latency when reviewing the log volume test results because it uses sequential I/Os.

  • When you no longer see increased throughput when increasing the number of outstanding I/Os you probably have saturated the disk, the bandwidth of the channel, or do not have the HBA queue depth setting high enough.

  • It may be helpful to share the results from your SQLIO tests with your storage vendor since the vendor has detailed knowledge about how the equipment should perform for different I/O types, RAID levels, and so on. This data will also be valuable if troubleshooting I/O problems in the future.

  • If you have multiple HBAs or multipathing software in use on the host, ensure that both paths are functionally working and, ideally, that the cumulative bandwidth of the HBAs can be exhausted. One test approach to exhaust bandwidth resources between the host and storage is to use very small test files (100 MB) for SQLIO so that they reside in the cache of the storage array (that is, 100 MB). Sequential I/O issued against these small test file(s) should saturate the bandwidth of the paths and allow one to determine if there are any issues related to bandwidth. When running a test such as this, look at the cumulative MB/s attainable and related this number to the number and bandwidth of HBAs. Ideally, you should be able to almost completely saturate the cumulative bandwidth of the number of HBAs in the host

  • If test results vary wildly, check to determine if you are sharing spindles with others on the array.

Thus far the large profile environment is the only that has been successfully tested using FIMSQLIO.bat. The test results for the large profile are discussed and shown in the Large Profile FIM SQLIO Test Results topic.

See Also


Large Profile FIM SQLIO Test Results
FIM SQLIO Batch File
Performance Testing FIM Service
Performance Testing FIM Synchronization
Topology Considerations
Capacity Planning Guide