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]