On 12.02.2016 09:00, Ilya Maximets wrote:
> Hi, Flavio.
> 
> Comment inlined.
> 
> On 12.02.2016 07:44, Flavio Leitner wrote:
>>
>> Hi Ilya,
>>
>> On Thu, 11 Feb 2016 16:04:12 +0300
>> Ilya Maximets <i.maxim...@samsung.com> wrote:
>>
>>> Currently virtio driver in guest operating system have to be configured
>>> to use exactly same number of queues. If number of queues will be less,
>>> some packets will get stuck in queues unused by guest and will not be
>>> received.
>>>
>>> Fix that by using new 'vring_state_changed' callback, which is
>>> available for vhost-user since DPDK 2.2.
>>> Implementation uses additional mapping from configured tx queues to
>>> enabled by virtio driver. This requires mandatory locking of TX queues
>>> in __netdev_dpdk_vhost_send(), but this locking was almost always anyway
>>> because of calling set_multiq with n_txq = 'ovs_numa_get_n_cores() + 1'.
>>>
>>> Fixes: 4573fbd38fa1 ("netdev-dpdk: Add vhost-user multiqueue support")
>>> Signed-off-by: Ilya Maximets <i.maxim...@samsung.com>
>>> ---
>>>  lib/netdev-dpdk.c | 108 
>>> +++++++++++++++++++++++++++++++++++++++++++++++-------
>>>  1 file changed, 95 insertions(+), 13 deletions(-)
>>>
>>> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
>>> index e4f789b..f04f2bd 100644
>>> --- a/lib/netdev-dpdk.c
>>> +++ b/lib/netdev-dpdk.c
>>> @@ -173,6 +173,8 @@ struct dpdk_tx_queue {
>>>                                      * from concurrent access.  It is used 
>>> only
>>>                                      * if the queue is shared among 
>>> different
>>>                                      * pmd threads (see 
>>> 'txq_needs_locking'). */
>>> +    int map;                       /* Mapping of configured vhost-user 
>>> queues
>>> +                                    * to enabled by guest. */
>>>      uint64_t tsc;
>>>      struct rte_mbuf *burst_pkts[MAX_TX_QUEUE_LEN];
>>>  };
>>> @@ -559,6 +561,13 @@ netdev_dpdk_alloc_txq(struct netdev_dpdk *netdev, 
>>> unsigned int n_txqs)
>>>      unsigned i;
>>>  
>>>      netdev->tx_q = dpdk_rte_mzalloc(n_txqs * sizeof *netdev->tx_q);
>>> +
>>> +    if (netdev->type == DPDK_DEV_VHOST) {
>>> +        for (i = 0; i < n_txqs; i++) {
>>> +            netdev->tx_q[i].map = -1;
>>> +        }
>>> +    }
>>> +
>>
>> There is the same loop down below which initializes other
>> queue variables, so the above could be included in the latter loop:
>>
>>       for (i = 0; i < n_txqs; i++) {
>>            int numa_id = ovs_numa_get_numa_id(i);
>>
>>            if (!netdev->txq_needs_locking) {
>>               netdev->tx_q[i].flush_tx = netdev->socket_id == numa_id;
>>            } else {
>>               netdev->tx_q[i].flush_tx = true;
>>            }
>>
>>            /* initialize map for vhost devices */
>>            netdev->tx_q[i].map = -1;
>>            rte_spinlock_init(&netdev->tx_q[i].tx_lock);
>>       }
>>
>> It seems cleaner to me, but I have no strong opinion here.
> 
> Yes, I think you're right. I'll send v2 with this fix.
> Thanks for review.
> 
>>
>> I had a plan to actually change how many TX queues we are allocating
>> which then would allow to not use locking at all.   The reason for having
>> n_txq = 'ovs_numa_get_n_cores() + 1' is to make sure that regardless the
>> core that the PMD is running, we would have an unique TX queue.  Since
>> you proposed the patch to have sequential queue ids, we wouldn't need to
>> allocate that many queues anymore.
> 
> To make send lockless we need number of queues not less than number of
> PMD threads. But this number is still may be bigger than number of actual
> queues in device. I think, it's better to make dpdk_send for vhost thread
> safe.

I meant, make rte_vhost_dequeue_burst/rte_vhost_enqueue_burst thread safe.

> 
> Best regards, Ilya Maximets.
> 
>>
>> Anyway, this patch is more important and it works for me.
>>
>> Acked-by: Flavio Leitner <f...@sysclose.org>
>>
>> This should go in 2.5 but I am not sure how much time we have left for
>> the actual release.
>>
>> Thanks,
>>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to