Direct Shared Memory Transport

Direct publishers and direct subscribers can use a direct shared memory transport to communicate within the same host computer. Direct shared memory transports are peer-to-peer transports similar to shared memory transports, with some additional restrictions. They communicate at high speeds and exhibit extremely low latency.

Direct publishers and direct subscribers require direct shared memory transports. Direct shared memory transports yield fast communication among processes that use direct publishers and direct subscribers within a multi-core hardware host computer.

Direct shared memory transport definitions are inherently unitary.

Parameters

Direct shared memory transports use the same set of parameters as shared memory transports. For details, see Shared Memory Transport: Parameters Reference.

Topology

The natural topology of a direct shared memory bus is a hub-and-spoke topology, in which a single direct publisher object at the hub sends to potentially many direct subscriber objects.

All of the endpoints can create direct subscribers on the bus, and a process can even create many direct subscribers.

A suite of application processes that communicate over a direct shared memory bus may contain only one direct publisher object at a time. It is the shared responsibility of the application developers and the administrators to ensure this condition.

For example, suppose application process A1 creates a direct publisher, DP1. A1 may not ever create another direct publisher object. Furthermore, before a new process, A2, can create a direct publisher on the bus, A1 must close DP1, and A1 must exit.

Uniqueness

If you implement an endpoint with a direct shared memory transport, it must be the only transport definition that implements that endpoint.

Size

The default size of the shared memory segment is 1 megabyte. For best results, use the default size. Larger sizes can result in significant backlog, which can increase latency.

The minimum size is also 1 megabyte.

Blocking and Non-Blocking Send

Direct shared memory transports support either blocking or non-blocking send.

When one or more direct subscribers are slower than a direct publisher, the shared memory segment can become full:
  • Blocking - When the administrator has configured blocking send, the direct publisher’s reserve call blocks until the direct subscribers consume the data, which frees up memory to reserve more buffers.
  • Non-Blocking - When the administrator has configured non-blocking send, the direct publisher discards older data buffers, so it can reuse their memory to reserve new buffers. Slow consumers cannot access the discarded buffers. The base library reports data loss advisories to slow consumers.