Erik Nordmark wrote:
> [EMAIL PROTECTED] wrote:
>
>   
>> So, to use an example of IP code today, code like this:
>>        len_needed += ipst->ips_ip_icmp_return;
>>        msg_len = msgdsize(mp);
>>        if (msg_len > len_needed) {
>>                (void) adjmsg(mp, len_needed - msg_len);
>>                msg_len = len_needed;
>>        }
>>
>> should become:
>>        len_needed += ipst->ips_ip_icmp_return;
>>        msg_len = ntohs(ipha->ipha_length);
>>        if (msg_len > len_needed) {
>>                (void) adjmsg(mp, len_needed - msg_len);
>>                msg_len = len_needed;
>>        }
>>
>> ...which I think is safe.  There are a few others scattered around but...
>>     
>
> That should work.
> But if we are sending so many ICMP errors that this is a significant 
> performance issue, then there would be other problems. (And the ICMP 
> errors are rate limited.)
>   

I don't care about ICMP errors.

But there are significant problems with layer 2.  I think you need to 
look outside of layer 3 if you want to address all the performance, 
scalability performance problems.  (Frankly, IMO, Solaris' layer 3 
implementation is pretty darn good.  We fall down on layer 2 and 
"infrastructure" performance related issues, which is why I think 
Darren's suggestion has so much merit.

A simple run of er_kernel on real device drivers shows that a majority 
of time doing processing is spent in layer 2.  (At least for IP 
forwarding.  I'll grant that host-terminated traffic may look 
different.)  I'd really like to make it easier for layer 2 to be performant.

    -- Garrett
>     Erik
> _______________________________________________
> networking-discuss mailing list
> [email protected]
>   

_______________________________________________
networking-discuss mailing list
[email protected]

Reply via email to