One host buffer per SmartNIC per stream
In 3GD, the application/API cannot directly control which host buffers are attached to which streams and when merging is done by the driver. This is configured automatically, based on the NTPL commands that are active and which SmartNICs they involve.
In general, the NTPL “engine” will only utilize one host buffer per SmartNIC for each stream in an NTPL command – making the SmartNIC do as much of the merging as possible. If multiple SmartNICs are involved in an NTPL command, each SmartNIC involved uses one host buffer per stream, and merging of these host buffers (one from each SmartNIC involved) into the specified stream is done by the driver.
In some specific user scenarios it is beneficial to get packets from multiple filters merged into one stream by executing multiple NTPL commands that add packets to the same stream(s). However, this still utilizes only one host buffer per SmartNIC per stream.
As a consequence, if an application thread wants to use multi-CPU distribution to get a share of some data and get this share merged in received order with some other data that is shared with other application threads, data must be merged in software. This is due to the architecture of 3GD where multi-CPU distribution is controlled (configured) through NTPL and handled by the SmartNIC, whereas sharing is controlled exclusively through the API by letting multiple application threads open the same stream.