Hi Maxim, I think we need a real spec, maybe API extension for IPC pktio to be extendable to platforms with HW acceleration, otherwise it will be just a linux generic implementation feature. The test application cannot be a itself a spec. I think the following assumptions cannot be imposed or work in all cases in a HW accelerated environment, various operating environments, etc: - IPC pktio requires processes with a direct parent - child relationship - a packet pool is by default shared between two ODP processes/applications (one creates a packet pool, the other gets it by name) - memory backing up a packet pool created by an application can always be mapped in other application memory space
Thanks, Alex On 31 August 2015 at 13:48, Maxim Uvarov <maxim.uva...@linaro.org> wrote: > On 08/31/15 12:05, Alexandru Badicioiu wrote: > >> Hi Maxim, >> I'd ask some questions related to the testing application: >> >> https://git.linaro.org/people/maxim.uvarov/odp.git/blob/8c749b3fd6e0a3715e06c262d85244aa180dd204:/platform/linux-generic/test/pktio_ipc/pktio_ipc.c >> which probably shows how an IPC pktio would be typically used : >> >> - is "ipc_pktio" the solely id for an IPC pktio ? Is it possible to have >> more than 1 IPC pktio ? Is the IPC pktio meant for 1 to 1 duplex data >> exchange? >> > > For now it's only linux-generic specific ipc pktio. You can open several > pktios odp_pktio_open("ipc_1", ), odp_pktio_open("ipc_2", ), > odp_pktio_open("ipc_3", ) and etc. > All of them represented as shared memory. Second process can connect to > that ipc_2, ipc_2. Several slave processes can connect to one ipc_1 for > example. So > it's duplex exchange over several processes where one of the process has > to be master (to create shared memory blocks.). > > > - it looks like the implicit assumption is that the pool created by the >> main process and used to open IPC pktio is shared automatically with the >> child process as the child process is able to copy data from the packet it >> receives from IPC pktio >> > The plan was to not modify API, in that case pool is shared automatically. > Slave process copies packet in recv() to not handle in it. When packet > reference counters will be implemented then we can avoid this coping and > simple reference to packet memory of another process. Because of > linux-generic is not performance critical I will postpone that tunning. > > - there is a comment mentioning a "local pool" for the child process but I >> can't find any reference to it in the application code - is it something >> that is supposed to be hidden into implementation? >> > > Yes, that is hided. First process needs access to second process packets > also. And that is done in way that second process creates the same pool as > master (i.e. same parameters like number and size of segments). Then second > pool is mapped to first process. Because original plan was to now modify > api, reference to that pool is hided inside implementation. > > Maxim. > > >> Thanks, >> Alex >> >> >> >> >> On 31 August 2015 at 11:11, Maxim Uvarov <maxim.uva...@linaro.org >> <mailto:maxim.uva...@linaro.org>> wrote: >> >> ping. >> >> On 08/18/15 14:01, Maxim Uvarov wrote: >> >> v8: - make pktio ipc internal pktio for linux-generic; >> - place validation test for pktio ipc inside linux-generic; >> - move odp_ring and odp_pause from helpers inside >> linux-generic; >> - cleanup checkpatch errors in ring code. >> >> v7: - 1. do pool_create things more accurate. Pass shm flags >> internal where is needed. >> Do not allocate shm before because Bill already posted >> patch to remove shm from >> odp_pool_create. >> 2. Rework example application: remove time stamps. Add >> sequence counter and magic >> numbers, print packets per second. >> >> v6: Fix Ciprian comments for v5: >> - update patches to current HEAD; >> - fix segfault on cold start (not share schedule pool); >> - rename rings name to better understanding; >> - comment variables in the code; >> - update code to new checkpatch.pl <http://checkpatch.pl >> >; >> Fix Ola's comment to not use sleep() in example. >> >> >> Maxim Uvarov (12): >> linux-generic: zero params for pool create >> api ipc: update ring with shm proc argument >> linux-generic: create internal pool create function with >> shm flags >> move odph_pause inside linux-generic >> helper: flag to not link ring to linked list >> linux-generic: move odp_ring from helper to linux-generic >> platfrom >> linux-generic: rename odph_ring.., to shm_ring... >> linux-generic: ring: remove ODPH_ prefix >> linux-generic: rename to ring >> linux-generic: ring_test.c fix code style errors >> linux-generic: add ipc pktio support >> linux-generic: internal ipc_pktio test >> >> configure.ac <http://configure.ac> | 1 - >> >> helper/Makefile.am | 8 +- >> helper/test/Makefile.am | 4 +- >> helper/test/odph_pause.c | 14 - >> platform/linux-generic/Makefile.am | 3 + >> .../linux-generic/include/odp_buffer_internal.h | 3 + >> .../linux-generic/include/odp_packet_io_internal.h | 33 ++ >> .../include/odp_packet_io_ipc_internal.h | 51 ++ >> .../linux-generic/include/odp_pause_internal.h | 0 >> platform/linux-generic/include/odp_pool_internal.h | 4 + >> .../linux-generic/include/odp_ring_internal.h | 88 +-- >> platform/linux-generic/include/odp_shm_internal.h | 20 + >> platform/linux-generic/m4/configure.m4 | 4 +- >> platform/linux-generic/odp_packet_io.c | 1 + >> platform/linux-generic/odp_pool.c | 22 +- >> platform/linux-generic/odp_schedule.c | 4 +- >> platform/linux-generic/odp_shared_memory.c | 10 +- >> platform/linux-generic/pktio/io_ops.c | 1 + >> platform/linux-generic/pktio/ipc.c | 629 +++++++++++++++++++++ >> {helper => platform/linux-generic/pktio}/ring.c | 190 ++++--- >> platform/linux-generic/test/Makefile.am | 4 +- >> platform/linux-generic/test/pktio_ipc/.gitignore | 1 + >> platform/linux-generic/test/pktio_ipc/Makefile.am | 11 + >> platform/linux-generic/test/pktio_ipc/pktio_ipc.c | 595 >> +++++++++++++++++++ >> .../linux-generic/test/pktio_ipc/pktio_ipc_run | 68 +++ >> platform/linux-generic/test/ring/.gitignore | 1 + >> platform/linux-generic/test/ring/Makefile.am | 14 + >> .../linux-generic/test/ring}/odp_common.c | 0 >> .../linux-generic/test/ring}/odp_common.h | 0 >> .../linux-generic/test/ring/ring_test.c | 109 ++-- >> test/Makefile.am | 2 +- >> test/api_test/.gitignore | 2 - >> test/api_test/Makefile.am | 13 - >> test/validation/queue/queue.c | 1 + >> 34 files changed, 1671 insertions(+), 240 deletions(-) >> delete mode 100644 helper/test/odph_pause.c >> create mode 100644 >> platform/linux-generic/include/odp_packet_io_ipc_internal.h >> rename helper/odph_pause.h => >> platform/linux-generic/include/odp_pause_internal.h (100%) >> rename helper/include/odp/helper/ring.h => >> platform/linux-generic/include/odp_ring_internal.h (87%) >> create mode 100644 >> platform/linux-generic/include/odp_shm_internal.h >> create mode 100644 platform/linux-generic/pktio/ipc.c >> rename {helper => platform/linux-generic/pktio}/ring.c (74%) >> create mode 100644 >> platform/linux-generic/test/pktio_ipc/.gitignore >> create mode 100644 >> platform/linux-generic/test/pktio_ipc/Makefile.am >> create mode 100644 >> platform/linux-generic/test/pktio_ipc/pktio_ipc.c >> create mode 100755 >> platform/linux-generic/test/pktio_ipc/pktio_ipc_run >> create mode 100644 platform/linux-generic/test/ring/.gitignore >> create mode 100644 platform/linux-generic/test/ring/Makefile.am >> rename {test/api_test => >> platform/linux-generic/test/ring}/odp_common.c (100%) >> rename {test/api_test => >> platform/linux-generic/test/ring}/odp_common.h (100%) >> rename test/api_test/odp_ring_test.c => >> platform/linux-generic/test/ring/ring_test.c (80%) >> delete mode 100644 test/api_test/.gitignore >> delete mode 100644 test/api_test/Makefile.am >> >> >> _______________________________________________ >> lng-odp mailing list >> lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org> >> https://lists.linaro.org/mailman/listinfo/lng-odp >> >> >> >
_______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp