Sunay Tripathi wrote:
> Garrett D'Amore wrote:
>> Sunay Tripathi wrote:
>>> Garrett D'Amore wrote:
>>>  
>>>> Sunay Tripathi wrote:
>>>>    
>>>>> Garrett D'Amore wrote:
>>>>>      
>>>>>> Am I reading this correctly, in that polling for receive packets 
>>>>>> is only used if the NIC has more than a single rx ring?
>>>>>>         
>>>>> Yes. The issue is that we can't let one consumer (which can be a
>>>>> service or a VNIC tied to a virtual machine) own the entire NIC.
>>>>> So if the NIC has only one Rx ring, we never put that in poll
>>>>> mode and let the packets always fly till the S/W classifer and
>>>>> soft ring set (SRS) (which mimic Rx rings in pseudo H/W layer). At 
>>>>> that
>>>>> point, the SRS can still be put in a polling mode since that is
>>>>> unique to the VNIC or the service.
>>>>>
>>>>> Now having said that, this is probably suboptimal to the small packet
>>>>> forwarding performance. We can still put the entire NIC in the
>>>>> poll mode but what would be a good way to figure this out (don't
>>>>> necessarily like the idea of adding a tunable). Can we do that
>>>>> by adding a property to the NIC? Is there a more intutive way?
>>>>>       
>>>> When inbound packets arrive faster than the upper layers can process
>>>> them, this would be the point to do that.  So when the squeues or soft
>>>> rings (or whatever the crossbow analog is) fill up, then may as 
>>>> well put
>>>> the NIC in polling mode.  Take it back out of polling mode when you
>>>> catch back up (i.e. you are able to verify that that ring is no longer
>>>> full and the poll returns no packet.)
>>>>     
>>> Its this determination thats hard. The inbound packet goes through the
>>> system through multiple paths and it has different processing 
>>> overheads.
>>> The fact that one path can't keep up doesn't mean that entire NIC
>>> should stop because packets of different types can still be easily
>>> dealt by via a different path. In mixed traffic environments, its not
>>> easy to determine that we are struggling. Sometimes the user specified
>>> policies also play a role in making this hard. Assume the traffic
>>> for a Zone/Xen (determined via its mac address) is not getting 
>>> processed
>>> because that particular Zone/Xen has very little CPU assigned to it.
>>> In such case, even though we can figure out that system can't keep
>>> up, we can't put the NIC in the polling mode. The NIC in such as case
>>> is a shared resource.
>>>
>>>  
>>>> If there is no soft  ring in the middle, then simply let the NIC tell
>>>> you that its hardware ring is full... perhaps the NIC driver can *ask*
>>>> to be put into polling mode in this situation?
>>>>     
>>> You assumption is based on that all packets are meant for one consumer
>>> which is not necessarily true.
>>>   
>>
>>
>> Is the problem that there is logical consumer to do the polling?  
>
> Correct.
>
> > What about in the software classification layer?
>>
>> If you assume that the problem is that the *hardware* ring is full, 
>> then it doesn't matter *who* the traffic is for... the packets are 
>> arriving in the hardware ring too fast, and the host cpu can't keep 
>> up with them... even if all it has to do is shuffle them to another 
>> rx queue.
>
> I haven't noticed that to the issue. The bottle necks seems to be
> above that. If what you say is true, then we can do somethings between
> the S/W classification layers and the NIC. Worth investigating. In
> the small packet forwarding case, can you do some experiments to
> verify this?

I'll see what I can do later.  I definitely see with small packets the 
receive ring fills up quite quickly, but this is with Nevada (though 
with soft rings enabled), not with Crossbow.

    -- Garrett
>
> Sunay
>


Reply via email to