DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
@ 2016-04-05 16:09 Ciara Loftus
  2016-04-06  5:03 ` Yuanhan Liu
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Ciara Loftus @ 2016-04-05 16:09 UTC (permalink / raw)
  To: dev; +Cc: mukawa

After some testing, it was found that retrieving numa information
about a vhost device via a call to get_mempolicy is more
accurate when performed during the new_device callback versus
the vring_state_changed callback, in particular upon initial boot
of the VM.  Performing this check during new_device is also
potentially more efficient as this callback is only triggered once
during device initialisation, compared with vring_state_changed
which may be called multiple times depending on the number of
queues assigned to the device.

Reorganise the code to perform this check and assign the correct
socket_id to the device during the new_device callback.

Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
---
 drivers/net/vhost/rte_eth_vhost.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
index 4cc6bec..b1eb082 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -229,6 +229,9 @@ new_device(struct virtio_net *dev)
 	struct pmd_internal *internal;
 	struct vhost_queue *vq;
 	unsigned i;
+#ifdef RTE_LIBRTE_VHOST_NUMA
+	int newnode, ret;
+#endif
 
 	if (dev == NULL) {
 		RTE_LOG(INFO, PMD, "Invalid argument\n");
@@ -244,6 +247,17 @@ new_device(struct virtio_net *dev)
 	eth_dev = list->eth_dev;
 	internal = eth_dev->data->dev_private;
 
+#ifdef RTE_LIBRTE_VHOST_NUMA
+	ret  = get_mempolicy(&newnode, NULL, 0, dev,
+			MPOL_F_NODE | MPOL_F_ADDR);
+	if (ret < 0) {
+		RTE_LOG(ERR, PMD, "Unknown numa node\n");
+		return -1;
+	}
+
+	eth_dev->data->numa_node = newnode;
+#endif
+
 	for (i = 0; i < eth_dev->data->nb_rx_queues; i++) {
 		vq = eth_dev->data->rx_queues[i];
 		if (vq == NULL)
@@ -352,9 +366,6 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable)
 	struct rte_vhost_vring_state *state;
 	struct rte_eth_dev *eth_dev;
 	struct internal_list *list;
-#ifdef RTE_LIBRTE_VHOST_NUMA
-	int newnode, ret;
-#endif
 
 	if (dev == NULL) {
 		RTE_LOG(ERR, PMD, "Invalid argument\n");
@@ -370,17 +381,6 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable)
 	eth_dev = list->eth_dev;
 	/* won't be NULL */
 	state = vring_states[eth_dev->data->port_id];
-
-#ifdef RTE_LIBRTE_VHOST_NUMA
-	ret  = get_mempolicy(&newnode, NULL, 0, dev,
-			MPOL_F_NODE | MPOL_F_ADDR);
-	if (ret < 0) {
-		RTE_LOG(ERR, PMD, "Unknown numa node\n");
-		return -1;
-	}
-
-	eth_dev->data->numa_node = newnode;
-#endif
 	rte_spinlock_lock(&state->lock);
 	state->cur[vring] = enable;
 	state->max_vring = RTE_MAX(vring, state->max_vring);
-- 
2.4.3

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-05 16:09 [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD Ciara Loftus
@ 2016-04-06  5:03 ` Yuanhan Liu
  2016-04-06 16:45   ` Thomas Monjalon
  2016-04-06  5:32 ` Tan, Jianfeng
  2016-04-06  6:49 ` Tetsuya Mukawa
  2 siblings, 1 reply; 15+ messages in thread
From: Yuanhan Liu @ 2016-04-06  5:03 UTC (permalink / raw)
  To: Ciara Loftus; +Cc: dev, mukawa

On Tue, Apr 05, 2016 at 05:09:47PM +0100, Ciara Loftus wrote:
> After some testing, it was found that retrieving numa information
> about a vhost device via a call to get_mempolicy is more
> accurate when performed during the new_device callback versus
> the vring_state_changed callback, in particular upon initial boot
> of the VM.  Performing this check during new_device is also
> potentially more efficient as this callback is only triggered once
> during device initialisation, compared with vring_state_changed
> which may be called multiple times depending on the number of
> queues assigned to the device.
> 
> Reorganise the code to perform this check and assign the correct
> socket_id to the device during the new_device callback.
> 
> Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
> ---

Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>

	--yliu

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-05 16:09 [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD Ciara Loftus
  2016-04-06  5:03 ` Yuanhan Liu
@ 2016-04-06  5:32 ` Tan, Jianfeng
  2016-04-06  5:44   ` Yuanhan Liu
  2016-04-06  6:49 ` Tetsuya Mukawa
  2 siblings, 1 reply; 15+ messages in thread
From: Tan, Jianfeng @ 2016-04-06  5:32 UTC (permalink / raw)
  To: Ciara Loftus, dev; +Cc: mukawa

Hi,

Just out of interest, seems that the message handling thread which runs 
new_device() is pthread_create() from the thread which calls the 
dev_start(), usually master thread, right? But it's not necessary to be 
the master thread to poll pkts from this vhost port, right? So what's 
the significance to record the numa_node information of message handling 
thread here? Shall we make the decision of numa_realloc based on the 
final PMD thread who is responsible for polling this vhost port?

It's not related to this patch itself. And it seems good to me.


Thanks,
Jianfeng



On 4/6/2016 12:09 AM, Ciara Loftus wrote:
> After some testing, it was found that retrieving numa information
> about a vhost device via a call to get_mempolicy is more
> accurate when performed during the new_device callback versus
> the vring_state_changed callback, in particular upon initial boot
> of the VM.  Performing this check during new_device is also
> potentially more efficient as this callback is only triggered once
> during device initialisation, compared with vring_state_changed
> which may be called multiple times depending on the number of
> queues assigned to the device.
>
> Reorganise the code to perform this check and assign the correct
> socket_id to the device during the new_device callback.
>
> Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
> ---
>   drivers/net/vhost/rte_eth_vhost.c | 28 ++++++++++++++--------------
>   1 file changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
> index 4cc6bec..b1eb082 100644
> --- a/drivers/net/vhost/rte_eth_vhost.c
> +++ b/drivers/net/vhost/rte_eth_vhost.c
> @@ -229,6 +229,9 @@ new_device(struct virtio_net *dev)
>   	struct pmd_internal *internal;
>   	struct vhost_queue *vq;
>   	unsigned i;
> +#ifdef RTE_LIBRTE_VHOST_NUMA
> +	int newnode, ret;
> +#endif
>   
>   	if (dev == NULL) {
>   		RTE_LOG(INFO, PMD, "Invalid argument\n");
> @@ -244,6 +247,17 @@ new_device(struct virtio_net *dev)
>   	eth_dev = list->eth_dev;
>   	internal = eth_dev->data->dev_private;
>   
> +#ifdef RTE_LIBRTE_VHOST_NUMA
> +	ret  = get_mempolicy(&newnode, NULL, 0, dev,
> +			MPOL_F_NODE | MPOL_F_ADDR);
> +	if (ret < 0) {
> +		RTE_LOG(ERR, PMD, "Unknown numa node\n");
> +		return -1;
> +	}
> +
> +	eth_dev->data->numa_node = newnode;
> +#endif
> +
>   	for (i = 0; i < eth_dev->data->nb_rx_queues; i++) {
>   		vq = eth_dev->data->rx_queues[i];
>   		if (vq == NULL)
> @@ -352,9 +366,6 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable)
>   	struct rte_vhost_vring_state *state;
>   	struct rte_eth_dev *eth_dev;
>   	struct internal_list *list;
> -#ifdef RTE_LIBRTE_VHOST_NUMA
> -	int newnode, ret;
> -#endif
>   
>   	if (dev == NULL) {
>   		RTE_LOG(ERR, PMD, "Invalid argument\n");
> @@ -370,17 +381,6 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable)
>   	eth_dev = list->eth_dev;
>   	/* won't be NULL */
>   	state = vring_states[eth_dev->data->port_id];
> -
> -#ifdef RTE_LIBRTE_VHOST_NUMA
> -	ret  = get_mempolicy(&newnode, NULL, 0, dev,
> -			MPOL_F_NODE | MPOL_F_ADDR);
> -	if (ret < 0) {
> -		RTE_LOG(ERR, PMD, "Unknown numa node\n");
> -		return -1;
> -	}
> -
> -	eth_dev->data->numa_node = newnode;
> -#endif
>   	rte_spinlock_lock(&state->lock);
>   	state->cur[vring] = enable;
>   	state->max_vring = RTE_MAX(vring, state->max_vring);

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06  5:32 ` Tan, Jianfeng
@ 2016-04-06  5:44   ` Yuanhan Liu
  2016-04-06  6:05     ` Tan, Jianfeng
  0 siblings, 1 reply; 15+ messages in thread
From: Yuanhan Liu @ 2016-04-06  5:44 UTC (permalink / raw)
  To: Tan, Jianfeng; +Cc: Ciara Loftus, dev, mukawa

On Wed, Apr 06, 2016 at 01:32:12PM +0800, Tan, Jianfeng wrote:
> Hi,
> 
> Just out of interest, seems that the message handling thread which runs
> new_device() is pthread_create() from the thread which calls the
> dev_start(), usually master thread, right? But it's not necessary to be the
> master thread to poll pkts from this vhost port, right? So what's the
> significance to record the numa_node information of message handling thread
> here? Shall we make the decision of numa_realloc based on the final PMD
> thread who is responsible for polling this vhost port?

It doesn't matter on which core we made the decision: the result
would be same since we are querying the numa node info of the
virtio_net dev struct.

	--yliu
> 
> It's not related to this patch itself. And it seems good to me.
> 
> 
> Thanks,
> Jianfeng
> 
> 
> 
> On 4/6/2016 12:09 AM, Ciara Loftus wrote:
> >After some testing, it was found that retrieving numa information
> >about a vhost device via a call to get_mempolicy is more
> >accurate when performed during the new_device callback versus
> >the vring_state_changed callback, in particular upon initial boot
> >of the VM.  Performing this check during new_device is also
> >potentially more efficient as this callback is only triggered once
> >during device initialisation, compared with vring_state_changed
> >which may be called multiple times depending on the number of
> >queues assigned to the device.
> >
> >Reorganise the code to perform this check and assign the correct
> >socket_id to the device during the new_device callback.
> >
> >Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
> >---
> >  drivers/net/vhost/rte_eth_vhost.c | 28 ++++++++++++++--------------
> >  1 file changed, 14 insertions(+), 14 deletions(-)
> >
> >diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
> >index 4cc6bec..b1eb082 100644
> >--- a/drivers/net/vhost/rte_eth_vhost.c
> >+++ b/drivers/net/vhost/rte_eth_vhost.c
> >@@ -229,6 +229,9 @@ new_device(struct virtio_net *dev)
> >  	struct pmd_internal *internal;
> >  	struct vhost_queue *vq;
> >  	unsigned i;
> >+#ifdef RTE_LIBRTE_VHOST_NUMA
> >+	int newnode, ret;
> >+#endif
> >  	if (dev == NULL) {
> >  		RTE_LOG(INFO, PMD, "Invalid argument\n");
> >@@ -244,6 +247,17 @@ new_device(struct virtio_net *dev)
> >  	eth_dev = list->eth_dev;
> >  	internal = eth_dev->data->dev_private;
> >+#ifdef RTE_LIBRTE_VHOST_NUMA
> >+	ret  = get_mempolicy(&newnode, NULL, 0, dev,
> >+			MPOL_F_NODE | MPOL_F_ADDR);
> >+	if (ret < 0) {
> >+		RTE_LOG(ERR, PMD, "Unknown numa node\n");
> >+		return -1;
> >+	}
> >+
> >+	eth_dev->data->numa_node = newnode;
> >+#endif
> >+
> >  	for (i = 0; i < eth_dev->data->nb_rx_queues; i++) {
> >  		vq = eth_dev->data->rx_queues[i];
> >  		if (vq == NULL)
> >@@ -352,9 +366,6 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable)
> >  	struct rte_vhost_vring_state *state;
> >  	struct rte_eth_dev *eth_dev;
> >  	struct internal_list *list;
> >-#ifdef RTE_LIBRTE_VHOST_NUMA
> >-	int newnode, ret;
> >-#endif
> >  	if (dev == NULL) {
> >  		RTE_LOG(ERR, PMD, "Invalid argument\n");
> >@@ -370,17 +381,6 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable)
> >  	eth_dev = list->eth_dev;
> >  	/* won't be NULL */
> >  	state = vring_states[eth_dev->data->port_id];
> >-
> >-#ifdef RTE_LIBRTE_VHOST_NUMA
> >-	ret  = get_mempolicy(&newnode, NULL, 0, dev,
> >-			MPOL_F_NODE | MPOL_F_ADDR);
> >-	if (ret < 0) {
> >-		RTE_LOG(ERR, PMD, "Unknown numa node\n");
> >-		return -1;
> >-	}
> >-
> >-	eth_dev->data->numa_node = newnode;
> >-#endif
> >  	rte_spinlock_lock(&state->lock);
> >  	state->cur[vring] = enable;
> >  	state->max_vring = RTE_MAX(vring, state->max_vring);

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06  5:44   ` Yuanhan Liu
@ 2016-04-06  6:05     ` Tan, Jianfeng
  2016-04-06  6:17       ` Yuanhan Liu
  0 siblings, 1 reply; 15+ messages in thread
From: Tan, Jianfeng @ 2016-04-06  6:05 UTC (permalink / raw)
  To: Yuanhan Liu; +Cc: Ciara Loftus, dev, mukawa



On 4/6/2016 1:44 PM, Yuanhan Liu wrote:
> On Wed, Apr 06, 2016 at 01:32:12PM +0800, Tan, Jianfeng wrote:
>> Hi,
>>
>> Just out of interest, seems that the message handling thread which runs
>> new_device() is pthread_create() from the thread which calls the
>> dev_start(), usually master thread, right? But it's not necessary to be the
>> master thread to poll pkts from this vhost port, right? So what's the
>> significance to record the numa_node information of message handling thread
>> here? Shall we make the decision of numa_realloc based on the final PMD
>> thread who is responsible for polling this vhost port?
> It doesn't matter on which core we made the decision: the result
> would be same since we are querying the numa node info of the
> virtio_net dev struct.

OK, according to your hint, read numa_realloc() again, it's to keep *dev 
(struct virtio_net), *dev->virtqueue[], on the same numa socket of 
shared memory with virtio?

And numa_realloc() is called in vhost_set_vring_addr(), which is after 
new_device()?


>
> 	--yliu
>> It's not related to this patch itself. And it seems good to me.
>>
>>
>> Thanks,
>> Jianfeng
>>
>>
>>
>> On 4/6/2016 12:09 AM, Ciara Loftus wrote:
>>> After some testing, it was found that retrieving numa information
>>> about a vhost device via a call to get_mempolicy is more
>>> accurate when performed during the new_device callback versus
>>> the vring_state_changed callback, in particular upon initial boot
>>> of the VM.  Performing this check during new_device is also
>>> potentially more efficient as this callback is only triggered once
>>> during device initialisation, compared with vring_state_changed
>>> which may be called multiple times depending on the number of
>>> queues assigned to the device.
>>>
>>> Reorganise the code to perform this check and assign the correct
>>> socket_id to the device during the new_device callback.
>>>
>>> Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
>>> ---
>>>   drivers/net/vhost/rte_eth_vhost.c | 28 ++++++++++++++--------------
>>>   1 file changed, 14 insertions(+), 14 deletions(-)
>>>
>>> diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
>>> index 4cc6bec..b1eb082 100644
>>> --- a/drivers/net/vhost/rte_eth_vhost.c
>>> +++ b/drivers/net/vhost/rte_eth_vhost.c
>>> @@ -229,6 +229,9 @@ new_device(struct virtio_net *dev)
>>>   	struct pmd_internal *internal;
>>>   	struct vhost_queue *vq;
>>>   	unsigned i;
>>> +#ifdef RTE_LIBRTE_VHOST_NUMA
>>> +	int newnode, ret;
>>> +#endif
>>>   	if (dev == NULL) {
>>>   		RTE_LOG(INFO, PMD, "Invalid argument\n");
>>> @@ -244,6 +247,17 @@ new_device(struct virtio_net *dev)
>>>   	eth_dev = list->eth_dev;
>>>   	internal = eth_dev->data->dev_private;
>>> +#ifdef RTE_LIBRTE_VHOST_NUMA
>>> +	ret  = get_mempolicy(&newnode, NULL, 0, dev,
>>> +			MPOL_F_NODE | MPOL_F_ADDR);
>>> +	if (ret < 0) {
>>> +		RTE_LOG(ERR, PMD, "Unknown numa node\n");
>>> +		return -1;
>>> +	}
>>> +
>>> +	eth_dev->data->numa_node = newnode;

If it's correct of above analysis, dev, here, could be numa_realloc() later?

Thanks,
Jianfeng


>>> +#endif
>>> +
>>>   	for (i = 0; i < eth_dev->data->nb_rx_queues; i++) {
>>>   		vq = eth_dev->data->rx_queues[i];
>>>   		if (vq == NULL)
>>> @@ -352,9 +366,6 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable)
>>>   	struct rte_vhost_vring_state *state;
>>>   	struct rte_eth_dev *eth_dev;
>>>   	struct internal_list *list;
>>> -#ifdef RTE_LIBRTE_VHOST_NUMA
>>> -	int newnode, ret;
>>> -#endif
>>>   	if (dev == NULL) {
>>>   		RTE_LOG(ERR, PMD, "Invalid argument\n");
>>> @@ -370,17 +381,6 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable)
>>>   	eth_dev = list->eth_dev;
>>>   	/* won't be NULL */
>>>   	state = vring_states[eth_dev->data->port_id];
>>> -
>>> -#ifdef RTE_LIBRTE_VHOST_NUMA
>>> -	ret  = get_mempolicy(&newnode, NULL, 0, dev,
>>> -			MPOL_F_NODE | MPOL_F_ADDR);
>>> -	if (ret < 0) {
>>> -		RTE_LOG(ERR, PMD, "Unknown numa node\n");
>>> -		return -1;
>>> -	}
>>> -
>>> -	eth_dev->data->numa_node = newnode;
>>> -#endif
>>>   	rte_spinlock_lock(&state->lock);
>>>   	state->cur[vring] = enable;
>>>   	state->max_vring = RTE_MAX(vring, state->max_vring);

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06  6:05     ` Tan, Jianfeng
@ 2016-04-06  6:17       ` Yuanhan Liu
  2016-04-06  6:32         ` Tan, Jianfeng
  0 siblings, 1 reply; 15+ messages in thread
From: Yuanhan Liu @ 2016-04-06  6:17 UTC (permalink / raw)
  To: Tan, Jianfeng; +Cc: Ciara Loftus, dev, mukawa

On Wed, Apr 06, 2016 at 02:05:51PM +0800, Tan, Jianfeng wrote:
> 
> 
> On 4/6/2016 1:44 PM, Yuanhan Liu wrote:
> >On Wed, Apr 06, 2016 at 01:32:12PM +0800, Tan, Jianfeng wrote:
> >>Hi,
> >>
> >>Just out of interest, seems that the message handling thread which runs
> >>new_device() is pthread_create() from the thread which calls the
> >>dev_start(), usually master thread, right? But it's not necessary to be the
> >>master thread to poll pkts from this vhost port, right? So what's the
> >>significance to record the numa_node information of message handling thread
> >>here? Shall we make the decision of numa_realloc based on the final PMD
> >>thread who is responsible for polling this vhost port?
> >It doesn't matter on which core we made the decision: the result
> >would be same since we are querying the numa node info of the
> >virtio_net dev struct.
> 
> OK, according to your hint, read numa_realloc() again, it's to keep *dev
> (struct virtio_net), *dev->virtqueue[], on the same numa socket of shared
> memory with virtio?

Sort of, and I'm guessing that the comment have already made it clear?

    /*
     * Reallocate virtio_dev and vhost_virtqueue data structure to make them on the
     * same numa node as the memory of vring descriptor.
     */

> 
> And numa_realloc() is called in vhost_set_vring_addr(), which is after
> new_device()?

It's actually before new_device().

	--yliu

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06  6:17       ` Yuanhan Liu
@ 2016-04-06  6:32         ` Tan, Jianfeng
  0 siblings, 0 replies; 15+ messages in thread
From: Tan, Jianfeng @ 2016-04-06  6:32 UTC (permalink / raw)
  To: Yuanhan Liu; +Cc: Ciara Loftus, dev, mukawa



On 4/6/2016 2:17 PM, Yuanhan Liu wrote:
> On Wed, Apr 06, 2016 at 02:05:51PM +0800, Tan, Jianfeng wrote:
>>
>> On 4/6/2016 1:44 PM, Yuanhan Liu wrote:
>>> On Wed, Apr 06, 2016 at 01:32:12PM +0800, Tan, Jianfeng wrote:
>>>> Hi,
>>>>
>>>> Just out of interest, seems that the message handling thread which runs
>>>> new_device() is pthread_create() from the thread which calls the
>>>> dev_start(), usually master thread, right? But it's not necessary to be the
>>>> master thread to poll pkts from this vhost port, right? So what's the
>>>> significance to record the numa_node information of message handling thread
>>>> here? Shall we make the decision of numa_realloc based on the final PMD
>>>> thread who is responsible for polling this vhost port?
>>> It doesn't matter on which core we made the decision: the result
>>> would be same since we are querying the numa node info of the
>>> virtio_net dev struct.
>> OK, according to your hint, read numa_realloc() again, it's to keep *dev
>> (struct virtio_net), *dev->virtqueue[], on the same numa socket of shared
>> memory with virtio?
> Sort of, and I'm guessing that the comment have already made it clear?
>
>      /*
>       * Reallocate virtio_dev and vhost_virtqueue data structure to make them on the
>       * same numa node as the memory of vring descriptor.
>       */
>
>> And numa_realloc() is called in vhost_set_vring_addr(), which is after
>> new_device()?
> It's actually before new_device().
>
> 	--yliu

Yes, exactly as you said. Thanks for explanation!

Jianfeng

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-05 16:09 [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD Ciara Loftus
  2016-04-06  5:03 ` Yuanhan Liu
  2016-04-06  5:32 ` Tan, Jianfeng
@ 2016-04-06  6:49 ` Tetsuya Mukawa
  2016-04-06  7:17   ` Yuanhan Liu
  2 siblings, 1 reply; 15+ messages in thread
From: Tetsuya Mukawa @ 2016-04-06  6:49 UTC (permalink / raw)
  To: Ciara Loftus, dev; +Cc: Yuanhan Liu, Tan, Jianfeng

On 2016/04/06 1:09, Ciara Loftus wrote:
> After some testing, it was found that retrieving numa information
> about a vhost device via a call to get_mempolicy is more
> accurate when performed during the new_device callback versus
> the vring_state_changed callback, in particular upon initial boot
> of the VM.  Performing this check during new_device is also
> potentially more efficient as this callback is only triggered once
> during device initialisation, compared with vring_state_changed
> which may be called multiple times depending on the number of
> queues assigned to the device.
>
> Reorganise the code to perform this check and assign the correct
> socket_id to the device during the new_device callback.
>
> Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
> ---
>  drivers/net/vhost/rte_eth_vhost.c | 28 ++++++++++++++--------------
>  1 file changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
> index 4cc6bec..b1eb082 100644
> --- a/drivers/net/vhost/rte_eth_vhost.c
> +++ b/drivers/net/vhost/rte_eth_vhost.c
>

Hi,

I appreciate fixing it.
Just one worry is that state changed event may be occurred before new
device event.
The users should not call rte_eth_dev_socket_id() until new device event
comes, even if they catch queue state events.
Otherwise, they will get wrong socket id to call
rte_eth_rx/tx_queue_setup().

So how about commenting it in 'rte_eth_vhost.h'?

Thanks,
Tetsuya

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06  6:49 ` Tetsuya Mukawa
@ 2016-04-06  7:17   ` Yuanhan Liu
  2016-04-06  7:28     ` Tetsuya Mukawa
  2016-04-06  9:37     ` Loftus, Ciara
  0 siblings, 2 replies; 15+ messages in thread
From: Yuanhan Liu @ 2016-04-06  7:17 UTC (permalink / raw)
  To: Tetsuya Mukawa; +Cc: Ciara Loftus, dev, Tan, Jianfeng

On Wed, Apr 06, 2016 at 03:49:25PM +0900, Tetsuya Mukawa wrote:
> On 2016/04/06 1:09, Ciara Loftus wrote:
> > After some testing, it was found that retrieving numa information
> > about a vhost device via a call to get_mempolicy is more
> > accurate when performed during the new_device callback versus
> > the vring_state_changed callback, in particular upon initial boot
> > of the VM.  Performing this check during new_device is also
> > potentially more efficient as this callback is only triggered once
> > during device initialisation, compared with vring_state_changed
> > which may be called multiple times depending on the number of
> > queues assigned to the device.
> >
> > Reorganise the code to perform this check and assign the correct
> > socket_id to the device during the new_device callback.
> >
> > Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
> > ---
> >  drivers/net/vhost/rte_eth_vhost.c | 28 ++++++++++++++--------------
> >  1 file changed, 14 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
> > index 4cc6bec..b1eb082 100644
> > --- a/drivers/net/vhost/rte_eth_vhost.c
> > +++ b/drivers/net/vhost/rte_eth_vhost.c
> >
> 
> Hi,
> 
> I appreciate fixing it.
> Just one worry is that state changed event may be occurred before new
> device event.
> The users should not call rte_eth_dev_socket_id() until new device event
> comes, even if they catch queue state events.
> Otherwise, they will get wrong socket id to call
> rte_eth_rx/tx_queue_setup().

There is no way to guarantee that the socket id stuff would work
perfectly in vhost, right? I mean, it's likely that virtio device
would allocate memory from 2 or more sockets.

So, it doesn't matter too much whether it's set perfectly right
or not. Instead, we should assign it with a saner value instead
of a obvious wrong one when new_device() is not invoked yet. So,
I'd suggest to make an assignment first based on vhost_dev (or
whatever) struct, and then make it "right" at new_device()
callback?

> So how about commenting it in 'rte_eth_vhost.h'?

It asks a different usage than other PMDs, which I don't think
it's a good idea.

	--yliu

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06  7:17   ` Yuanhan Liu
@ 2016-04-06  7:28     ` Tetsuya Mukawa
  2016-04-06  9:37     ` Loftus, Ciara
  1 sibling, 0 replies; 15+ messages in thread
From: Tetsuya Mukawa @ 2016-04-06  7:28 UTC (permalink / raw)
  To: Yuanhan Liu; +Cc: Ciara Loftus, dev, Tan, Jianfeng

On 2016/04/06 16:17, Yuanhan Liu wrote:
> On Wed, Apr 06, 2016 at 03:49:25PM +0900, Tetsuya Mukawa wrote:
>> On 2016/04/06 1:09, Ciara Loftus wrote:
>>> After some testing, it was found that retrieving numa information
>>> about a vhost device via a call to get_mempolicy is more
>>> accurate when performed during the new_device callback versus
>>> the vring_state_changed callback, in particular upon initial boot
>>> of the VM.  Performing this check during new_device is also
>>> potentially more efficient as this callback is only triggered once
>>> during device initialisation, compared with vring_state_changed
>>> which may be called multiple times depending on the number of
>>> queues assigned to the device.
>>>
>>> Reorganise the code to perform this check and assign the correct
>>> socket_id to the device during the new_device callback.
>>>
>>> Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
>>> ---
>>>  drivers/net/vhost/rte_eth_vhost.c | 28 ++++++++++++++--------------
>>>  1 file changed, 14 insertions(+), 14 deletions(-)
>>>
>>> diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
>>> index 4cc6bec..b1eb082 100644
>>> --- a/drivers/net/vhost/rte_eth_vhost.c
>>> +++ b/drivers/net/vhost/rte_eth_vhost.c
>>>
>> Hi,
>>
>> I appreciate fixing it.
>> Just one worry is that state changed event may be occurred before new
>> device event.
>> The users should not call rte_eth_dev_socket_id() until new device event
>> comes, even if they catch queue state events.
>> Otherwise, they will get wrong socket id to call
>> rte_eth_rx/tx_queue_setup().
> There is no way to guarantee that the socket id stuff would work
> perfectly in vhost, right? I mean, it's likely that virtio device
> would allocate memory from 2 or more sockets.
>
> So, it doesn't matter too much whether it's set perfectly right
> or not. Instead, we should assign it with a saner value instead
> of a obvious wrong one when new_device() is not invoked yet. So,
> I'd suggest to make an assignment first based on vhost_dev (or
> whatever) struct, and then make it "right" at new_device()
> callback?

Yes, I agree with you idea.

Thanks,
Tetsuya

>> So how about commenting it in 'rte_eth_vhost.h'?
> It asks a different usage than other PMDs, which I don't think
> it's a good idea.
>
> 	--yliu

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06  7:17   ` Yuanhan Liu
  2016-04-06  7:28     ` Tetsuya Mukawa
@ 2016-04-06  9:37     ` Loftus, Ciara
  2016-04-06 16:09       ` Yuanhan Liu
  1 sibling, 1 reply; 15+ messages in thread
From: Loftus, Ciara @ 2016-04-06  9:37 UTC (permalink / raw)
  To: Yuanhan Liu, Tetsuya Mukawa; +Cc: dev, Tan, Jianfeng

> 
> On Wed, Apr 06, 2016 at 03:49:25PM +0900, Tetsuya Mukawa wrote:
> > On 2016/04/06 1:09, Ciara Loftus wrote:
> > > After some testing, it was found that retrieving numa information
> > > about a vhost device via a call to get_mempolicy is more
> > > accurate when performed during the new_device callback versus
> > > the vring_state_changed callback, in particular upon initial boot
> > > of the VM.  Performing this check during new_device is also
> > > potentially more efficient as this callback is only triggered once
> > > during device initialisation, compared with vring_state_changed
> > > which may be called multiple times depending on the number of
> > > queues assigned to the device.
> > >
> > > Reorganise the code to perform this check and assign the correct
> > > socket_id to the device during the new_device callback.
> > >
> > > Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
> > > ---
> > >  drivers/net/vhost/rte_eth_vhost.c | 28 ++++++++++++++--------------
> > >  1 file changed, 14 insertions(+), 14 deletions(-)
> > >
> > > diff --git a/drivers/net/vhost/rte_eth_vhost.c
> b/drivers/net/vhost/rte_eth_vhost.c
> > > index 4cc6bec..b1eb082 100644
> > > --- a/drivers/net/vhost/rte_eth_vhost.c
> > > +++ b/drivers/net/vhost/rte_eth_vhost.c
> > >
> >
> > Hi,
> >
> > I appreciate fixing it.
> > Just one worry is that state changed event may be occurred before new
> > device event.
> > The users should not call rte_eth_dev_socket_id() until new device event
> > comes, even if they catch queue state events.
> > Otherwise, they will get wrong socket id to call
> > rte_eth_rx/tx_queue_setup().
> 
> There is no way to guarantee that the socket id stuff would work
> perfectly in vhost, right? I mean, it's likely that virtio device
> would allocate memory from 2 or more sockets.
> 
> So, it doesn't matter too much whether it's set perfectly right
> or not. Instead, we should assign it with a saner value instead
> of a obvious wrong one when new_device() is not invoked yet. So,
> I'd suggest to make an assignment first based on vhost_dev (or
> whatever) struct, and then make it "right" at new_device()
> callback?

Thanks for the feedback.
At the moment with this patch numa_node is initially set to rte_socket_id() during  pmd init and then updated to the correct value during new_device.
Are you suggesting we set it again in between these two steps ("based on vhost_dev")? If so where do you think would be a good place?

Thanks,
Ciara

> 
> > So how about commenting it in 'rte_eth_vhost.h'?
> 
> It asks a different usage than other PMDs, which I don't think
> it's a good idea.
> 
> 	--yliu

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06  9:37     ` Loftus, Ciara
@ 2016-04-06 16:09       ` Yuanhan Liu
  2016-04-06 16:12         ` Thomas Monjalon
  0 siblings, 1 reply; 15+ messages in thread
From: Yuanhan Liu @ 2016-04-06 16:09 UTC (permalink / raw)
  To: Loftus, Ciara; +Cc: Tetsuya Mukawa, dev, Tan, Jianfeng

On Wed, Apr 06, 2016 at 09:37:53AM +0000, Loftus, Ciara wrote:
> > 
> > On Wed, Apr 06, 2016 at 03:49:25PM +0900, Tetsuya Mukawa wrote:
> > > On 2016/04/06 1:09, Ciara Loftus wrote:
> > > > After some testing, it was found that retrieving numa information
> > > > about a vhost device via a call to get_mempolicy is more
> > > > accurate when performed during the new_device callback versus
> > > > the vring_state_changed callback, in particular upon initial boot
> > > > of the VM.  Performing this check during new_device is also
> > > > potentially more efficient as this callback is only triggered once
> > > > during device initialisation, compared with vring_state_changed
> > > > which may be called multiple times depending on the number of
> > > > queues assigned to the device.
> > > >
> > > > Reorganise the code to perform this check and assign the correct
> > > > socket_id to the device during the new_device callback.
> > > >
> > > > Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
> > > > ---
> > > >  drivers/net/vhost/rte_eth_vhost.c | 28 ++++++++++++++--------------
> > > >  1 file changed, 14 insertions(+), 14 deletions(-)
> > > >
> > > > diff --git a/drivers/net/vhost/rte_eth_vhost.c
> > b/drivers/net/vhost/rte_eth_vhost.c
> > > > index 4cc6bec..b1eb082 100644
> > > > --- a/drivers/net/vhost/rte_eth_vhost.c
> > > > +++ b/drivers/net/vhost/rte_eth_vhost.c
> > > >
> > >
> > > Hi,
> > >
> > > I appreciate fixing it.
> > > Just one worry is that state changed event may be occurred before new
> > > device event.
> > > The users should not call rte_eth_dev_socket_id() until new device event
> > > comes, even if they catch queue state events.
> > > Otherwise, they will get wrong socket id to call
> > > rte_eth_rx/tx_queue_setup().
> > 
> > There is no way to guarantee that the socket id stuff would work
> > perfectly in vhost, right? I mean, it's likely that virtio device
> > would allocate memory from 2 or more sockets.
> > 
> > So, it doesn't matter too much whether it's set perfectly right
> > or not. Instead, we should assign it with a saner value instead
> > of a obvious wrong one when new_device() is not invoked yet. So,
> > I'd suggest to make an assignment first based on vhost_dev (or
> > whatever) struct, and then make it "right" at new_device()
> > callback?
> 
> Thanks for the feedback.
> At the moment with this patch numa_node is initially set to rte_socket_id() during  pmd init and then updated to the correct value during new_device.
> Are you suggesting we set it again in between these two steps ("based on vhost_dev")? If so where do you think would be a good place?

Oh, I was not aware of that. Then I think we are fine here.

	--yliu

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06 16:09       ` Yuanhan Liu
@ 2016-04-06 16:12         ` Thomas Monjalon
  2016-04-06 16:43           ` Yuanhan Liu
  0 siblings, 1 reply; 15+ messages in thread
From: Thomas Monjalon @ 2016-04-06 16:12 UTC (permalink / raw)
  To: Yuanhan Liu; +Cc: dev, Loftus, Ciara, Tetsuya Mukawa, Tan, Jianfeng

2016-04-07 00:09, Yuanhan Liu:
> On Wed, Apr 06, 2016 at 09:37:53AM +0000, Loftus, Ciara wrote:
> > > On Wed, Apr 06, 2016 at 03:49:25PM +0900, Tetsuya Mukawa wrote:
> > > > Hi,
> > > >
> > > > I appreciate fixing it.
> > > > Just one worry is that state changed event may be occurred before new
> > > > device event.
> > > > The users should not call rte_eth_dev_socket_id() until new device event
> > > > comes, even if they catch queue state events.
> > > > Otherwise, they will get wrong socket id to call
> > > > rte_eth_rx/tx_queue_setup().
> > > 
> > > There is no way to guarantee that the socket id stuff would work
> > > perfectly in vhost, right? I mean, it's likely that virtio device
> > > would allocate memory from 2 or more sockets.
> > > 
> > > So, it doesn't matter too much whether it's set perfectly right
> > > or not. Instead, we should assign it with a saner value instead
> > > of a obvious wrong one when new_device() is not invoked yet. So,
> > > I'd suggest to make an assignment first based on vhost_dev (or
> > > whatever) struct, and then make it "right" at new_device()
> > > callback?
> > 
> > Thanks for the feedback.
> > At the moment with this patch numa_node is initially set to rte_socket_id() during  pmd init and then updated to the correct value during new_device.
> > Are you suggesting we set it again in between these two steps ("based on vhost_dev")? If so where do you think would be a good place?
> 
> Oh, I was not aware of that. Then I think we are fine here.

Please Yuanhan, could you be more explicit?

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06 16:12         ` Thomas Monjalon
@ 2016-04-06 16:43           ` Yuanhan Liu
  0 siblings, 0 replies; 15+ messages in thread
From: Yuanhan Liu @ 2016-04-06 16:43 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev, Loftus, Ciara, Tetsuya Mukawa, Tan, Jianfeng

On Wed, Apr 06, 2016 at 06:12:07PM +0200, Thomas Monjalon wrote:
> 2016-04-07 00:09, Yuanhan Liu:
> > On Wed, Apr 06, 2016 at 09:37:53AM +0000, Loftus, Ciara wrote:
> > > > On Wed, Apr 06, 2016 at 03:49:25PM +0900, Tetsuya Mukawa wrote:
> > > > > Hi,
> > > > >
> > > > > I appreciate fixing it.
> > > > > Just one worry is that state changed event may be occurred before new
> > > > > device event.
> > > > > The users should not call rte_eth_dev_socket_id() until new device event
> > > > > comes, even if they catch queue state events.
> > > > > Otherwise, they will get wrong socket id to call
> > > > > rte_eth_rx/tx_queue_setup().
> > > > 
> > > > There is no way to guarantee that the socket id stuff would work
> > > > perfectly in vhost, right? I mean, it's likely that virtio device
> > > > would allocate memory from 2 or more sockets.
> > > > 
> > > > So, it doesn't matter too much whether it's set perfectly right
> > > > or not. Instead, we should assign it with a saner value instead
> > > > of a obvious wrong one when new_device() is not invoked yet. So,
> > > > I'd suggest to make an assignment first based on vhost_dev (or
> > > > whatever) struct, and then make it "right" at new_device()
> > > > callback?
> > > 
> > > Thanks for the feedback.
> > > At the moment with this patch numa_node is initially set to rte_socket_id() during  pmd init and then updated to the correct value during new_device.
> > > Are you suggesting we set it again in between these two steps ("based on vhost_dev")? If so where do you think would be a good place?
> > 
> > Oh, I was not aware of that. Then I think we are fine here.
> 
> Please Yuanhan, could you be more explicit?

Oh, sorry, I made a reply at wrong place. My reply was against to
following statement:

  > At the moment with this patch numa_node is initially set to
  > rte_socket_id() during  pmd init and then updated to the correct
  > value during new_device.

So, we don't need do another numa_node inital assignment. Put simply,
this patch is fine.

	--yliu

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD
  2016-04-06  5:03 ` Yuanhan Liu
@ 2016-04-06 16:45   ` Thomas Monjalon
  0 siblings, 0 replies; 15+ messages in thread
From: Thomas Monjalon @ 2016-04-06 16:45 UTC (permalink / raw)
  To: Ciara Loftus; +Cc: dev, Yuanhan Liu, mukawa

2016-04-06 13:03, Yuanhan Liu:
> On Tue, Apr 05, 2016 at 05:09:47PM +0100, Ciara Loftus wrote:
> > After some testing, it was found that retrieving numa information
> > about a vhost device via a call to get_mempolicy is more
> > accurate when performed during the new_device callback versus
> > the vring_state_changed callback, in particular upon initial boot
> > of the VM.  Performing this check during new_device is also
> > potentially more efficient as this callback is only triggered once
> > during device initialisation, compared with vring_state_changed
> > which may be called multiple times depending on the number of
> > queues assigned to the device.
> > 
> > Reorganise the code to perform this check and assign the correct
> > socket_id to the device during the new_device callback.
> > 
> > Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
> 
> Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>

Fixes: ee584e9710b9 ("vhost: add driver on top of the library")

Applied, thanks

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2016-04-06 16:47 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-05 16:09 [dpdk-dev] [PATCH] vhost: Fix retrieval of numa information in PMD Ciara Loftus
2016-04-06  5:03 ` Yuanhan Liu
2016-04-06 16:45   ` Thomas Monjalon
2016-04-06  5:32 ` Tan, Jianfeng
2016-04-06  5:44   ` Yuanhan Liu
2016-04-06  6:05     ` Tan, Jianfeng
2016-04-06  6:17       ` Yuanhan Liu
2016-04-06  6:32         ` Tan, Jianfeng
2016-04-06  6:49 ` Tetsuya Mukawa
2016-04-06  7:17   ` Yuanhan Liu
2016-04-06  7:28     ` Tetsuya Mukawa
2016-04-06  9:37     ` Loftus, Ciara
2016-04-06 16:09       ` Yuanhan Liu
2016-04-06 16:12         ` Thomas Monjalon
2016-04-06 16:43           ` Yuanhan Liu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).