[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[win-pv-devel] [PATCH 9/9] Set StorPortInitializePerfOpts



Sets DPC_REDIRECTION, OPTIMIZE_FOR_COMPLETION_DURING_STARTIO and
CONCURRENT_CHANNELS (to "multi-queue-max-queues") to improve StorPort's
distribution of SRBs to vCPUs.

Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
 src/xenvbd/adapter.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/src/xenvbd/adapter.c b/src/xenvbd/adapter.c
index 7753388..36487e3 100644
--- a/src/xenvbd/adapter.c
+++ b/src/xenvbd/adapter.c
@@ -2082,6 +2082,61 @@ AdapterHwFindAdapter(
     return SP_RETURN_FOUND;
 }
 
+static FORCEINLINE VOID
+AdapterSetPerformanceOptions(
+    IN  PVOID               DevExt
+    )
+{
+    PERF_CONFIGURATION_DATA PerfData;
+    ULONG                   Version;
+    ULONG                   status;
+
+    RtlZeroMemory(&PerfData, sizeof(PERF_CONFIGURATION_DATA));
+    PerfData.Version = STOR_PERF_VERSION;
+    PerfData.Size = sizeof(PERF_CONFIGURATION_DATA);
+
+    status = StorPortInitializePerfOpts(DevExt, TRUE, &PerfData);
+    if (status == STOR_STATUS_SUCCESS) {
+        Trace("Version = %u\n", PerfData.Version);
+        // dump available options
+        if (PerfData.Flags & STOR_PERF_DPC_REDIRECTION)
+            Trace("DPC_REDIRECTION\n");
+        if (PerfData.Flags & STOR_PERF_CONCURRENT_CHANNELS)
+            Trace("CONCURRENT_CHANNELS\n");
+        if (PerfData.Flags & STOR_PERF_INTERRUPT_MESSAGE_RANGES)
+            Trace("INTERRUPT_MESSAGE_RANGES\n");
+        if (PerfData.Flags & STOR_PERF_ADV_CONFIG_LOCALITY)
+            Trace("ADV_CONFIG_LOCALITY\n");
+        if (PerfData.Flags & STOR_PERF_OPTIMIZE_FOR_COMPLETION_DURING_STARTIO)
+            Trace("OPTIMIZE_FOR_COMPLETION_DURING_STARTIO\n");
+        if (PerfData.Flags & STOR_PERF_DPC_REDIRECTION_CURRENT_CPU)
+            Trace("DPC_REDIRECTION_CURRENT_CPU\n");
+        if (PerfData.Flags & STOR_PERF_NO_SGL)
+            Trace("NO_SGL\n");
+
+        Version = PerfData.Version;
+    } else {
+        Warning("StorPortInitializePerfOpts(Get) failed %08x\n", status);
+        Version = STOR_PERF_VERSION;
+    }
+
+    RtlZeroMemory(&PerfData, sizeof(PERF_CONFIGURATION_DATA));
+    PerfData.Version = Version;
+    PerfData.Size = sizeof(PERF_CONFIGURATION_DATA);
+
+    if (Version >= 2) {
+        PerfData.Flags |= STOR_PERF_DPC_REDIRECTION |
+                          STOR_PERF_CONCURRENT_CHANNELS;
+        PerfData.ConcurrentChannels = DriverGetMaxQueues();
+    }
+    if (Version >= 3)
+        PerfData.Flags |= STOR_PERF_OPTIMIZE_FOR_COMPLETION_DURING_STARTIO;
+
+    status = StorPortInitializePerfOpts(DevExt, FALSE, &PerfData);
+    if (status != STOR_STATUS_SUCCESS)
+        Warning("StorPortInitializePerfOpts(Set) failed %08x\n", status);
+}
+
 HW_PASSIVE_INITIALIZE_ROUTINE AdapterHwPassiveInitialize;
 
 BOOLEAN
@@ -2095,6 +2150,7 @@ AdapterHwPassiveInitialize(
     PDEVICE_OBJECT  LowerDeviceObject;
     NTSTATUS        status;
 
+    AdapterSetPerformanceOptions(DevExt);
     if (StorPortGetDeviceObjects(DevExt,
                                  &DeviceObject,
                                  &PhysicalDeviceObject,
-- 
2.16.2.windows.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/win-pv-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.