Re: [PATCH net-next v2 9/9] ibmvnic: Do not replenish RX buffers after every polling loop
On 11/19/20 2:38 PM, ljp wrote: On 2020-11-19 14:26, Thomas Falcon wrote: On 11/19/20 3:43 AM, ljp wrote: On 2020-11-18 19:12, Thomas Falcon wrote: From: "Dwip N. Banerjee" Reduce the amount of time spent replenishing RX buffers by only doing so once available buffers has fallen under a certain threshold, in this case half of the total number of buffers, or if the polling loop exits before the packets processed is less than its budget. Signed-off-by: Dwip N. Banerjee --- drivers/net/ethernet/ibm/ibmvnic.c | 5 - 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 96df6d8fa277..9fe43ab0496d 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -2537,7 +2537,10 @@ static int ibmvnic_poll(struct napi_struct *napi, int budget) frames_processed++; } - if (adapter->state != VNIC_CLOSING) + if (adapter->state != VNIC_CLOSING && + ((atomic_read(>rx_pool[scrq_num].available) < + adapter->req_rx_add_entries_per_subcrq / 2) || + frames_processed < budget)) 1/2 seems a simple and good algorithm. Explaining why "frames_process < budget" is necessary in the commit message or source code also helps. Hello, Lijun. The patch author, Dwip Banerjee, suggested the modified commit message below: Reduce the amount of time spent replenishing RX buffers by only doing so once available buffers has fallen under a certain threshold, in this case half of the total number of buffers, or if the polling loop exits before the packets processed is less than its budget. Non-exhaustion of NAPI budget implies lower incoming packet pressure, allowing the leeway to refill the buffers in preparation for any impending burst. It looks good to me. Would such an update require a v3? I assume you ask Jakub, right? Yes. There was an issue with my mail client in my earlier response, so I am posting Dwip's modified commit message again below. Reduce the amount of time spent replenishing RX buffers by only doing so once available buffers has fallen under a certain threshold, in this case half of the total number of buffers, or if the polling loop exits before the packets processed is less than its budget. Non-exhaustion of NAPI budget implies lower incoming packet pressure, allowing the leeway to refill the buffers in preparation for any impending burst. replenish_rx_pool(adapter, >rx_pool[scrq_num]); if (frames_processed < budget) { if (napi_complete_done(napi, frames_processed)) {
Re: [PATCH net-next v2 9/9] ibmvnic: Do not replenish RX buffers after every polling loop
On 11/19/20 3:43 AM, ljp wrote: On 2020-11-18 19:12, Thomas Falcon wrote: From: "Dwip N. Banerjee" Reduce the amount of time spent replenishing RX buffers by only doing so once available buffers has fallen under a certain threshold, in this case half of the total number of buffers, or if the polling loop exits before the packets processed is less than its budget. Signed-off-by: Dwip N. Banerjee --- drivers/net/ethernet/ibm/ibmvnic.c | 5 - 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 96df6d8fa277..9fe43ab0496d 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -2537,7 +2537,10 @@ static int ibmvnic_poll(struct napi_struct *napi, int budget) frames_processed++; } - if (adapter->state != VNIC_CLOSING) + if (adapter->state != VNIC_CLOSING && + ((atomic_read(>rx_pool[scrq_num].available) < + adapter->req_rx_add_entries_per_subcrq / 2) || + frames_processed < budget)) 1/2 seems a simple and good algorithm. Explaining why "frames_process < budget" is necessary in the commit message or source code also helps. Hello, Lijun. The patch author, Dwip Banerjee, suggested the modified commit message below: Reduce the amount of time spent replenishing RX buffers by only doing so once available buffers has fallen under a certain threshold, in this case half of the total number of buffers, or if the polling loop exits before the packets processed is less than its budget. Non-exhaustion of NAPI budget implies lower incoming packet pressure, allowing the leeway to refill the buffers in preparation for any impending burst. Would such an update require a v3? replenish_rx_pool(adapter, >rx_pool[scrq_num]); if (frames_processed < budget) { if (napi_complete_done(napi, frames_processed)) {
Re: [PATCH net-next v2 9/9] ibmvnic: Do not replenish RX buffers after every polling loop
On 2020-11-19 14:26, Thomas Falcon wrote: On 11/19/20 3:43 AM, ljp wrote: On 2020-11-18 19:12, Thomas Falcon wrote: From: "Dwip N. Banerjee" Reduce the amount of time spent replenishing RX buffers by only doing so once available buffers has fallen under a certain threshold, in this case half of the total number of buffers, or if the polling loop exits before the packets processed is less than its budget. Signed-off-by: Dwip N. Banerjee --- drivers/net/ethernet/ibm/ibmvnic.c | 5 - 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 96df6d8fa277..9fe43ab0496d 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -2537,7 +2537,10 @@ static int ibmvnic_poll(struct napi_struct *napi, int budget) frames_processed++; } - if (adapter->state != VNIC_CLOSING) + if (adapter->state != VNIC_CLOSING && + ((atomic_read(>rx_pool[scrq_num].available) < + adapter->req_rx_add_entries_per_subcrq / 2) || + frames_processed < budget)) 1/2 seems a simple and good algorithm. Explaining why "frames_process < budget" is necessary in the commit message or source code also helps. Hello, Lijun. The patch author, Dwip Banerjee, suggested the modified commit message below: Reduce the amount of time spent replenishing RX buffers by only doing so once available buffers has fallen under a certain threshold, in this case half of the total number of buffers, or if the polling loop exits before the packets processed is less than its budget. Non-exhaustion of NAPI budget implies lower incoming packet pressure, allowing the leeway to refill the buffers in preparation for any impending burst. It looks good to me. Would such an update require a v3? I assume you ask Jakub, right? replenish_rx_pool(adapter, >rx_pool[scrq_num]); if (frames_processed < budget) { if (napi_complete_done(napi, frames_processed)) {
Re: [PATCH net-next v2 9/9] ibmvnic: Do not replenish RX buffers after every polling loop
On 2020-11-18 19:12, Thomas Falcon wrote: From: "Dwip N. Banerjee" Reduce the amount of time spent replenishing RX buffers by only doing so once available buffers has fallen under a certain threshold, in this case half of the total number of buffers, or if the polling loop exits before the packets processed is less than its budget. Signed-off-by: Dwip N. Banerjee --- drivers/net/ethernet/ibm/ibmvnic.c | 5 - 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 96df6d8fa277..9fe43ab0496d 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -2537,7 +2537,10 @@ static int ibmvnic_poll(struct napi_struct *napi, int budget) frames_processed++; } - if (adapter->state != VNIC_CLOSING) + if (adapter->state != VNIC_CLOSING && + ((atomic_read(>rx_pool[scrq_num].available) < + adapter->req_rx_add_entries_per_subcrq / 2) || + frames_processed < budget)) 1/2 seems a simple and good algorithm. Explaining why "frames_process < budget" is necessary in the commit message or source code also helps. replenish_rx_pool(adapter, >rx_pool[scrq_num]); if (frames_processed < budget) { if (napi_complete_done(napi, frames_processed)) {