Leggere in inglese

Condividi tramite


Requisiti per la gestione del completamento dei KPI ND

I consumatori NDK e i fornitori NDK devono rispettare questi requisiti per la gestione del completamento NDKPI.

Regole per le funzioni NdkGetCqResults, NdkGetCqResultsEx e NdkArmCq

Il consumatore serializzerà sempre le chiamate a queste funzioni del provider sulla stessa coda di completamento (CQ) (NDK_CQ):

Ciò significa non solo che il consumer non chiamerà mai la stessa funzione provider più volte contemporaneamente, ma anche che non chiamerà mai alcuna combinazione di queste funzioni simultaneamente sullo stesso CQ da più thread.

Un completamento NdkOperationTypeReceiveAndInvalidate che avviene in seguito a una chiamata remota NdkSendAndInvalidate (NDK_FN_SEND_AND_INVALIDATE) deve poter essere comunque recuperato usando NdkGetCqResults (non NdkGetCqResultsExn). Questa operazione deve comunque invalidare il token specificato nel ricevitore, ma non informerà il consumer ricevente di questa invalidazione (il consumer deve usare NdkGetCqResultsEx per ottenere queste informazioni). Un NdkInvalidate successivo (NDK_FN_INVALIDATE) per lo stesso token avrà esito negativo, come di consueto.

Regole per i callback delle notifiche

Il provider deve chiamare il callback NdkCqNotificationCallback (NDK_FN_CQ_NOTIFICATION_CALLBACK) una sola volta, e solo dopo che il consumer ha armato il callback NdkCqNotificationCallback chiamando NdkArmCq. Ovvero, il provider deve abilitare il processo e chiamare la callback NdkCqNotificationCallback quando le condizioni per la chiamata della callback NdkCqNotificationCallback si verificano (in altre parole, quando i completamenti delle richieste vengono accodati nel CQ).

Se nel CQ sono già presenti completamenti quando il consumer chiama NdkArmCq, il provider si comporta come segue:

  • Se almeno uno dei completamenti è stato appena inserito in CQ dall'ultimo NdkCqNotificationCallback callback è stato chiamato, il provider deve soddisfare immediatamente la richiesta arm (vedere di seguito per i requisiti di serializzazione).
  • Tuttavia, se tutti i completamenti nel CQ erano presenti anche quando l'ultimo NdkCqNotificationCallback callback è stato chiamato (in altre parole, il consumer ha chiamato NdkArmCq senza rimuovere tutti i completamenti e non sono stati inseriti nuovi completamenti nel CQ), il provider può soddisfare immediatamente la richiesta arm.

Quando il provider deve chiamare il callback NdkCqNotificationCallback, se è già in corso un callback NdkCqNotificationCallback, il provider deve rinviare l'invocazione del callback NdkCqNotificationCallback fino a quando la chiamata esistente al callback NdkCqNotificationCallback restituisce il controllo al provider. In altre parole, il provider è responsabile della serializzazione dei callback NdkCqNotificationCallback.

Nella tabella seguente è illustrato il tipo di braccio risultante se NdkArmCq viene chiamato una seconda volta prima che la precedente richiesta NdkArmCq venga soddisfatta:

2° braccio QUALSIASI ERRORI del 2° braccio 2° braccio richiesto

1° braccio ANY

QUALUNQUE

QUALUNQUE

QUALUNQUE

ERRORI del 1° braccio

QUALUNQUE

ERRORI

SOLLECITATO

1° braccio RICHIESTO

QUALUNQUE

SOLLECITATO

SOLLECITATO

Interfaccia del Fornitore del Kernel di Rete Diretta (NDKPI)