Peer Shared Receive Queues and Peer Shared Completion Queus #8118
Replies: 1 comment 4 replies
-
I believe that we are moving to a highly composable peer model. Within a year, I expect we'll be combining 3-4 providers together to act as one. The peer model got more complex with the addition of offload providers, and I expect it will get worse. Realistically, any provider that is going to pair with another one will implement everything that it needs. And we will know up front what peer combinations we'll want. Trying to handle this through a dynamic query is a recipe for unneeded complexity. We have a bounded set of peers we're working with. I want to replace all of the FI_PEER_ bits with a single FI_PEER bit, not add more. We're consuming too many capabilities bits. Applications should not use FI_PEER bits, nor try to control libfabric internal architecture through the public API. An srx is not 'bound' to a domain like it is an endpoint. It's allocated, and that allocation is restricted to a domain. This is the same as for CQs. There can be multiple srx's/CQs allocated per domain. An endpoint is attached to an srx/CQ. This is the same flow used by applications through the main API. The peer allocates the srx, cq, ep, etc. the same as an app, and binds them the same as an app. We can argue whether a domain should only allow the creation of a single srx and cq, but that's an API 2.0 discussion. The srx that is allocated is a normal srx (i.e. FI_CLASS_SRX_CTX). It's attached to the ep's the same as other srx's are attached. The FI_CLASS_PEER_SRX is the object that's imported by the peer as the void *context parameter, it's not what gets attached to the ep's. |
Beta Was this translation helpful? Give feedback.
-
I have a few comments/questions, which might or might not have been addressed before
PEER_SRX Capability
Shared Receive Queues vs Shared Completion Queues Workflow
I was initially under the impression that setting up SRQ and SCQ will be symmetric
However SRQ setup is broken up into multiple steps:
I'm not sure of the benefit in that workflow? Do you see a scenario where you can have multiple endpoints, some with SRX enabled and others not?
If that's not the case, then why are we not binding the SRX to the domain via fi_srx_context() and then when endpoints are created they inherit the SRX from the domain?
If you want multiple different endpoints some with SRX and others not, then it would make sense to have different domains in that case. no?
Can you please explain the benefit of binding the SRX to the endpoint explicitly vs the endpoint inheriting the SRX from the domain. The inheritance method, I believe, does have precedent.
SRX Binding to Endpoint
In the current implementation binding an SRX to an end point is done under the FI_CLASS_SRX_CTX. Why is it not done under FI_CLASS_PEER_SRX? Isn't that the purpose of the latter? And shouldn't the peer srx operations be under its own class?
Although, I don't think we should bind at all as mentioned in my point above.
Beta Was this translation helpful? Give feedback.
All reactions