Skip to contentSkip to conversation

ibv_fork_init() question

DISCUSSION Steve Wise 2 participants 2 messages Feb 27, 2012 1 message not in the archive InfiniBand

lore
Share & tools
lore

Steve Wise

author
#0 lore raw

Hey Roland,

I'm experimenting with doing RDMA operations from a child process and I have a question. My application calls ibv_fork_init() at startup (first thing in main()) and it succeeds, and I see, for instance, that libibverbs has initialized mm_root. Next my application registers page-aligned memory that is 8KB in size. The memory was allocated with memalign(). Then the app sets up a connection to an RDMA peer. Next the application calls fork(). The parent does a wait() and the child does an rdma read operation into this registered memory from a valid mr of the peer. The read succeeds from the rdma device perspective. But when the child process tries to read the memory (to verify the rdma operation worked), I get a seg fault.

Q: Am I doing something incorrect here? I can't find much documentation on how this all should work.

Thanks!

Steve.

--
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): 4F4BDF8D.7070902-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org

#2 lore raw
Quoted 11 lines · Steve Wise

I'm experimenting with doing RDMA operations from a child process and I have a question.  My application calls ibv_fork_init() at startup (first thing in main())  and it succeeds, and I see, for instance, that libibverbs has initialized mm_root.  Next my application registers page-aligned memory that is 8KB in size.  The memory was allocated with memalign().  Then the app sets up a connection to an RDMA peer.  Next the application calls fork(). The parent does a wait() and the child does an rdma read operation into this registered memory from a valid mr of the peer.  The read succeeds from the rdma device perspective.  But when the child process tries to read the memory (to verify the rdma operation worked), I get a seg fault.

Quoted 2 lines

Q: Am I doing something incorrect here?  I can't find much documentation on how this all should work.

Yeah, unfortunately this isn't really intended to work and I don't have a good suggestion on how to make it work.

Even with the libibverbs fork support, the expectation is that all RDMA stuff will be done from the master process. All that the ibv_fork_init() call does is trigger tracking so that the address space that is used for RDMA isn't mapped into the child process at all.

So yeah, what you see happening is exactly what I would expect.

- R.
--
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