PERF_CONFIGURATION_DATA structure (storport.h)

The PERF_CONFIGURATION_DATA structure describes the performance optimizations that are supported by the StorPortInitializePerfOpts routine.

Syntax

typedef struct _PERF_CONFIGURATION_DATA {
  ULONG           Version;
  ULONG           Size;
  ULONG           Flags;
  ULONG           ConcurrentChannels;
  ULONG           FirstRedirectionMessageNumber;
  ULONG           LastRedirectionMessageNumber;
  ULONG           DeviceNode;
  ULONG           Reserved;
  PGROUP_AFFINITY MessageTargets;
} PERF_CONFIGURATION_DATA, *PPERF_CONFIGURATION_DATA;

Members

Version

The version number of the structure. Set this member when querying and initializing optimizations.

Size

The size of the structure, set to sizeof(PERF_CONFIGURATION_DATA).

Flags

A bitwise-OR of supported flags. Currently, the following flags are supported:

Flag Meaning
STOR_PERF_DPC_REDIRECTION This flag is used to indicate that DPC processing should be spread out over multiple CPUs.

This flag is valid when Version is set to 2 or 3.

STOR_PERF_CONCURRENT_CHANNELS This flag is used to indicate that concurrent calls to the HwStorStartIo routine are supported. Prior to Windows 8, miniports must not set this flag.

This flag is valid when Version is set to 2 or 3.

STOR_PERF_INTERRUPT_MESSAGE_RANGES This flag is used to indicate that interrupt redirection is supported. When you use this flag, you must also set the STOR_PERF_DPC_REDIRECTION flag.

This flag is valid when Version is set to 2 or 3.

STOR_PERF_ADV_CONFIG_LOCALITY This flag is used to indicate that you should use the group and mask that pertain to the message group with the correct affinity. When you use this flag, you must also set the STOR_PERF_INTERRUPT_MESSAGE_RANGES and the STOR_PERF_DPC_REDIRECTION flags.

This flag is valid when Version is set to 3.

STOR_PERF_OPTIMIZE_FOR_COMPLETION_DURING_STARTIO This flag is used to indicate that the miniport driver will complete I/Os concurrently with the submission of new I/Os. When you use this flag, you must also set the STOR_PERF_DPC_REDIRECTION flag.

This flag is valid when Version is set to 3. See remarks below.

STOR_PERF_DPC_REDIRECTION_CURRENT_CPU This flag is used to indicate that you are opting into DPC Redirection (required) but the IO redirection choice is set to the CPU requesting the DPC and not the CPU originating the IO request into Storport.

When you use this flag, you must also set the STOR_PERF_DPC_REDIRECTION flag.

This flag is valid when Version is set to 4.

STOR_PERF_NO_SGL This flag is used to indicate that miniport doesn't need SGLs to be created by storport driver for an IO request buffer.

This flag is valid when Version is set to 5.

ConcurrentChannels

The number of concurrent calls to the HwStorStartIo routine that the miniport driver and the device support. This member is only accessed when the STOR_PERF_CONCURRENT_CHANNELS flag has been set. Prior to Windows 8, miniports must not set this value.

FirstRedirectionMessageNumber

When the Flags member has the STOR_PERF_INTERRUPT_MESSAGE_RANGES flag set, the miniport driver initializes interrupt redirection to begin with this message number. This member is only accessed when the STOR_PERF_INTERRUPT_MESSAGE_RANGES flag is set.

LastRedirectionMessageNumber

When the Flags member has the STOR_PERF_INTERRUPT_MESSAGE_RANGES flag set, the miniport driver initializes interrupt redirection to end with this message number. This member is only accessed when the STOR_PERF_INTERRUPT_MESSAGE_RANGES flag is set.

DeviceNode

When the Flags member has the STOR_PERF_ADV_CONFIG_LOCALITY flag set, Storport initializes this field to contain the NUMA node number in which the miniport driver's device resides.

Reserved

Reserved for system use.

MessageTargets

When the Flags member has the STOR_PERF_ADV_CONFIG_LOCALITY flag set, Storport initializes the fields of in the structures of a GROUP_AFFINITY array. These structures correspond to the redirection messages that are currently in use. The array itself is zero-based, but FirstRedirectionMessageNumber is not required to be zero. The miniport allocates this array and sets MessageTargets to point to it. The miniport driver must allocate a GROUP_AFFINITY array large enough to hold all the returned affinity masks.

Remarks

The current version of this structure is defined by STOR_PERF_VERSION. Setting Version to this value will allow Flags to specify all supported optimizations.

The purpose of the STOR_PERF_DPC_REDIRECTION flag is to ensure that individual CPUs are not overwhelmed with DPC processing. When this flag is set, DPC processing is spread over multiple CPUs. If STOR_PERF_DPC_REDIRECTION_CURRENT_CPU is not set, StorPort will attempt to schedule I/O completion DPCs on the same CPU that originated the I/O.

Typically, a miniport completes I/O requests in it's HwStorStartIo routine and calls StorPortNotification with the RequestComplete notification type. For processing I/O in this manner, the miniport will leave the STOR_PERF_OPTIMIZE_FOR_COMPLETION_DURING_STARTIO flag set in the Flags member allowing Storport to adjust DPC redirection.

For information about enabling message-signaled interrupts for a device, see Enabling Message-Signaled Interrupts in the Registry.

Requirements

Requirement Value
Header storport.h (include Storport.h)

See also

StorPortInitializePerfOpts