Il giorno ven 8 apr 2022 alle ore 16:36 Ferruh Yigit < ferruh.yigit@xilinx.com> ha scritto: > On 4/8/2022 2:26 PM, Dmitry Kozlyuk wrote: > > CAUTION: This message has originated from an External Source. Please use > proper judgment and caution when opening attachments, clicking links, or > responding to this email. > > > > > > 2022-04-08 14:31 (UTC+0200), Antonio Di Bacco: > >> I know that it is possible to share memory between a primary and > secondary > >> process using rte_memzone_reserve_aligned to allocate memory in primary > >> that is "seen" also by the secondary. If we have two primary processes > >> (started with different file-prefix) the same approach is not feasible. > I > >> wonder how to share a chunk of memory hosted on a hugepage between two > >> primaries. > >> > >> Regards. > > > > Hi Antonio, > > > > Correction: all hugepages allocated by DPDK are shared > > between primary and secondary processes, not only memzones. > > > > I assume we're talking about processes within one host, > > because your previous similar question was about sharing memory between > hosts > > (as we have discussed offline), which is out of scope for DPDK. > > > > As for the question directly, you need to map the same part of the same > file > > in the second primary as the hugepage is mapped from in the first > primary. > > I don't recommend to work with file paths, because their management > > is not straightforward (--single-file-segments, for one) and is > undocumented. > > > > There is a way to share DPDK memory segment file descriptors. > > Although public, this DPDK API is dangerous in the sense that you must > > clearly understand what you're doing and how DPDK works. > > Hence the question: what is the task you need this sharing for? > > Maybe there is a simpler way. > > > > 1. In the first primary: > > > > mz = rte_memzone_reserve() > > ms = rte_mem_virt2memseg(mz->addr) > > fd = rte_memseg_get_fd(ms) > > offset = rte_memseg_get_fd_offset(ms) > > > > 2. Use Unix domain sockets with SCM_RIGHTS > > to send "fd" and "offset" to the second primary. > > > > 3. In the second primary, after receiving "fd" and "offset": > > > > flags = MAP_SHARED | MAP_HUGE | (30 << MAP_HUGE_SHIFT) > > addr = mmap(fd, offset, flags) > > > > Note that "mz" may consist of multiple "ms" depending on the sizes > > of the zone and hugepages, and on the zone alignment. > > Also "addr" may (and probably will) differ from "mz->addr". > > It is possible to pass "mz->addr" and try to force it, > > like DPDK does for primary/secondary. > > > > Also 'net/memif' driver can be used: > https://doc.dpdk.org/guides/nics/memif.html Yes, I know about memif. Our application is currently using a chunk of shared memory, a primary process writes on it and a secondary reads from it. Now the secondary will become a primary, sort of a promotion, and MEMIF would be fine but the paradigm should change a little bit compared to a shared memory approach. MEMIF is an interface over a shared memory, we would need the opposite, a shared memory over a network interface. Thank you.