RDMA CM + XRC, take two
RFC 1/1 RDMA CM + XRC, take two
Hello,
This is an improved version of my previous patch to add XRC support to RDMA CM.
This version now support the newer rdma CM interface. It needs some polishing but it works.
It modifies the rdma_client/server examples to use xrc instead of rc.
The big hack is that the SRQ number needs to be transmitted to the remote side. This patch hijacks the private data, so it's not acceptable. Ideally the SRQ number should be transmitted either in the REQ or REP packet (depending on which side the sender or the receiver) alongside the QP number. But that would need a change in the specs. Any suggestions ?
Also a good chunk of the patch is to deal with the XRC verbs API. I wonder whether XRC could/should be more integrated into the existing verbs:
- sender should not need a domain,
- there should be 2 types of xrc QPs (send and receive) instead of one,
- *_xrc_rcv_qp verbs should be abstracted under the cover in libibverbs,
Regards,
frank.
examples/rdma_client.c +2 -7
@@ -52,6 +52,7 @@memset (&hints,0 ,sizeof hints); hints.ai_port_space =RDMA_PS_TCP ; + hints.ai_qp_type =IBV_QPT_XRC ; ret =rdma_getaddrinfo (server, port, &hints, &res);if (ret) {printf ("rdma_getaddrinfo %d\n" , errno);
@@ -77,12 +78,6 @@return ret; } - ret =rdma_post_recv (id,NULL , recv_msg,16 , mr); -if (ret) { -printf ("rdma_post_recv %d\n" , errno); -return ret; - } - ret =rdma_connect (id,NULL );if (ret) {printf ("rdma_connect %d\n" , errno);
@@ -95,7 +90,7 @@return ret; } - ret =rdma_get_recv_comp (id, &wc); + ret =rdma_get_send_comp (id, &wc);if (ret <=0 ) {printf ("rdma_get_recv_comp %d\n" , ret);return ret;
examples/rdma_server.c +4 -14
@@ -53,6 +53,7 @@memset (&hints,0 ,sizeof hints); hints.ai_flags =RAI_PASSIVE ; hints.ai_port_space =RDMA_PS_TCP ; + hints.ai_qp_type =IBV_QPT_XRC ; ret =rdma_getaddrinfo (NULL , port, &hints, &res);if (ret) {printf ("rdma_getaddrinfo %d\n" , errno);
@@ -60,7 +61,8 @@ }memset (&attr,0 ,sizeof attr); - attr.cap.max_send_wr = attr.cap.max_recv_wr =1 ; + attr.cap.max_send_wr =0 ;/* means XRC receive */ + attr.cap.max_recv_wr =1 ; attr.cap.max_send_sge = attr.cap.max_recv_sge =1 ; attr.cap.max_inline_data =16 ; attr.sq_sig_all =1 ;
@@ -97,7 +99,7 @@ ret =rdma_accept (id,NULL );if (ret) { -printf ("rdma_connect %d\n" , errno); +printf ("rdma_accept %d\n" , errno);return ret; }
@@ -107,18 +109,6 @@return ret; } - ret =rdma_post_send (id,NULL , send_msg,16 ,NULL ,IBV_SEND_INLINE ); -if (ret) { -printf ("rdma_post_send %d\n" , errno); -return ret; - } - - ret =rdma_get_send_comp (id, &wc); -if (ret <=0 ) { -printf ("rdma_get_send_comp %d\n" , ret); -return ret; - } -rdma_disconnect (id);rdma_dereg_mr (mr);rdma_destroy_ep (id);
include/rdma/rdma_cma.h +8 -0
@@ -125,6 +125,14 @@struct ibv_cq *send_cq;struct ibv_comp_channel *recv_cq_channel;struct ibv_cq *recv_cq; + +/* XRC support */ +struct ibv_xrc_domain *xrc_domain; +struct ibv_srq *xrc_srq;/* if receive side */ +union { +uint32_t xrc_rcv_qpn;/* if receive side */ +uint32_t xrc_srq_num;/* if send side */ + }; };enum {
include/rdma/rdma_verbs.h +7 -0
@@ -57,7 +57,10 @@static inline struct ibv_mr *rdma_reg_msgs (struct rdma_cm_id *id,void *addr,size_t length) { +if (id->qp)return ibv_reg_mr (id->qp->pd, addr, length,IBV_ACCESS_LOCAL_WRITE ); +else +return ibv_reg_mr (id->xrc_srq->pd, addr, length,IBV_ACCESS_LOCAL_WRITE ); } static inline struct ibv_mr *
@@ -96,7 +99,10 @@ wr.sg_list = sgl; wr.num_sge = nsge; +if (id->qp)return rdma_seterrno (ibv_post_recv (id->qp, &wr, &bad)); +else +return rdma_seterrno (ibv_post_srq_recv (id->xrc_srq, &wr, &bad)); } static inline int
@@ -111,6 +117,7 @@ wr.num_sge = nsge; wr.opcode =IBV_WR_SEND ; wr.send_flags = flags; + wr.xrc_remote_srq_num = id->xrc_srq_num;return rdma_seterrno (ibv_post_send (id->qp, &wr, &bad)); }
man/rdma_create_qp.3 +4 -0
@@ -40,6 +40,10 @@ channels. Completion channels and CQ data created by the rdma_cm are exposed to the user through the rdma_cm_id structure. .P +To create an XRC receive QP, and in addition to the XRC QP type, +ibv_qp_init_attr.cap.max_send_wr must be set to 0. Conversely, to +create the XRC send QP, that attribute must be non-zero. +.P The actual capabilities and properties of the created QP will be returned to the user through the qp_init_attr parameter. .SH "SEE ALSO"
src/addrinfo.c +6 -2
@@ -82,7 +82,8 @@ ai->ai_next =NULL ; } -static int ucma_convert_to_rai (struct rdma_addrinfo *rai,struct addrinfo *ai) +static int ucma_convert_to_rai (struct rdma_addrinfo *rai,struct addrinfo *ai, +struct rdma_addrinfo *hints) {struct sockaddr *addr;char *canonname;
@@ -91,6 +92,9 @@switch (ai->ai_socktype) {case SOCK_STREAM : +if (hints && hints->ai_qp_type ==IBV_QPT_XRC ) + rai->ai_qp_type =IBV_QPT_XRC ; +else rai->ai_qp_type =IBV_QPT_RC ;break ;case SOCK_DGRAM :
@@ -149,7 +153,7 @@if (ret)return ret; - ret =ucma_convert_to_rai (rai, ai); + ret =ucma_convert_to_rai (rai, ai, hints);freeaddrinfo (ai);return ret; }
src/cma.c +176 -24
365 lines not on this page · raw message
A message that is not in the archive (sent off-list or not yet received): 4DC86BB2.1020002-klaOcWyJdxkshyMvu7JE4pqQE7yCjDx5@public.gmane.org
Quoted 2 lines
This is an improved version of my previous patch to add XRC support to RDMA CM.
I would still like to see support merged upstream and into mainline libibverbs before applying this to my tree.
Quoted 2 lines
This version now support the newer rdma CM interface. It needs some polishing but it works.
It's hard to comment on the patch as an attachment. In several places, if/else statements were added, but indentation was not added to the opposite part of the statement. There was also a rather large amount of code added to rdma_create_qp() that needs to be split into a separate function. (I dislike functions longer than a screen.)
Quoted 7 lines
It modifies the rdma_client/server examples to use xrc instead of rc.
The big hack is that the SRQ number needs to be transmitted to the remote side. This patch hijacks the private data, so it's not acceptable. Ideally the SRQ number should be transmitted either in the REQ or REP packet (depending on which side the sender or the receiver) alongside the QP number. But that would need a change in the specs. Any suggestions ?
What are the QPNs carried in the REQ and REP?
Quoted 2 lines
Also a good chunk of the patch is to deal with the XRC verbs API. I wonder whether XRC could/should be more integrated into the existing verbs:
That would be my preference. I'm not familiar with the OFED XRC interfaces, so I'm only going off of the annex.
Quoted 1 line
- sender should not need a domain,
Hiding the xrc domain with the pd might help prevent breaking the user space ABI.
Quoted 1 line
- there should be 2 types of xrc QPs (send and receive) instead of one,
I've thought of this as well, and think it may also help prevent breaking the ABI.
- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1828884A29C6694DAF28B7E6B8A82373BBE2-P5GAC/[email protected]
Hello Sean,
Quoted 4 lines · Sean
Quoted 2 lines
This is an improved version of my previous patch to add XRC support to RDMA CM.
I would still like to see support merged upstream and into mainline libibverbs before applying this to my tree.
Agreed.
Quoted 5 lines
Quoted 3 lines
This version now support the newer rdma CM interface. It needs some polishing but it works.
It's hard to comment on the patch as an attachment. In several places, if/else statements were added, but indentation was not added to the opposite part of the statement. There was also a rather large amount of code added to
rdma_create_qp()that needs to be split into a separate function. (I dislike functions longer than a screen.)
Sorry for that attachment. I tried several time to post inline patches but was always getting a mangled patch. I'll address you comments in a new patch.
Quoted 10 lines
Quoted 8 lines
It modifies the rdma_client/server examples to use xrc instead of rc.
The big hack is that the SRQ number needs to be transmitted to the remote side. This patch hijacks the private data, so it's not acceptable. Ideally the SRQ number should be transmitted either in the REQ or REP packet (depending on which side the sender or the receiver) alongside the QP number. But that would need a change in the specs. Any suggestions ?
What are the QPNs carried in the REQ and REP?
Those for the XRC QPs. Same as a for regular RC connection.
Frank.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 4DCAA047.2040904-klaOcWyJdxkshyMvu7JE4pqQE7yCjDx5@public.gmane.org
Quoted 3 lines
Quoted 1 line
What are the QPNs carried in the REQ and REP?
Those for the XRC QPs. Same as a for regular RC connection.
I guess I need to go back and study the specs more to understand why the QPN is in the REQ.
The REQ/REP also carry EECN fields which might be usable here, and maybe that was the intent.
- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1828884A29C6694DAF28B7E6B8A82373BC59-P5GAC/[email protected]
Quoted 5 lines · Sean
Quoted 3 lines
Quoted 1 line
What are the QPNs carried in the REQ and REP?
Those for the XRC QPs. Same as a for regular RC connection.
I guess I need to go back and study the specs more to understand why the QPN is in the REQ.
I looked at the kernel headers; struct cm_req_msg and cm_rep_msg, and they both contain the QP numbers.
Quoted 2 lines
The REQ/REP also carry EECN fields which might be usable here, and maybe that was the intent.
The XRC spec does not make room for the srq number. Which implies it's left to the application to transmit it.
Frank.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 4DCAD746.7050606-klaOcWyJdxkshyMvu7JE4pqQE7yCjDx5@public.gmane.org
Quoted 5 lines
Quoted 1 line
I guess I need to go back and study the specs more to understand why the
QPN is in the REQ.
I looked at the kernel headers; struct
cm_req_msgandcm_rep_msg, and they both contain the QP numbers.
I was referring only to *why* the XRC TGT QP needed to know the XRC INI QPN (at a conceptual level). I think it's for control messages.
Quoted 5 lines
Quoted 1 line
The REQ/REP also carry EECN fields which might be usable here, and maybe
that was the intent.
The XRC spec does not make room for the srq number. Which implies it's left to the application to transmit it.
Agreed - I was wondering if using the EECN would work, but I don't think that it does. There would typically be multiple SRQs targeted by a single XRC INI->TGT connection. Maybe SIDR could be adopted for this purpose as the standard discovery technique.
- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1828884A29C6694DAF28B7E6B8A82373BE79-P5GAC/[email protected]
There is a connection between the ini and TFT qps they have to exchange qpns so that they can check them later The sewn is also sent and used to route messages to the srq at the target
Sent from my iPhone
Quoted 14 lines · Sean
Quoted 5 lines
Quoted 1 line
I guess I need to go back and study the specs more to understand why the
QPN is in the REQ.
I looked at the kernel headers; struct
cm_req_msgandcm_rep_msg, and they both contain the QP numbers.I was referring only to *why* the XRC TGT QP needed to know the XRC INI QPN (at a conceptual level). I think it's for control messages.
Quoted 5 lines
Quoted 1 line
The REQ/REP also carry EECN fields which might be usable here, and maybe
that was the intent.
The XRC spec does not make room for the srq number. Which implies it's left to the application to transmit it.
Quoted 7 lines
Agreed - I was wondering if using the EECN would work, but I don't think that it does. There would typically be multiple SRQs targeted by a single XRC
INI->TGTconnection. Maybe SIDR could be adopted for this purpose as the standard discovery technique.- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 9ECD201D-0CD8-4339-81E0-163FC130C705-klaOcWyJdxkshyMvu7JE4pqQE7yCjDx5@public.gmane.org
Sewn was supposed to be srqn but got spell checked
Sent from my iPhone
Quoted 28 lines · Bob Pearson
There is a connection between the ini and TFT qps they have to exchange qpns so that they can check them later The sewn is also sent and used to route messages to the srq at the target
Sent from my iPhone
Quoted 14 lines · Sean
Quoted 5 lines
Quoted 1 line
I guess I need to go back and study the specs more to understand why the
QPN is in the REQ.
I looked at the kernel headers; struct
cm_req_msgandcm_rep_msg, and they both contain the QP numbers.I was referring only to *why* the XRC TGT QP needed to know the XRC INI QPN (at a conceptual level). I think it's for control messages.
Quoted 5 lines
Quoted 1 line
The REQ/REP also carry EECN fields which might be usable here, and maybe
that was the intent.
The XRC spec does not make room for the srq number. Which implies it's left to the application to transmit it.
Quoted 7 lines
Agreed - I was wondering if using the EECN would work, but I don't think that it does. There would typically be multiple SRQs targeted by a single XRC
INI->TGTconnection. Maybe SIDR could be adopted for this purpose as the standard discovery technique.- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 4 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 2 lines
There is a connection between the ini and TFT qps they have to exchange qpns so that they can check them later
Speaking of connecting the XRC INI/TGT QPs, how is this being done? I don't see any patches to the IB CM to support XRC in Roland's git tree. Is the setup of XRC expected to be done through proprietary means?
Btw, the libibverbs APIs to support XRC look entirely confusing to me. For as much as the MPI developers have complained about how complicated it is to connect over RDMA, I'm surprised that they're adopting them. Is there documentation somewhere that describes ALL of the steps needed to connect using XRC?
- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 11 lines
The big hack is that the SRQ number needs to be transmitted to the remote side. This patch hijacks the private data, so it's not acceptable. Ideally the SRQ number should be transmitted either in the REQ or REP packet (depending on which side the sender or the receiver) alongside the QP number. But that would need a change in the specs. Any suggestions ?
Also a good chunk of the patch is to deal with the XRC verbs API. I wonder whether XRC could/should be more integrated into the existing verbs:
- sender should not need a domain,
- there should be 2 types of xrc QPs (send and receive) instead of one,
-*_xrc_rcv_qpverbs should be abstracted under the cover in libibverbs,
I've spent some time reading over the XRC patches in Roland's git tree and the XRC patches to OFED's version of libibverbs. These are some of the ideas that I've jotted down to support XRC through the librdmacm and mainline libibverbs, in no specific order. (There may very well be implementation issues with these.)
1. The IB CM needs to be updated to connect XRC INI QPs to XRC TGT QPs. This should be fairly simple.
2. As mentioned, there's no standard way of obtaining the SRQN. I will submit a comment to the IBTA on this. My recommendation will be to use the IB CM SIDR protocol. 2a. As an optimization, the IB CM REP could optionally return an SRQN in the EECN.
2b. It may be useful if the SIDR REQ carried the XRC INI/TGT QPNs
3. I don't see an easy way to hide the 'XRC domain'. However, if I look at the existing libibverbs and librdmacm APIs, it may be simpler for the user and API compatibility if it were abstracted behind a PD (struct ibv_pd). For example, a kernel XRC domain could be created the first time an XRC object is allocated on a PD. In order to share an XRC domain among multiple processes, we would need a new call (ibv_share_pd? ibv_modify_pd?).
4. There doesn't seem to be a strong reason to expose the XRC TGT QP to user space. A kernel XRC component could accept and manage XRC target connections.
5. Assuming that XRC TGT QP is not exposed, libibverbs would use IBV_QPT_XRC only as the send side QP. In order to support this QPT through the librdmacm, we would need to know what port space XRC QPs use, to know what SID range to map to, if any. I will submit a comment to the IBTA on how XRC makes use of the RDMA IP CM Service.
6. The XRC SRQ is more troubling to fit under the existing APIs. The one idea I had was to treat the XRC SRQ as a QP (struct ibv_qp) rather than like an SRQ (struct ibv_srq). This would require defining an IBV_QPT_SRQ type. The SRQN ends up being a QPN for all purposes, though I don't know if this would cause other issues if the SRQNs and real QPNs overlap.
With these changes, the librdmacm usage model would be:
Passive side:
rdma_create_ep() /* qp_type = IBV_QPT_SRQ */ rdma_listen() /* listen for SIDR REQ */ rdma_get_cm_event() rdma_accept()
Active side:
rdma_getaddrinfo() /* qp_type = IBV_QPT_XRC */ rdma_create_ep()
rdma_connect() /* connects to XRC TGT QP */
rdma_getaddrinfo() /* qp_type = IBV_QPT_SRQ */ rdma_create_ep()
rdma_connect() /* resolves XRC SRQN */
This doesn't include code necessary to share the 'XRC domain' among multiple processes on the passive side. On the passive side, the kernel XRC component would respond to IB CM REQs based on whether there was an associated SRQ listen.
I realize this model would deviate from the OFED libibverbs APIs, but I don't want to break the librdmacm ABI, or necessarily add an entire new set of APIs just to support XRC.
- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1828884A29C6694DAF28B7E6B8A82373F23B-P5GAC/[email protected]
Some comments but first I glad this is getting attention
Frank managed to get xrc to work with user space rdmacm without any changes to ibcm. This probably depends on faking ibcm into acting like it is connecting an rc qp but it just worked
After trying to combine srqn exchange with req/rep I think it should be separate. As you also seem to do.
The typical use case foe xrc is for lots of related processes on each node. In this case it would be helpful to cache these to avoid P^2 effects. The CM seems like a nice place to do this. The usual problem is knowing when to stop.
I'm not thrilled with 3. Seems to me like these concepts don't merge well.
The idea behind the implementation is to let apps use the file system permissions to control who can join. Whatever we do has to preserve this.
My thumbs are wearing out more later
Bob
Sent from my iPhone
Quoted 48 lines · Sean
Quoted 11 lines
The big hack is that the SRQ number needs to be transmitted to the remote side. This patch hijacks the private data, so it's not acceptable. Ideally the SRQ number should be transmitted either in the REQ or REP packet (depending on which side the sender or the receiver) alongside the QP number. But that would need a change in the specs. Any suggestions ?
Also a good chunk of the patch is to deal with the XRC verbs API. I wonder whether XRC could/should be more integrated into the existing verbs:
- sender should not need a domain,
- there should be 2 types of xrc QPs (send and receive) instead of one,
-*_xrc_rcv_qpverbs should be abstracted under the cover in libibverbs,I've spent some time reading over the XRC patches in Roland's git tree and the XRC patches to OFED's version of libibverbs. These are some of the ideas that I've jotted down to support XRC through the librdmacm and mainline libibverbs, in no specific order. (There may very well be implementation issues with these.)
1. The IB CM needs to be updated to connect XRC INI QPs to XRC TGT QPs. This should be fairly simple.
2. As mentioned, there's no standard way of obtaining the SRQN. I will submit a comment to the IBTA on this. My recommendation will be to use the IB CM SIDR protocol. 2a. As an optimization, the IB CM REP could optionally return an SRQN in the EECN.
2b. It may be useful if the SIDR REQ carried the XRC INI/TGT QPNs3. I don't see an easy way to hide the 'XRC domain'. However, if I look at the existing libibverbs and librdmacm APIs, it may be simpler for the user and API compatibility if it were abstracted behind a PD (struct
ibv_pd). For example, a kernel XRC domain could be created the first time an XRC object is allocated on a PD. In order to share an XRC domain among multiple processes, we would need a new call (ibv_share_pd?ibv_modify_pd?).4. There doesn't seem to be a strong reason to expose the XRC TGT QP to user space. A kernel XRC component could accept and manage XRC target connections.
5. Assuming that XRC TGT QP is not exposed, libibverbs would use
IBV_QPT_XRConly as the send side QP. In order to support this QPT through the librdmacm, we would need to know what port space XRC QPs use, to know what SID range to map to, if any. I will submit a comment to the IBTA on how XRC makes use of the RDMA IP CM Service.6. The XRC SRQ is more troubling to fit under the existing APIs. The one idea I had was to treat the XRC SRQ as a QP (struct
ibv_qp) rather than like an SRQ (structibv_srq). This would require defining anIBV_QPT_SRQtype. The SRQN ends up being a QPN for all purposes, though I don't know if this would cause other issues if the SRQNs and real QPNs overlap.With these changes, the librdmacm usage model would be:
Passive side:
rdma_create_ep() /* qp_type = IBV_QPT_SRQ */ rdma_listen() /* listen for SIDR REQ */ rdma_get_cm_event() rdma_accept()Active side:
rdma_getaddrinfo()/*qp_type=IBV_QPT_XRC*/
rdma_create_ep()
rdma_connect()/* connects to XRC TGT QP */
rdma_getaddrinfo()/*qp_type=IBV_QPT_SRQ*/
rdma_create_ep()
rdma_connect()/* resolves XRC SRQN */This doesn't include code necessary to share the 'XRC domain' among multiple processes on the passive side. On the passive side, the kernel XRC component would respond to IB CM REQs based on whether there was an associated SRQ listen.
Quoted 7 lines
I realize this model would deviate from the OFED libibverbs APIs, but I don't want to break the librdmacm ABI, or necessarily add an entire new set of APIs just to support XRC.
- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 984CAD75-D012-4725-B294-99B1AF32E49B-klaOcWyJdxkshyMvu7JE4pqQE7yCjDx5@public.gmane.org
Quoted 4 lines
The typical use case foe xrc is for lots of related processes on each node. In this case it would be helpful to cache these to avoid P^2 effects. The CM seems like a nice place to do this. The usual problem is knowing when to stop.
After your thumb recovers, I could use more details here. I didn't follow what you were trying to say.
Quoted 3 lines
I'm not thrilled with 3. Seems to me like these concepts don't merge well. The idea behind the implementation is to let apps use the file system permissions to control who can join. Whatever we do has to preserve this.
I agree with using the file system permissions. This was the reason behind adding some new call like ibv_share_pd().
In hindsight, the APIs could have been simpler if we had just hid the PD entirely. I'd hate to make it worse by having two 'protection domain' objects. We end up adding new function parameters and structure fields. How many apps allocate more than 1 PD or XRC domain per device?
- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html