[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |