[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [win-pv-devel] [PATCH 2/2] Add registry overrides for cache caps
> -----Original Message----- > From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On Behalf Of > Owen Smith > Sent: 08 July 2019 10:45 > To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx > Cc: Owen Smith <owen.smith@xxxxxxxxxx> > Subject: [win-pv-devel] [PATCH 2/2] Add registry overrides for cache caps > > NDIS 6.0 Mini6Performance test can fail when the Reciever PacketCache is > unable to allocate a complete slab to handle more packets. The failure > is seen as RecieverPacketCtor failing either; due to being unable to > allocate a page, or being unable to map the page. The VIF is unable to > recover from this, locking the VM under test. Really? If we have a lock-up condition then that needs to be fixed rather than avoided. Also, we really ought to try to indicate low resources down to XENNET so that it can indicate the same to NDIS. Paul > Setting a > ReceiverPacketCacheCap to about 0x300 prevents the test reaching the > critical failure point. > > Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> > --- > src/xenvif/receiver.c | 27 +++++++++++++++++-- > src/xenvif/transmitter.c | 68 > ++++++++++++++++++++++++++++++++++++++++++++---- > 2 files changed, 88 insertions(+), 7 deletions(-) > > diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c > index 7125743..ea135ac 100644 > --- a/src/xenvif/receiver.c > +++ b/src/xenvif/receiver.c > @@ -140,6 +140,8 @@ struct _XENVIF_RECEIVER { > ULONG DisableIpVersion6Gso; > ULONG IpAlignOffset; > ULONG AlwaysPullup; > + ULONG FragmentCacheCap; > + ULONG PacketCacheCap; > XENBUS_STORE_INTERFACE StoreInterface; > XENBUS_DEBUG_INTERFACE DebugInterface; > PXENBUS_DEBUG_CALLBACK DebugCallback; > @@ -2454,7 +2456,7 @@ __ReceiverRingInitialize( > Name, > sizeof (XENVIF_RECEIVER_PACKET), > 0, > - 0, > + Receiver->PacketCacheCap, > ReceiverPacketCtor, > ReceiverPacketDtor, > ReceiverRingAcquireLock, > @@ -2480,7 +2482,7 @@ __ReceiverRingInitialize( > Name, > sizeof (XENVIF_RECEIVER_FRAGMENT), > 0, > - 0, > + Receiver->FragmentCacheCap, > ReceiverFragmentCtor, > ReceiverFragmentDtor, > ReceiverRingAcquireLock, > @@ -3040,6 +3042,9 @@ ReceiverInitialize( > (*Receiver)->DisableIpVersion6Gso = 0; > (*Receiver)->IpAlignOffset = 0; > (*Receiver)->AlwaysPullup = 0; > + (*Receiver)->FragmentCacheCap = 0; > + (*Receiver)->PacketCacheCap = 0; > + > > if (ParametersKey != NULL) { > ULONG ReceiverCalculateChecksums; > @@ -3048,6 +3053,8 @@ ReceiverInitialize( > ULONG ReceiverDisableIpVersion6Gso; > ULONG ReceiverIpAlignOffset; > ULONG ReceiverAlwaysPullup; > + ULONG ReceiverFragmentCacheCap; > + ULONG ReceiverPacketCacheCap; > > status = RegistryQueryDwordValue(ParametersKey, > "ReceiverCalculateChecksums", > @@ -3084,6 +3091,18 @@ ReceiverInitialize( > &ReceiverAlwaysPullup); > if (NT_SUCCESS(status)) > (*Receiver)->AlwaysPullup = ReceiverAlwaysPullup; > + > + status = RegistryQueryDwordValue(ParametersKey, > + "ReceiverFragmentCacheCap", > + &ReceiverFragmentCacheCap); > + if (NT_SUCCESS(status)) > + (*Receiver)->FragmentCacheCap = ReceiverFragmentCacheCap; > + > + status = RegistryQueryDwordValue(ParametersKey, > + "ReceiverPacketCacheCap", > + &ReceiverPacketCacheCap); > + if (NT_SUCCESS(status)) > + (*Receiver)->PacketCacheCap = ReceiverPacketCacheCap; > } > > KeInitializeEvent(&(*Receiver)->Event, NotificationEvent, FALSE); > @@ -3178,6 +3197,8 @@ fail2: > (*Receiver)->DisableIpVersion6Gso = 0; > (*Receiver)->IpAlignOffset = 0; > (*Receiver)->AlwaysPullup = 0; > + (*Receiver)->FragmentCacheCap = 0; > + (*Receiver)->PacketCacheCap = 0; > > ASSERT(IsZeroMemory(*Receiver, sizeof (XENVIF_RECEIVER))); > __ReceiverFree(*Receiver); > @@ -3612,6 +3633,8 @@ ReceiverTeardown( > Receiver->DisableIpVersion6Gso = 0; > Receiver->IpAlignOffset = 0; > Receiver->AlwaysPullup = 0; > + Receiver->FragmentCacheCap = 0; > + Receiver->PacketCacheCap = 0; > > ASSERT(IsZeroMemory(Receiver, sizeof (XENVIF_RECEIVER))); > __ReceiverFree(Receiver); > diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c > index 6a4db1f..efac3e3 100644 > --- a/src/xenvif/transmitter.c > +++ b/src/xenvif/transmitter.c > @@ -221,6 +221,11 @@ struct _XENVIF_TRANSMITTER { > ULONG AlwaysCopy; > ULONG ValidateChecksums; > ULONG DisableMulticastControl; > + ULONG BufferCacheCap; > + ULONG MulticastControlCacheCap; > + ULONG FragmentCacheCap; > + ULONG RequestCacheCap; > + ULONG PacketCacheCap; > KSPIN_LOCK Lock; > PXENBUS_CACHE PacketCache; > XENBUS_STORE_INTERFACE StoreInterface; > @@ -3445,7 +3450,7 @@ __TransmitterRingInitialize( > Name, > sizeof (XENVIF_TRANSMITTER_BUFFER), > 0, > - 0, > + Transmitter->BufferCacheCap, > TransmitterBufferCtor, > TransmitterBufferDtor, > TransmitterRingAcquireLock, > @@ -3471,7 +3476,7 @@ __TransmitterRingInitialize( > Name, > sizeof (XENVIF_TRANSMITTER_MULTICAST_CONTROL), > 0, > - 0, > + Transmitter->MulticastControlCacheCap, > TransmitterMulticastControlCtor, > TransmitterMulticastControlDtor, > TransmitterRingAcquireLock, > @@ -3523,7 +3528,7 @@ __TransmitterRingInitialize( > Name, > sizeof (XENVIF_TRANSMITTER_FRAGMENT), > 0, > - 0, > + Transmitter->FragmentCacheCap, > TransmitterFragmentCtor, > TransmitterFragmentDtor, > TransmitterRingAcquireLock, > @@ -3549,7 +3554,7 @@ __TransmitterRingInitialize( > Name, > sizeof (XENVIF_TRANSMITTER_REQUEST), > 0, > - 0, > + Transmitter->RequestCacheCap, > TransmitterRequestCtor, > TransmitterRequestDtor, > TransmitterRingAcquireLock, > @@ -4456,6 +4461,11 @@ TransmitterInitialize( > (*Transmitter)->AlwaysCopy = 0; > (*Transmitter)->ValidateChecksums = 0; > (*Transmitter)->DisableMulticastControl = 0; > + (*Transmitter)->BufferCacheCap = 0; > + (*Transmitter)->MulticastControlCacheCap = 0; > + (*Transmitter)->FragmentCacheCap = 0; > + (*Transmitter)->RequestCacheCap = 0; > + (*Transmitter)->PacketCacheCap = 0; > > if (ParametersKey != NULL) { > ULONG TransmitterDisableIpVersion4Gso; > @@ -4463,6 +4473,11 @@ TransmitterInitialize( > ULONG TransmitterAlwaysCopy; > ULONG TransmitterValidateChecksums; > ULONG TransmitterDisableMulticastControl; > + ULONG TransmitterBufferCacheCap; > + ULONG TransmitterMulticastControlCacheCap; > + ULONG TransmitterFragmentCacheCap; > + ULONG TransmitterRequestCacheCap; > + ULONG TransmitterPacketCacheCap; > > status = RegistryQueryDwordValue(ParametersKey, > "TransmitterDisableIpVersion4Gso", > @@ -4493,6 +4508,39 @@ TransmitterInitialize( > > &TransmitterDisableMulticastControl); > if (NT_SUCCESS(status)) > (*Transmitter)->DisableMulticastControl = > TransmitterDisableMulticastControl; > + > + status = RegistryQueryDwordValue(ParametersKey, > + "TransmitterBufferCacheCap", > + &TransmitterBufferCacheCap); > + if (NT_SUCCESS(status)) > + (*Transmitter)->BufferCacheCap = TransmitterBufferCacheCap; > + > + status = RegistryQueryDwordValue(ParametersKey, > + > "TransmitterMulticastControlCacheCap", > + > &TransmitterMulticastControlCacheCap); > + if (NT_SUCCESS(status)) > + (*Transmitter)->MulticastControlCacheCap = > TransmitterMulticastControlCacheCap; > + > + status = RegistryQueryDwordValue(ParametersKey, > + "TransmitterFragmentCacheCap", > + &TransmitterFragmentCacheCap); > + if (NT_SUCCESS(status)) > + (*Transmitter)->FragmentCacheCap = TransmitterFragmentCacheCap; > + > + status = RegistryQueryDwordValue(ParametersKey, > + "TransmitterRequestCacheCap", > + &TransmitterRequestCacheCap); > + if (NT_SUCCESS(status)) > + (*Transmitter)->RequestCacheCap = TransmitterRequestCacheCap; > + > + status = RegistryQueryDwordValue(ParametersKey, > + "TransmitterPacketCacheCap", > + &TransmitterPacketCacheCap); > + if (NT_SUCCESS(status)) > + (*Transmitter)->PacketCacheCap = TransmitterPacketCacheCap; > + > + if ((*Transmitter)->PacketCacheCap < XENVIF_PACKET_CACHE_RESERVATION) > + (*Transmitter)->PacketCacheCap = 0; > } > > FdoGetDebugInterface(PdoGetFdo(FrontendGetPdo(Frontend)), > @@ -4540,7 +4588,7 @@ TransmitterInitialize( > Name, > sizeof (XENVIF_TRANSMITTER_PACKET), > XENVIF_PACKET_CACHE_RESERVATION, > - 0, > + (*Transmitter)->PacketCacheCap, > TransmitterPacketCtor, > TransmitterPacketDtor, > TransmitterPacketAcquireLock, > @@ -4634,6 +4682,11 @@ fail2: > (*Transmitter)->AlwaysCopy = 0; > (*Transmitter)->ValidateChecksums = 0; > (*Transmitter)->DisableMulticastControl = 0; > + (*Transmitter)->BufferCacheCap = 0; > + (*Transmitter)->MulticastControlCacheCap = 0; > + (*Transmitter)->FragmentCacheCap = 0; > + (*Transmitter)->RequestCacheCap = 0; > + (*Transmitter)->PacketCacheCap = 0; > > ASSERT(IsZeroMemory(*Transmitter, sizeof (XENVIF_TRANSMITTER))); > __TransmitterFree(*Transmitter); > @@ -4994,6 +5047,11 @@ TransmitterTeardown( > Transmitter->AlwaysCopy = 0; > Transmitter->ValidateChecksums = 0; > Transmitter->DisableMulticastControl = 0; > + Transmitter->BufferCacheCap = 0; > + Transmitter->MulticastControlCacheCap = 0; > + Transmitter->FragmentCacheCap = 0; > + Transmitter->RequestCacheCap = 0; > + Transmitter->PacketCacheCap = 0; > > ASSERT(IsZeroMemory(Transmitter, sizeof (XENVIF_TRANSMITTER))); > __TransmitterFree(Transmitter); > -- > 2.16.2.windows.1 > > > _______________________________________________ > win-pv-devel mailing list > win-pv-devel@xxxxxxxxxxxxxxxxxxxx > https://lists.xenproject.org/mailman/listinfo/win-pv-devel _______________________________________________ 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 |