Skip to main content
Pure1 Support Portal

Configuring Multipath-IO

Overview

There are three Windows Server management tasks that need to be completed for the Pure Storage FlashArray volumes (LUNs) to work properly. The first two discussed in the Configuring Multipath-IO section are:

  1. Setup an MPIO Device
  2. Configuring MPIO Timers

The next sections walkthrough each of these management tasks using the graphical user interface (GUI) or Windows PowerShell.

 

Multipath-IO Devices

The Pure Storage FlashArray needs to be setup as an MPIO Device in order to support multipathing. See the Installing Multipath-IO section for more details. 

 

Setting up MPIO using the Control Panel Applet

These steps work for Windows Server 2008 R2, 2008 R2 (Service Pack 1), 2012, 2012 R2 and 2016. The only differences between the graphical user interface is the changes in the dialogs visual appearances. The example provided in this section are taken from Windows Server 2016.

  1. Using the Control Panel double-click on the MPIO applet to open up the MPIO Properties dialog box.

    Note: The MPIO applet can also be started from Start > Run mpiocpl

     
     
  2. Click Add to show the Add MPIO Support dialog box. 

    Note: Pay close attention to the instructions in the dialog box for string formatting. There should be 4 extra spaces after PURE and 6 extra spaces after FlashArray.

     

3rd party Device Specific Modules (DSMs) will not claim Pure Storage FlashArray volumes. No 3rd party DSMs are supported. This includes EMC PowerPath, NetApp ONTAP DSM, HP 3PAR DSM or others.

3. Click OK to complete the addition of the MPIO device.

Reboot Required dialog box will be displayed on all Windows Server versions. Choose Yes or No depending on what other management or application tasks you are performing but keep in mind that a reboot is required for the new settings to take effect.

Important iSCSI Setup Note

If iSCSI connectivity is being used ignore this reboot requirement. The reason for this is to reduce the number of reboot cycles for the Windows Server host because adding iSCSI support requires an additional reboot. If iSCSI is not being planned Reboot the Windows Server host.

4. iSCSI Setup Step 

Click on the Discover Multi-Paths tab in the MPIO Properties dialog. Click on Add support for iSCSI devices

After adding the support for iSCSI devices click the MPIO Devices tab and see the MSFT2005SCSIBusType_0x9 device has been added. 

5. Click OK then Reboot the Windows Server host.  

 

Setting up MPIO using Windows PowerShell on Windows Server 2012, 2012 R2 and 2016

Using Windows PowerShell is the preferred method for setting up MPIO devices. The reason for preferring PowerShell is the requirements of ensuring the device that is added adheres to the string formatting of Vendor (8 characters) and Product (16 characters). The PowerShell cmdlet, New-MSDSMSupportedHw, handles this formatting requirement. 

The PowerShell below shows how to add a new MPIO device for Pure Storage, retrieve the MPIO devices and remove the example MPIO device provided by Windows Server.

Start a Windows PowerShell session and run the following.

Add New MPIO Device

PS C:\> New-MSDSMSupportedHw -VendorId PURE -ProductId FlashArray

VendorId ProductId
-------- ---------
PURE     FlashArray

Retrieve Available MPIO Devices


PS C:\> Get-MSDSMSupportedHw

VendorId ProductId
-------- ---------
Vendor 8 Product       16
PURE     FlashArray

Remove Default MPIO Device

Removing the default MPIO device is not necessary but simply a recommendation as the default Vendor 8 Product 16 device does not do anything.


PS C:\> Remove-MSDSMSupportedHw -VendorId 'Vendor*' -ProductId 'Product*'
PS C:\> Get-MSDSMSupportedHw

VendorId ProductId
-------- ---------
PURE     FlashArray

The final step to perform using PowerShell is to restart the computer. This operation is performed automatically when using the graphical user interface (GUI). In the case of PowerShell a command needs to be executed. 

Restart-Computer

 

Multipath-IO Timers

There are four MPIO Timer values that are the recommended for use with a Pure Storage FlashArray for optimal performance. See MPIO Timers for full details.

Setting Default FlashArray Definition

CustomPathRecovery

0 1

Specifies whether MPIO performs custom path recovery.

Type is boolean and must be filled with either 0 (disable) or 1 (enable). By default, it is disabled.

NewPathRecoveryInterval

40 20

Specifies a custom path recovery time, in seconds. This is the length of time before the server attempts path recovery. The default value is 40. 

Note: CustomPathRecovery parameter has to be enabled for this value to be used.

PDORemovePeriod

20 30

Specifies a physical device object (PDO) removal period, in seconds. This period is the length of time the server waits after all paths to a PDO have failed before it removes the PDO. The default value is 20.

NewDiskTimeout

60

 

60

Specifies the disk timeout value, in seconds. This value is the length of time the server waits before it marks the I/O request as timed out.

Note: Microsoft documentation has an error and states the default DiskTimeoutValue is 120. On a newly installed Windows Server using Get-MPIOSetting shows the default value is 60. This is an error in Microsoft's documentation and this value should not be changed.

 

Udpating MPIO Timers using Windows PowerShell

Using Windows PowerShell is the preferred method for setting the MPIO Timer values when managing Windows Server 2012, 2012 R2 or 2016 using Set-MPIOSetting cmdlet which is part of the MPIO module. If you are managing a Windows Server 2008 R2 or 2008 R2 Service Pack 1 please refer to the later information in this section. 

Start a Windows PowerShell session and run the following.

Windows Server 2012, 2012 R2 and 2016

Retrieving Current MPIO Timer Values

This will return the current MPIO Timer values. On a newly installed Windows Server all of the default settings will be set as shown below.

PS C:\> Get-MPIOSetting

PathVerificationState     : Disabled
PathVerificationPeriod    : 30
PDORemovePeriod           : 20
RetryCount                : 3
RetryInterval             : 1
UseCustomPathRecoveryTime : Disabled
CustomPathRecoveryTime    : 40
DiskTimeoutValue          : 60
Update MPIO Timer Values

The below PowerShell shows running Set-MPIOSetting four different times with new parameter values. This was done to show each new timer value for clarity. The same can be accomplished with a single line of PowerShell using each of the parameters, this alternative is shown as well. 

Set-MPIOSetting -NewPathRecoveryInterval 20
Set-MPIOSetting -CustomPathRecovery Enabled
Set-MPIOSetting -NewPDORemovePeriod 30
Set-MPIOSetting -NewDiskTimeout 60

OR

Set-MPIOSetting -NewPathRecoveryInterval 20 -CustomPathRecovery Enabled -NewPDORemovePeriod 30 -NewDiskTimeout 60

 

Windows Server 2008 R2 and 2008 R2 Service Pack 1

There are four MPIO Timer values that are the recommended for use with a Pure Storage FlashArray for optimal performance. See MPIO Timers for full details. This section describes how to update these timer values specifically for Windows Server 2008 R2 and 2008 R2 Service Pack 1 as the methods differ from what can be accomplished with newer versions of Windows Server. 

Setting Default FlashArray Definition

HKLM\
   System\
      CurrentControlSet\
          Services\
             MPIO\
                Parameters\
                   UseCustomPathRecoveryInterval

0 1

Flag that enables path verification by MPIO on all paths every N seconds (where N depends on the value set in PathVerificationPeriod).

Type is boolean and must be filled with either 0 (disable) or 1 (enable). By default, it is disabled.

HKLM\
   System\
      CurrentControlSet\
          Services\
             MPIO\
                Parameters\
                   PathRecoveryInterval

40 20

Specifies a custom path recovery time, in seconds. This is the length of time before the server attempts path recovery.

This parameter is not relevant unless the CustomPathRecovery parameter has the value Enabled.

HKLM\
   System\
      CurrentControlSet\
          Services\
             MPIO\
                Parameters\
                   PDORemovePeriod

20 30

This setting controls the amount of time (in seconds) that the multipath pseudo-LUN will continue to remain in system memory, even after losing all paths to the device.

When this timer value is exceeded, pending I/O operations will be failed, and the failure is exposed to the application rather than attempting to continue to recover active paths.

This timer is specified in seconds. 

HKLM\
   System\
      CurrentControlSet\
          Services\
             MPIO\
                Parameters\
                   TimeoutValue

60

 

60

Specifies the disk timeout value, in seconds. This value is the length of time the server waits before it marks the I/O request as timed out.

 

Retrieving Current MPIO Timer Values

This will return the current MPIO Timer values. On a newly installed Windows Server all of the default settings will be set as shown below.

Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\MPIO\Parameters' -Name 'UseCustomPathRecoveryInterval'
Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\MPIO\Parameters' -Name 'PathRecoveryInterval'
Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\MPIO\Parameters' -Name 'PDORemovePeriod'
Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\Disk' -Name 'TimeoutValue'

UseCustomPathRecoveryInterval : 0
PathRecoveryInterval : 40 <-- Note: This default value is different that Windows Server 2012, 2012 R2 and 2016.
PDORemovePeriod : 20
TimeOutValue : 60

 

Update MPIO Timer Values

The below PowerShell shows running Set-ItemProperty to set the values of the different registry keys.  Once the new timer values have been set the previous method of retrieving the values can be run. 

Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\MPIO\Parameters' -Name 'UseCustomPathRecoveryInterval' -Value 1
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\MPIO\Parameters' -Name 'PathRecoveryInterval' -Value 20
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\MPIO\Parameters' -Name 'PDORemovePeriod' -Value 30
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\Disk' -Name 'TimeoutValue' -Value 60