Export (0) Print
Expand All

Monitor Storage Tiers Performance in Windows Server 2012 R2

Published: June 26, 2014

Updated: October 16, 2014

Applies To: Windows Server 2012 R2



To make sure your storage tiers are optimizing performance of your storage spaces efficiently in Windows Server 2012 R2, you should evaluate the performance of your storage configuration after a few days, when your workloads have run long enough to become established and predictable, and then check a few simple data points each week in a Storage Tier Optimization Report to make sure the storage tiers are performing optimally.

If you're using tiered storage spaces in Windows Server 2012 R2, Windows is automatically optimizing your storage performance by transparently moving the data that's accessed most frequently to your faster solid-state drives (the SSD tier) and switching out less active data to your less expensive hard disk drives (the HDD tier).

Storage tiers optimization is a two-part process, as shown below:

  • Over the course of the day, Storage Spaces creates a heat map of the data based on how often each piece of data is accessed. (1)

  • During its nightly run (at 1:00 a.m., by default), the Storage Tiers Optimization task moves the most frequently accessed ("hot") data to your faster solid-state drives (the SSD tier) and the "cooler" data to the less expensive hard disk drives (the HDD tier). (2)

The Storage Tiers Optimization process

Optimization moves data, not files—The data is mapped and moved at a sub-file level. So if only 30 percent of the data on a virtual hard disk is "hot," only that 30 percent moves to your solid-state drives.

A write-back cache backed by SSDs minimizes the impact of random writes—In addition, a 1 GB write-back cache backed by SSDs reduces the latency of random writes, which increases the overall throughput performance of the storage.

This typically delivers very efficient storage management with little or no intervention on your part. However, you might occasionally need to adjust the storage tiers configuration to get the performance you want for a specific workload.

When you create storage spaces, plan ahead, and give yourself room to fine-tune the storage spaces after you observe your workloads in action. After a week or two of observing input/output operations per second (IOPS) and latency, you'll be able to more accurately predict the storage requirements of each workload. Designing your storage spaces

  • Don't allocate all available SSD capacity for your storage spaces immediately—Keep some SSD capacity in the storage pool in reserve (in addition to what you reserve for rebuilding failed disks) so you'll be able to increase the size of an SSD tier when a workload needs it.

  • Don't pin files to storage tiers until you see how well Storage Tiers Optimization can optimize storage performance—When a tenant or workload requires a particular level of performance, you can pin files to a storage tier to ensure that all I/O activity is performed on that tier. The entire file is moved to the tier, and then is excluded from Storage Tiers Optimization. If Storage Tiers Optimization can efficiently move only the frequently accessed data to the SSD tier, you can avoid storing entire large files such as virtual hard disks on your more expensive solid-state drives.

  • Do consider pinning the parent VHDX file to the SSD tier if you're providing pooled desktops through VDI—If you're using Virtual Desktop Infrastructure (VDI) to provide pooled desktops for users (you might know these as non-persistent desktops or dynamic desktops), consider pinning the master image that's used to clone users' desktops to the SSD tier if you have the needed SSD capacity. (You might also need to run Storage Tiers Optimization more than once a day.)

Use the Storage Tier Optimization Report to check the performance of your storage tiers and identify changes that might optimize their performance.

Be aware that when you request a Storage Tier Optimization Report, your storage tiers are optimized as part of the reporting process before the report is displayed. That can take several hours. That's why we recommend that you save a report automatically when the Storage Tiers Optimization task runs. That requires changing the scheduled task, as described below. To keep a record of storage tiers performance over time, configure the task to append the new data to the end of the file instead of overwriting it.

You can also run Storage Tiers Optimization on demand.

You can change the Storage Tiers Optimization task to save a report by using Task Scheduler in Server Manager or from the command line.

  1. In Server Manager, open Task Scheduler (on the Tools menu).

  2. In the Task Scheduler console tree, expand Task Scheduler Library > Microsoft > Windows, and click Storage Tiers Management.

  3. Open the properties of the Storage Tiers Optimization task.

  4. On the Actions tab, click Start a program, and then click Edit.

  5. In Add arguments, add the instruction to save an output file to the default arguments:

    /c /h /g /# >> <path>\StorageTiersOutput.txt
    

    Example entry: /c /h /g /# >> C:\Windows\StorageReports\StorageTiersOutput.txt

    noteNote
    This string requires a literal path—you can't use environment variables such as %windir% to indicate the system folder.

  • Run the following command at an elevated command prompt:

    schtasks /change /tn "\Microsoft\Windows\Storage Tiers Management\Storage Tiers Optimization" /tr "cmd /c %windir%\System32\defrag.exe /c /h /g /# >> %windir%\StorageTiersOutput.txt"
    
    • Run the example command as it is to save the data in a StorageTiersOutput.txt file in the Windows installation folder. You can substitute any path or filename.

    • The >> appends the latest data to the existing file so you can compare performance data over time. If you prefer to overwrite the previous data each time the task runs, use a single > instead.

To perform Storage Tiers Optimization on demand, you can either run the Storage Tiers Optimization task—either in Task Scheduler or Windows PowerShell—or you can run defrag.exe with the appropriate parameters.

noteNote
You can’t use some of the storage cmdlets with Windows PowerShell (x86) or Windows PowerShell ISE (x86). Instead, use the normal (64-bit) Windows PowerShell or Windows PowerShell ISE.

  1. In the Task Scheduler console tree, expand Task Scheduler Library > Microsoft > Windows, and click Storage Tiers Management.

  2. Right-click the Storage Tiers Optimization task, and click Run.

  • Open Windows PowerShell with administrator rights, and run this command. (You'll only get a report if you've updated the task to save one.)

    Get-ScheduledTask -TaskName "Storage Tiers Optimization" | Start-ScheduledTask
    

  • Enter the following command at an elevated command prompt:

    defrag <driveletter>: /g /h /#
    

    This command optimizes storage tiers (/g) on the volume, returning a Post Defragmentation Report and a Storage Tier Optimization Report. Include /h to process the job at normal priority instead of low priority (the default).

There are three things to monitor to ensure your storage tiers perform optimally for each workload:

A quick look at a Storage Tier Optimization Report can tell you whether you have provided sufficient SSD tier capacity to get the I/O optimization—that is, the percentage of I/O serviced by the SSD tier—that you want for the workloads in the storage space. The appropriate performance goal depends on the nature and requirements of a workload.

Detection—If the percentage of I/Os that your SSD tier is currently servicing (at the bottom of the Storage Tier Optimization Report) is lower than the percentage you want for the workloads, check the table at the top of the report to find out the SSD tier size that is required to reach the desired percentage based on current activity of your workloads.

Report indicating more SSD tier capacity is needed

  • You can increase the size of the SSD tier or move a workload to a different storage space (to reduce the SSD capacity requirement of the current storage space) at any time. Moving a workload typically involves moving virtual machine storage, which is performed as a background task.

If additional SSD capacity is available for the storage space, you can enlarge the SSD tier to meet the needs of a workload. After you resize the tier, you will need to extend the partition and volume for the storage space. You can do this in Server Manager or in Windows PowerShell.

  1. In Server Manager, open File and Storage Services (on the Tools menu).

    noteNote
    If you're already working in Server Manager, refresh the display to make sure you're seeing any recent changes made in Windows PowerShell.

  2. In the console tree, expand Volumes, and click Storage Pools.

  3. Select the storage pool. Then, under Virtual Disks, right-click the storage space and click Extend virtual disk. For a tiered storage pool, you extend individual tiers.

  4. To extend a tier, click Specify size, and enter the total amount of space to allocate to the tier—that is, current size plus the additional space that is needed. Then click OK.

    ImportantImportant
    Make sure the resized SSD tier will not encroach on the space that you reserved in the storage pool to support automatic rebuild when a physical disk fails. Guidelines for allocating capacity for storage pools and storage spaces

  5. Open the properties of the storage pool. Note Allocated space (the sum of space allocated to both tiers). You will need to extend the volume to accommodate the allocation.

  6. To extend the volume (this also extends the partition):

    1. In the console tree, click Volumes.

    2. Under Volumes, right-click the volume assigned to the storage space, and click Extend volume.

    3. In the Extend Volume dialog box, enter a larger size to enable use of the expanded tier capacity.

      ImportantImportant
      Don't assign the maximum size. You need to reserve some space for the GPT partitioning scheme. We recommend leaving 256 MB (0.25 GB). That is, resize the partition for a 66GB storage space to 65.75GB.

  1. Open Windows PowerShell as an administrator.

  2. Before you resize the SSD tier, run the following commands to verify the health of the storage space, the current size of the tier you want to resize, and available capacity. Replace the $StorageSpaceName variable with the friendly name of the storage space.

    noteNote
    Commands throughout this procedure use the $StorageSpaceName and $SSDtier variables, with the assumption that you will run all commands in the same Windows PowerShell session. If you open a new Windows PowerShell session, either define the variables again or substitute the friendly name of the storage space or SSD tier for the variable.

    $StorageSpaceName = "<storagespacename>"
    $SSDtier = Get-VirtualDisk -FriendlyName $StorageSpaceName | Get-StorageTier –mediatype “SSD”
    Get-VirtualDisk $StorageSpaceName | Format-Table –AutoSize
    Get-StorageTier -VirtualDisk (Get-VirtualDisk -FriendlyName $StorageSpaceName) | Format-Table -Property FriendlyName,MediaType,Size -AutoSize
    Get-StorageTierSupportedSize –InputObject $SSDtier
    Get-VirtualDisk $StorageSpaceName | Get-Disk | Format-Table –AutoSize
    Get-VirtualDisk $StorageSpaceName | Get-Disk | Get-Partition | Format-Table –AutoSize
    Get-VirtualDisk $StorageSpaceName | Get-Disk | Get-Partition | Get-Volume | Format-Table –AutoSize
    

    Sample output—Shows a tiered storage space, Space01, with:

    • 64 GB capacity (SSD tier = 32 GB, HDD tier = 32 GB)

    • Volume (D) and partition size of 64.87 GB. Note that the volume and partition are slightly smaller than the storage space capacity. Remaining space is used for the GPT partitioning scheme.

    • Resiliency setting of Mirror

    PS C:\Windows\system32> $StorageSpaceName = "Space01"
    
    PS C:\Windows\system32> $SSDtier = Get-VirtualDisk -FriendlyName $StorageSpaceName | Get-StorageTier –mediatype “SSD”
    
    PS C:\Windows\system32> Get-VirtualDisk $StorageSpaceName | FT -AutoSize
    
    FriendlyName       ResiliencySettingName OperationalStatus HealthStatus IsManualAttach  Size
    ------------       --------------------- ----------------- ------------ --------------  ----
    Space01            Mirror                OK                Healthy      False          64 GB
    
    
    PS C:\Windows\system32> Get-StorageTier -VirtualDisk (Get-VirtualDisk -FriendlyName $StorageSpaceName) | Format-Table -Property FriendlyName,MediaType,Size -AutoSize
    
    FriendlyName                      Size
    ------------                      ----
    Space01_SSDtier                   34359738368
    Space01_HDDtier                   34359738368
    
    
    PS C:\Windows\system32> Get-StorageTierSupportedSize –-InputObject $SSDtier
    
    SupportedSizes TierSizeMin   TierSizeMax TierSizeDivisor
    -------------- -----------   ----------- ---------------
    {}              2147483648 1020054732800      2147483648
    
    
    PS C:\Windows\system32> Get-VirtualDisk $StorageSpaceName | Get-Disk | FT -AutoSize
    
    Number Friendly Name                  OperationalStatus Total Size Partition Style
    ------ -------------                  ----------------- ---------- ---------------
    8      Microsoft Storage Space Device Online                 64 GB GPT            
    
    
    PS C:\Windows\system32> Get-VirtualDisk $StorageSpaceName | Get-Disk | Get-Partition | Format-Table –AutoSize
    
    
       Disk Number: 8
    
    PartitionNumber DriveLetter Offset        Size Type    
    --------------- ----------- ------        ---- ----    
    1                           24576       128 MB Reserved
    2               D           135266304 63.87 GB Basic   
    
    
    PS C:\Windows\system32> Get-VirtualDisk $StorageSpaceName | Get-Disk | Get-Partition | Get-Volume | Format-Table –AutoSize
    
    DriveLetter FileSystemLabel FileSystem DriveType HealthStatus SizeRemaining     Size
    ----------- --------------- ---------- --------- ------------ -------------     ----
    D           New Volume      NTFS       Fixed     Healthy           61.77 GB 63.87 GB
  3. Add capacity to the SSD tier by running the following command. Enter the size in GBs, TBs, or MBs, using this format: 34GB.

    Resize-StorageTier Friendly-Name $SSDtier -Size <size>
    

    ImportantImportant
    Make sure the resized SSD tier will not encroach on the space that you reserved in the storage pool to support automatic rebuild when a physical disk fails. Guidelines for allocating capacity for storage pools and storage spaces

  4. Update the virtual disk to incorporate the additional tier size:

    Get-VirtualDisk $StorageSpaceName | Get-Disk | Update-Disk
    
  5. Recheck the status of the storage space and its tiers by repeating the commands that you ran in Step 2, and note the size of the total allocated space (the sum of allocated capacity for both tiers).

  6. Resize the partition for the storage space (this also resizes the volume). You'll have to make the partition slightly smaller than the storage space capacity to leave space for the GPT partitioning scheme. We recommend that you reserve 256 MB (0.25 GB) for this purpose. That is, resize the partition for a 66GB storage space to 65.75GB.

    Resize-Partition -DriveLetter <driveletter> -Size <size>
    
  7. Verify the changes to the partition and volume by running the following commands:

    Get-VirtualDisk $StorageSpaceName | Get-Disk | Get-Partition | Format-Table –AutoSize
    Get-VirtualDisk $StorageSpaceName | Get-Disk | Get-Partition | Get-Volume | Format-Table –AutoSize
    

    Sample output—Shows a healthy volume and partition enlarged to 65.75 GB.

    PS C:\Windows\system32> Get-VirtualDisk $StorageSpaceName | Get-Disk | Get-Partition | FT –AutoSize
    
       Disk Number: 8
    
    PartitionNumber DriveLetter Offset        Size Type    
    --------------- ----------- ------        ---- ----    
    1                           24576       128 MB Reserved
    2               D           135266304 65.75 GB Basic   
    
    
    PS C:\Windows\system32> Get-VirtualDisk $StorageSpaceName | Get-Disk | Get-Partition | Get-Volume | FT –AutoSize
    
    DriveLetter FileSystemLabel FileSystem DriveType HealthStatus SizeRemaining     Size
    ----------- --------------- ---------- --------- ------------ -------------     ----
    D           New Volume      NTFS       Fixed     Healthy           63.64 GB 65.75 GB

By default, the Storage Tiers Optimization task runs daily at 1:00 a.m. For large, highly active workloads, more frequent volume optimization might be needed to maintain consistent storage performance throughout the day.

Detection—In the Storage Tier Optimization Report, check whether the actual percentage of I/Os being serviced by the SSD tier is about what's expected for your SSD tier size, as shown below. The expected percentage for each tier size is calculated based on the heat map for your storage space. If the actual percentage is a lot lower than expected, you should schedule additional runs of the Storage Tiers Optimization task.

Report indicates more frequent optimization needed

  • At an elevated command prompt, enter the following command:

    schtasks /change /tn "\Microsoft\Windows\Storage Tiers Management\Storage Tiers Optimization" /ri 360
    

    The example sets the run interval to every 360 minutes (6 hours) (/ri 360). There's nothing to gain by running the task any more frequently.

  1. In Server Manager, open Task Scheduler (on the Tools menu).

  2. In the Task Scheduler console tree, expand Task Scheduler Library > Microsoft > Windows, and click Storage Tiers Management.

  3. Open properties for the Storage Tiers Optimization task.

  4. On the Triggers tab, click Daily, and then click Edit.

  5. Under Advanced Settings, select Repeat task every, and type in 6 hours (if you want to run Storage Tiers Optimization four times daily). (The trigger should remain Daily.)

An administrator can override Storage Tiers Optimization by pinning files to a storage tier to ensure the files are always accessed on the preferred tier.

That's useful in some circumstances, but we recommend that you pin files sparingly—and only after you observe your workloads to see whether Storage Tiers Optimization can accomplish your goals. Each pinned file on the SSD tier reduces the space that can be used for data placement based on the heat map—and the pinned file typically takes up more space on your more expensive solid-state drives than the frequently accessed data that moves there during Storage Tiers Optimization.

If you pin files to a storage tier, you should monitor the effects of the pinned files on storage tier performance.

When should you consider pinning files to a storage tier?

  • If you need to guarantee performance levels for workloads—You can pin files to differentiate tenant virtual machines, and the underlying VHD files, based on service-level agreements.

  • For workloads that require that certain files be pinned to a tier—For example, for VDI pooled desktops, you should pin the parent VHDX file that is used to clone the desktops at startup to the SSD tier.

  • For workloads that frequently access different data at different times—If a workload's active working set is not stable, you can get churn from data moving often between the SSD tier and the HDD tier.

  • To debug performance issues relating to a tier

  • To remove streaming media from I/O servicing on the SSD tier—It can be useful to pin the VHDs that store videos and audio files to the HDD tier. These media are accessed sequentially, and can be handled fine by hard disk drives.

Detection–Whether to pin a file to a storage tier is the administrator's choice based on the requirements and behavior of workloads. You should use pinning sparingly in situations like those noted earlier.

  • You can pin a file at any time with no immediate effect on storage performance. Storage Tiers Optimization attempts to move the file to the desired tier during its next run. If you decide to optimize tiers immediately, bear in mind the trade-off between possibly reduced performance during the extra Storage Tiers Optimization run and the added benefit of immediate tier optimization.

Use Windows PowerShell to pin files to a storage tier. This feature is not available in Server Manager.

noteNote
To be pinned a storage tier, a file must be on a volume that is hosted by the same tiered storage space.

  1. Open Windows PowerShell as an administrator.

  2. To get the friendly name of the storage tier, run this:

    Get-StorageTier <storagespacename>*| Format-Table FriendlyName, MediaType, Size –AutoSize
    
  3. To pin the file to the tier, run this:

    Set-FileStorageTier -FilePath <filepath> -DesiredStorageTierFriendlyName <tierfriendlyname>
    

    This pins the file but doesn’t move it immediately. Storage Spaces will attempt to move the pinned files to the desired volumes during its next Storage Tiers Optimization run.

  4. If you want to move the file now, perform Storage Tiers Optimization on demand:

    In Windows PowerShell, run: Get-ScheduledTask -TaskName "Storage Tiers Optimization" | Start-ScheduledTask

    -Or-

    At an elevated command prompt, run: defrag <driveletter>: /g /h /#

  5. To verify that a pinned file has been moved to the tier, run the following command in Windows PowerShell, and check the placement status and state of the file:

    Get-FileStorageTier -VolumeDriveLetter <driveletter>
    

    Sample output:

    PS C:\Windows\system32> Get-FileStorageTier -VolumeDriveLetter d
    
    FilePath                            DesiredStorageTierName            PlacementStatus                   State
    --------                            ----------------------            ---------------                   -----
    D:\VMs\ParentVM01.vhd...            Space01_SSDtier                   Completely on tier                OK
    D:\TrainingVideo01.mpv              Space01_HDDtier                   Completely on tier                OK

If you pin files to your storage tiers, you should check the effects of the pinned files on I/O servicing when you review the Storage Tier Optimization Report. At the bottom of the report, you'll see the total volume of pinned files on each tier, and the percentage of I/O on the tier accounted for by pinned files.

Space consumed and I/Os serviced for pinned files

How you interpret the data depends on why you pinned the files. For example, if you aren't getting the storage performance that you need for a workload, and pinned files account for a large percentage of I/O serviced by the SSD tier, then it's a good idea to review a list of the pinned files to make sure they all need to be pinned.

  • Open Windows PowerShell as an administrator, and run the following command:

    Get-FileStorageTier -VolumeDriveLetter <driveletter>
    

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft