[Intel-wired-lan] [next PATCH 4/4] i40e/i40evf: Allow up to 12K bytes of data per Tx descriptor instead of 8K
Alexander Duyck
alexander.duyck at gmail.com
Wed Feb 17 21:56:17 UTC 2016
On Wed, Feb 17, 2016 at 1:38 PM, Jeff Kirsher
<jeffrey.t.kirsher at intel.com> wrote:
> On Wed, 2016-02-17 at 11:03 -0800, Alexander Duyck wrote:
>> >From what I can tell the practial limitation on the size of the Tx
>> data
>> buffer is the fact that the Tx descriptor is limited to 14 bits. As
>> such
>> we cannot use 16K as is typically used on the other Intel drivers.
>> However
>> artificially limiting ourselves to 8K can be expensive as this means
>> that
>> we will consume up to 10 descriptors (1 context, 1 for header, and 9
>> for
>> an payload, non-8K aligned) in a single send.
>>
>> I propose that we can reduce this by increasing the maximum data for
>> a 4K
>> aligned block to 12K. We can reduce the descriptors used for a 32K
>> aligned
>> block by 1 by increasing the size like this. In addition we still
>> have the
>> 4K - 1 of space that is still unused. We can use this as a bit of
>> extra
>> padding when dealing with data that is not aligned to 4K.
>>
>> By aligning the descriptors after the first to 4K we can improve the
>> effiency of PCIe accesses as we can avoid using byte enables and can
>> fetch
>> full TLP transactions after the first fetch of the buffer. This
>> helps to
>> improve PCIe efficiency. Below is the results of testing before and
>> after
>> with this patch:
>>
>> Recv Send Send Utilization Service
>> Demand
>> Socket Socket Message Elapsed Send Recv Send
>> Recv
>> Size Size Size Time Throughput local remote local
>> remote
>> bytes bytes bytes secs. 10^6bits/s % S % U us/KB
>> us/KB
>> Before:
>> 87380 16384 16384 10.00 33682.24 20.27 -1.00 0.592
>> -1.00
>> After:
>> 87380 16384 16384 10.00 34204.08 20.54 -1.00 0.590
>> -1.00
>>
>> So the net result of this patch is that we have a small gain in
>> throughput
>> due to a reduction in overhead for putting together the frame.
>>
>> Signed-off-by: Alexander Duyck <aduyck at mirantis.com>
>> ---
>> drivers/net/ethernet/intel/i40e/i40e_txrx.c | 13 ++++++---
>> drivers/net/ethernet/intel/i40e/i40e_txrx.h | 35
>> +++++++++++++++++++++++--
>> drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 13 ++++++---
>> drivers/net/ethernet/intel/i40evf/i40e_txrx.h | 35
>> +++++++++++++++++++++++--
>> 4 files changed, 82 insertions(+), 14 deletions(-)
>
> Getting a compile error after applying this patch to my tree, here is
> what I am getting:
>
> drivers/net/ethernet/intel/i40e/i40e_fcoe.c: In function
> ‘i40e_fcoe_xmit_frame’:
> drivers/net/ethernet/intel/i40e/i40e_fcoe.c:1374:11: error: implicit
> declaration of function ‘TXD_USE_COUNT’ [-Werror=implicit-function-
> declaration]
> count = TXD_USE_COUNT(skb->len);
> ^
> cc1: some warnings being treated as errors
Sorry about that. I don't think I was testing with FCoE enabled.
I'll fix it up and resubmit.
- Alex
More information about the Intel-wired-lan
mailing list