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

Re: [PATCH 1/2] xennet: improve NBL batching receive path


  • To: david ambu <david.preetham@xxxxxxxxxx>, win-pv-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
  • Date: Mon, 21 Sep 2026 15:13:27 +0200
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
  • Delivery-date: Mon, 21 Sep 2026 13:13:35 +0000
  • Feedback-id: default:8631fc262581453bbf619ec5b2062170:Sweego
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>

On 17/09/2026 17:43, david ambu wrote:
>    Raise NblBatchMax default to 32 (max 64). Split batches at
>    EtherType boundaries and set NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE per
>    batch. Fix __ReceiverPushPackets: move KeMemoryBarrier before Returned/
>    Indicated reads, and return early when queue is empty.
> 
> Signed-off-by: david ambu <david.preetham@xxxxxxxxxx>
> ---
>   src/xennet.inf        |   6 +++
>   src/xennet/adapter.c  |  13 +++++
>   src/xennet/adapter.h  |   8 ++++
>   src/xennet/receiver.c | 108 +++++++++++++++++++++++++++++++-----------
>   4 files changed, 108 insertions(+), 27 deletions(-)
> 
> diff --git a/src/xennet.inf b/src/xennet.inf
> index 55e11a2..79730e8 100644
> --- a/src/xennet.inf
> +++ b/src/xennet.inf
> @@ -186,6 +186,11 @@ HKR, Ndi\params\*NumRSSQueues,                    
> Default,    0, "8"
>   HKR, Ndi\params\*NumRSSQueues,                    Min,        0, "1"
>   HKR, Ndi\params\*NumRSSQueues,                    Max,        0, "8"
>   
> +HKR, Ndi\Params\NblBatchMax,                                           
> ParamDesc,  0, %NblBatchMax%
> +HKR, Ndi\Params\NblBatchMax,                                           Type, 
>       0, "int"
> +HKR, Ndi\Params\NblBatchMax,                                           
> Default,    0, "32"
> +HKR, Ndi\Params\NblBatchMax,                                           Min,  
>       0, "1"
> +HKR, Ndi\Params\NblBatchMax,                                           Max,  
>       0, "64"
>   [XenNet_Inst.Services]
>   AddService=xennet,0x02,XenNet_Service,XenNet_EventLog
>   
> @@ -248,6 +253,7 @@ Enabled="Enabled"
>   Enabled-Rx="Rx Enabled"
>   Enabled-Tx="Tx Enabled"
>   Enabled-TxRx="Rx & Tx Enabled"
> +NblBatchMax="Max Receive Indicate NBLS"
>   
>   SERVICE_BOOT_START=0x0
>   SERVICE_SYSTEM_START=0x1
> diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
> index f79c0c8..6e5a95a 100644
> --- a/src/xennet/adapter.c
> +++ b/src/xennet/adapter.c
> @@ -63,6 +63,7 @@ typedef struct _PROPERTIES {
>       int lrov6;
>       int rss;
>       int numrssqueues;
> +    int nblbatchmax;
>   } PROPERTIES, *PPROPERTIES;
>   
>   typedef struct _XENNET_RSS {
> @@ -1480,6 +1481,17 @@ AdapterGetHandle(
>       return Adapter->NdisAdapterHandle;
>   }
>   
> +ULONG
> +AdapterGetNblMaxBatchSize(
> +    IN  PXENNET_ADAPTER     Adapter
> +    )
> +{
> +    ULONG val = (ULONG)Adapter->Properties.nblbatchmax;
> +    if (val == 0 || val > NBL_BATCH_SIZE_MAX)
> +        return NBL_BATCH_SIZE_DEFAULT;
> +    return val;
> +}
> +
>   PXENVIF_VIF_INTERFACE
>   AdapterGetVifInterface(
>       IN  PXENNET_ADAPTER     Adapter
> @@ -2939,6 +2951,7 @@ AdapterGetAdvancedSettings(
>       READ_PROPERTY(Adapter->Properties.need_csum_value, 
> L"NeedChecksumValue", 1, Handle);
>       READ_PROPERTY(Adapter->Properties.rss, L"*RSS", 1, Handle);
>       READ_PROPERTY(Adapter->Properties.numrssqueues, L"*NumRSSQueues", 8, 
> Handle);
> +    READ_PROPERTY(Adapter->Properties.nblbatchmax, L"NblBatchMax", 
> NBL_BATCH_SIZE_DEFAULT, Handle);
>   
>       NdisCloseConfiguration(Handle);
>   
> diff --git a/src/xennet/adapter.h b/src/xennet/adapter.h
> index 2ea0345..a54cb4d 100644
> --- a/src/xennet/adapter.h
> +++ b/src/xennet/adapter.h
> @@ -121,4 +121,12 @@ AdapterQueryInformation(
>       IN  PNDIS_OID_REQUEST   Request
>       );
>   
> +#define NBL_BATCH_SIZE_DEFAULT  32
> +#define NBL_BATCH_SIZE_MAX      64

Is there a method to know what's the ideal NBL batching size?



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech

 


Rackspace

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