C2C, DDS and NvSciIPC

There are many synchronization/communication methods on Drive OS platform. For example, C2C, DDS, NvSciIPC all claim to provide inter-SoC (Xavier) communication. What is the relationship among them? Which one to use? Thanks!

Dear VerySimple,

I believe you already read the below docs.
Is there any specific user case for this topic? Thanks.

https://docs.nvidia.com/drive/active/5.1.6.0L/nvvib_docs/index.html#page/DRIVE_OS_Linux_SDK_Development_Guide%2FGraphics%2Fnvsci_nvscisync.html
https://docs.nvidia.com/drive/active/5.1.6.0L/nvvib_docs/index.html#page/DRIVE_OS_Linux_SDK_Development_Guide%2FGraphics%2Fnvsci_nvsciipc.html%23
https://docs.nvidia.com/drive/active/5.1.6.0L/nvvib_docs/DRIVE_OS_Linux_SDK_Development_Guide/baggage/Open_Data_Distribution_for_LNX_User_Guide.pdf

Yes I have read these docs thus have this question.

My use case is very general. Suppose we have application code in both Xavier and they are talking to each other via some kind of Synchronization. Also they may talk to other modules in the same Xavier. It seems all of these synchronization (C2C, DDS, NvSciIPC) are promising. But my question is, which one should I use and why?

Thanks

Any update from NVIDIA please? Thanks!

Dear VerySimple,

I’d like to clarify if you are using 5.1.6.0 Linux PDK or not.
Please refer to below for this topic. Thanks.

  • DDS DDS can be used to transfer data from one VM to another in a multi-virtual machine environment. The configuration of these use cases is similar to intra-VM use cases, except the two different sessions for publisher and subscriber belong to different VMs or SoCs.
  • NvStreams The NVIDIA SDK provides several different libraries (NvMedia, CUDA, OpenGL) for generating and processing various types of images and higher dimensional data. The interfaces used by these libraries were written independently to serve different needs, and each has its own means of representing memory and synchronization resources. There is no direct way to exchange data between them. Furthermore, most of the details of how and when resources used by these libraries are allocated is hidden from the application(s). The NvSci libraries serve two primary purposes:

    • They allow resources to be allocated up front, with access restrictions defined by the application(s), and with details of their overall requirements well understood. This is vital for safety-critical systems that must ensure the availability of resources and proper encapsulation of information.
    • They allow resources to be exchanged between libraries that otherwise do not have knowledge of each other.

    This document describes three libraries. NvSciBuf allows applications to allocate and exchange buffers in memory. NvSciSync allows applications to manage synchronization objects that coordinate when sequence of operations begin and end. NvSciStream layers on NvSciBuf and NvSciSync to provide utilities for streaming sequences of data packets between multiple application modules to support a wide variety of use cases. These libraries also make use of NvSciIpc for inter-process/partition/system communication.
    https://docs.nvidia.com/drive/active/5.1.6.0L/nvvib_docs/index.html#page/DRIVE_OS_Linux_SDK_Development_Guide%2FGraphics%2Fnvsci.html%23
    https://docs.nvidia.com/drive/active/5.1.6.0L/nvvib_docs/index.html#page/DRIVE_OS_Linux_SDK_Development_Guide%2FGraphics%2Fnvsci_nvscistream.html

  • C2C Chip to Chip communication framework provides mechanism for two SoCs to communicate with each other over PCIe backbone.