On Thu, May 09, 2019 at 02:27:10PM +0200, Gerd Hoffmann wrote: > > For the sake of the specification I think we need to focus on is how to > > transport these streams and how to share a configuration for each one. > > I think we need at least three virt queues. One control queue for > commands (query capabilities, set configuration, start/stop streams, > volume control, ...). One queue for input streams. One queue for > output streams. > > If we want allow for multiple inputs/outputs we have basically two > options: (a) one queue per stream, or (b) use a small header for each > data packet, telling what stream it belongs to. > > Maybe a small header is a good idea anyway, for timestamps. I agree with the 3 virtqueue layout. Multiplexing streams over a single input/output virtqueue pair has pros and cons. Overall I think it's a good fit though: + Number of streams can change at runtime (virtqueues are static!) + Easy to handle multiple inputs/outputs + Ability to synchronize streams, including transferring buffers for multiple streams in a single message with a single timestamp - Virtqueue must be sized to handle maximum simultaneous streams without running out of descriptors - Extra latency (jitter) and locking requirements due to sharing virtqueues between streams even if they are processed on different vCPUs Stefan