(2013/11/28 19:46), Richardson, Bruce wrote: >> If someone wants to implement forwarding application that receives >> packets from ETH_A and send those to ETH_B. >> Also above application is split to 3 processes like following. >> [ETH_A]-->Process_A --> [Ring_A] --> Process_B --> [Ring_B] --> Process_C -- >>> [ETH_B] (All 3 processes are implemented using PMD) >> At present, to implement Process_B might be difficult or tricky because ring >> can't be distinguished. >> >> I guess all virtual eth device like ring and pcap should have MAC address. >> And It should be possible to specify MAC address from command line. >> If so, DPDK application can distinguish all ports using MAC address even if >> port corresponds virtual eth device. > [BR] Actually, the way the ring pmd is implemented is designed to take > account of this multi-process scenario in a slightly different way. > > Firstly, the ethernet device numbers used are always per-process, which is > why in the multiprocess case, we still do a load of the ethernet drivers and > a pci probe on initialization of secondary processes. Any ring PMDs created > by passing EAL parameters to a process are therefore local to that process > alone. To use the ring-based PMD to exchange packets between two processes, > the APIs of the ring PMD should be used directly by the app, instead of via > the EAL commandline. The rings should be directly created in the app, e.g. in > process A, using rte_ring_create(), and then, if you need a PMD interface to > the ring, you call the rte_eth_from_rings() API. Then in process B, you use > rte_ring_lookup() to get the pointer to the ring(s) you wish to use, and > again call rte_eth_from_ring() to similarly wrap that into an eth_dev > structure. > > (Now, it's also worth noting that you may pay a very small performance > penalty for not using the ring APIs directly, since the ring enqueue and > dequeue functions are direct function calls that often can be inlined by the > compiler. Using the rings through an eth_dev API gives you API consistency, > but it means that the ring enqueue and dequeue is done via function pointers, > which means the calls cannot be inlined directly.)
Thanks Richardson, I understand how to use the RIng PMD in above case. Tetsuya Mukawa