2016-07-16 1 views
0

côté client:Problème avec ibv_poll_cq() et ib_poll_cq()

ib_poll_cq(cq,1,&wc){ 
    if(wc.status == IB_WC_SUCCESS) 
     printk("Successful\n"); 
    else 
     printk("Failure: %d\n", wc.status); 
} 

côté serveur:

do { 
    num_comp = ibv_poll_cq(s_ctx.recv_cq, 1, &wc); 
} while (num_comp == 0); 

Le côté client est écrit dans l'espace du noyau et côté serveur est écrit dans l'espace utilisateur. Le wc.status renvoie 12. Quels pourraient être les problèmes possibles avec cela?

Répondre

3

Une valeur de 12 dans wc.status signifie que l'erreur de nouvelle tentative s'est produite. Cela signifie que le noeud qui a vu l'erreur (appelons-le local) a essayé d'envoyer ou d'effectuer une opération RDMA et n'a pas reçu de réponse de l'autre noeud. Cela peut se produire si le QP distant n'a pas été configuré correctement pour être dans l'état RTR avec ses paramètres correspondant aux paramètres du QP local. Vous trouverez des détails sur les différents codes ibv_wc dans ce code blog post.

+0

Le paramètre ib_poll_cq définit le paramètre we.status sur 12 et le paramètre ibv_poll_cq définit wc sur une valeur indésirable (par exemple, 432882). –

+0

Quelle a été la valeur renvoyée par ibv_poll_cq? –

+0

retourne toujours 0. mais wc.status renvoie la valeur indésirable. –