Understanding vma multi tread tuning and what are rings?

Hello community.

I got some questions.

We are using mellanox with libvma for getting Market Data from exchanges.

For example we got 4 igmp v3 subscriptions.

I tried to use vma with isolcpus and cpusets for it but it always using first core from cpuset lists (for example 0-4).

So the questions are:

  1. how to correct understand what is rings? (I mean ring allocations)

  2. What is the best practice for using vma as multi treads? I mean should it be on the same core as listening socket or not?

  3. How does vma works with data? Does it send all by rdma to ram, or it using multiply treads for parsing data?

  4. How we can tell vma use different cores for different subscriptions?

  5. Does vma sending data to other cores by L3 cpu cache?