[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#804258: ITP: igb -- dkms source for the igb network driver



Le 07/11/2015 02:20, Ben Hutchings a écrit :
> On Fri, 2015-11-06 at 18:35 +0100, Clément Hermann wrote:
>>
>>  igb is the Linux device driver released for Intel 82575/6, 82580, I350, and
>>  I210/211-based network interfaces. 
>>  .
>>  This driver uses the same base as the igb module included in the Linux kernel,
>>  with added features such as advanced multiqueue control (RSS), interrupts
>>  throttle management, Large Receive Offload (LRO) and Low Latency Interrupts
>>  (LLI).
>>  .
>>  Only use this driver if you need these specific features.
> [...]
>
> This description is inaccurate; two of the four features mentioned
> actually are included in the in-tree driver.  And I don't think there'a
> anything stopping Intel's maintainers from adding the remaining
> features to the in-tree driver.
>
> The justification for adding an alternate version of the driver seems
> quite weak.
>
You're right, this is poorly worded.

Most features are actually in mainline, you're right, but there is often
no way to control them: only default values are usable.

For instance, RSS: in mainline, you don't have the option to choose
(reduce) the number of queues in order avoid using both thread of a
HT-enabled CPU core, or keeping some cpu free of network interrupts. You
can free a CPU using affinity, but you'll end up with several queues on
another. As stated in my description, this is not intended to replace
the mainline kernel which should work fine for most uses.

I use this for performance tuning on heavily solicited network devices
such as gateways or load balancers, I hear it is useful on
virtualization servers as well (VDMQ).

Here is the parameter list for the out of tree driver:
parm:           InterruptThrottleRate:Maximum interrupts per second, per
vector, (max 100000), default 3=adaptive (array of int)
parm:           IntMode:Change Interrupt Mode (0=Legacy, 1=MSI,
2=MSI-X), default 2 (array of int)
parm:           Node:set the starting node to allocate memory on,
default -1 (array of int)
parm:           LLIPort:Low Latency Interrupt TCP Port (0-65535),
default 0=off (array of int)
parm:           LLIPush:Low Latency Interrupt on TCP Push flag (0,1),
default 0=off (array of int)
parm:           LLISize:Low Latency Interrupt on Packet Size (0-1500),
default 0=off (array of int)
parm:           RSS:Number of Receive-Side Scaling Descriptor Queues
(0-8), default 1, 0=number of cpus (array of int)
parm:           VMDQ:Number of Virtual Machine Device Queues: 0-1 =
disable, 2-8 enable, default 0 (array of int)
parm:           max_vfs:Number of Virtual Functions: 0 = disable, 1-7
enable, default 0 (array of int)
parm:           MDD:Malicious Driver Detection (0/1), default 1 =
enabled. Only available when max_vfs is greater than 0 (array of int)
parm:           QueuePairs:Enable Tx/Rx queue pairs for interrupt
handling (0,1), default 1=on (array of int)
parm:           EEE:Enable/disable on parts that support the feature
(array of int)
parm:           DMAC:Disable or set latency for DMA Coalescing ((0=off,
1000-10000(msec), 250, 500 (usec)) (array of int)
parm:           LRO:Large Receive Offload (0,1), default 0=off (array of
int)
parm:           debug:Debug level (0=none, ..., 16=all) (int)

and for the mainline :
parm:           max_vfs:Maximum number of virtual functions to allocate
per physical function (uint)
parm:           debug:Debug level (0=none,...,16=all) (int)


It's been this way for years and Intel doesn't seem to want to change
that. From what I could gather speaking to intel people, the idea seems
to be "sane defaults in kernel, full control out of tree". I didn't find
any official stance about this, though.

So here is an updated description:

 igb is the Linux device driver released for Intel 82575/6, 82580, I350, and
 I210/211-based network interfaces. 
 .
 This driver uses the same code base as the igb module included in the Linux kernel,
 and allows control over advanced features via modules parameters :
 - InterruptThrottleRate:Maximum interrupts per second, per vector
 - IntMode:Change Interrupt Mode
 - Node:set the starting node to allocate memory on
 - LLIPort:Low Latency Interrupt TCP Port
 - LLIPush:Low Latency Interrupt on TCP Push flag
 - LLISize:Low Latency Interrupt on Packet Size
 - RSS:Number of Receive-Side Scaling Descriptor Queues
 - VMDQ:Number of Virtual Machine Device Queues
 - MDD:Malicious Driver Detection
 - QueuePairs:Enable Tx/Rx queue pairs for interrupt handling
 - EEE:Enable/disable on parts that support the feature
 - DMAC:Disable or set latency for DMA Coalescing
 - LRO:Large Receive Offload
 .
 Only use this driver if you need fine control over these specific features, otherwise, 
 you should stick to the driver included in mainline kernel.

Including the full list of parameter was actually my first move, but I thought it would maybe be too long.
Seeing your reaction, though, I understand it needs clarification.

Cheers,

-- 
Clément (nodens)


Attachment: signature.asc
Description: OpenPGP digital signature


Reply to: