Mike,

Sounds very reasonable. Need to check with Roamer and Thiru as
to where they actually are in the implementation.

Cheers,
sunay

Michael Speer wrote:
> Sunay,
> 
> Having seen you earlier e-mail and now this one. I think
> an appropriate way to simplify this is have the mac layer
> provide two things:
> 
> 1) Provide true soft LSO in the mac layer where the H/W driver
>     would receive multiple packets to map/unmap and transmit.
>     The mac layer can be a client of the library I propose below in #2.
> 
> 2) Provide a set of mac library routines that the driver could use
>     to do the packet chopping that soft LSO requires while the
>     H/W performs the single DMA mapping.  Also, the H/W driver
>     would advertize that it is LSO capable.
> 
> The end result is that you would have the best of both worlds
> in having the mac layer provide LSO for all devices and
> specific drivers provide it and offering one dma mapping.
> 
> Sound reasonable?
> 
> Michael
> 
> On Sep 25, 2007, at 2:09 PM, Sunay Tripathi wrote:
> 
>> Matheos Worku wrote:
>>> Garrett D'Amore wrote:
>>>> Paul Durrant wrote:
>>>>
>>>>> On 25/09/2007, David Edmondson <dme at sun.com> wrote:
>>>>>
>>>>>
>>>>>> Why? I can accept a large packet in a MAC layer transmit function,
>>>>>> chop it up and then present an mblk chain to the driver in a single
>>>>>> call to its' transmit routine.
>>>>>>
>>>>>>
>>>>>>
>>>>> You lose the single DMA map this way, which is a good portion of the
>>>>> advantage of LSO (given how slow the DMA map operation appears to be
>>>>> on many platforms).
>>>>>
>>>>>
>>>>
>>>> Right.  If you push it too far up the stack, then it offers no real
>>>> advantage over just letting IP fragment the frames normally. :-)
>>>>
>>>> The meaty part of this work can be in common code that is called by mac
>>>> layer drivers, though.
>>>>
>>>
>>> I understand the obvious advantages of doing soft-lso in MAC layer such
>>> as same code supporting all non-hw-lso NICs,
>>> designing/implementing/testing  it once etc ...
>>> On the other hand, doing it in the NIC driver has some advantages due to
>>> the fact it has  intimate knowledge of the HW among other things.  This
>>> is from the experience we gained from implementing soft-lso in Neptune
>>> Linux driver.
>>>
>>> 1) Reduced DMA mapping. Assuming that the LSO packet is presented as a
>>> chain of large mblks (or pages), need to do DMA mapping per large mblk.
>>> You can then chop the the mapped data buffer. Even in  Linux X86  where
>>> a page contains 2+ MTU sized packets this would cut down the number of
>>> DMA mappings significantly.  For SPARC, the reduction would be even 
>>> bigger.
>>>
>>> 2) Manufacture the headers in the driver. Could exploit specific HW
>>> features.
>>>
>>> 3) Separate the operations which require holding locks from those don't.
>>> Manufacturing the headers, DMA mapping, calculating pseudo checksum  and
>>> IP header checksum (for the HW which do not support complete checksum),
>>> twiking  IP id and sequence numbers can be done lockless. Only the
>>> actual posting of the descriptors would require locking.
>>>
>>>
>>> 4) Simpler Interface. As far as the upper layer is concerned, there
>>> would be no distinction between HW and SW LSO. The driver can advertise
>>> as LSO capable.  At the driver level, the   difference  would be how LSO
>>> packet is processed/described/posted  to the HW and that is HW specific
>>> anyway.
>>
>> I think you missed my earlier reply. Yes, pushing it down for driver
>> that support it is good but the functionality does need to be
>> offered at a common layer. Don't want to see code in TCP or
>> IP dealing with LSO or not to LSO. They should just do it based
>> on advertized MTU. Here is the relevant part from my earlier email
>>
>> "
>> The MAC layer is implementing a pseudo H/W layer anyway as part of
>> Crossbow. The idea is that upper layer can always assume that
>> features like classificaton, Rx/Tx rings, soft-lso, etc are
>> supported. The upper layer always have a pointer to a Tx
>> routine in MAC layer. The driver on the other hand can choose
>> to be native LSO, soft-lso aware or none. It needs to register
>> its capability as per the new document Kais and Roamer are
>> preparing and corresponding functions. In most cases, the MAC
>> transmit routine can just be a tail call to driver routine or
>> a tail call to mac_soft_lso() in case driver doesn't support
>> it. Some advantages of a function pointer driven approach ....
>> "
>>
>> Cheers,
>> Sunay
>>
>> -- 
>> Sunay Tripathi
>> Distinguished Engineer
>> Solaris Core Operating System
>> Sun MicroSystems Inc.
>>
>> Solaris Networking:     
>> http://www.opensolaris.org/os/community/networking
>> Project Crossbow:       http://www.opensolaris.org/os/project/crossbow
>>
>>
>> _______________________________________________
>> crossbow-discuss mailing list
>> crossbow-discuss at opensolaris.org
>> http://mail.opensolaris.org/mailman/listinfo/crossbow-discuss


-- 
Sunay Tripathi
Distinguished Engineer
Solaris Core Operating System
Sun MicroSystems Inc.

Solaris Networking:     http://www.opensolaris.org/os/community/networking
Project Crossbow:       http://www.opensolaris.org/os/project/crossbow



Reply via email to