Krishna -

That sounds like a good option to me.

thanks,

-gary

Krishna Yenduri wrote:

>Dan McDonald wrote:
>
>  
>
>>I'm Cc:ing crypto-discuss too, because this is as much a crypto issue as it
>>is a networking one.
>>
>>On Thu, Jul 19, 2007 at 05:56:32PM -0700, Chi-Chang Lin wrote:
>> 
>>
>>    
>>
>>>>Its just _just_ locks.  (Although that concern arises
>>>>as well.)  Its the 
>>>>fact that the read you're running on may be in
>>>>interrupt context.
>>>>     
>>>>
>>>>        
>>>>
>>>If ip_input() is in soft ring thread (which is always the case in Niagara
>>>2), is it ok to be cv_wait()'ed ?
>>>   
>>>
>>>      
>>>
>>There's still the problem with crypto providers possibly calling kmem_alloc()
>>with KM_SLEEP, which is just Bad News (TM).
>>
>>We make a change in IP and it affects everything, not just any upcoming
>>goodies.  And I'm not clear what interrupte level the soft-ring servicing
>>threads operate at.
>> 
>>
>>    
>>
>
> These servicing threads are not interrupt threads and hence
> interrupt level is not applicable. They run as a system thread
> with a thread priority of minclsyspri (60).
>
>  
>
>>The Summary:
>>
>>      We've found that if IPsec can call the crypto framework with NO
>>      ASYNCHRONY, we can use soft-rings to get big scalability wins.  The
>>      problem is, we can't (for now) guarantee that crypto providers won't:
>>
>>              - Block an inordinately long time on a lock of some sort.
>>
>>              - Call kmem_alloc() with KM_SLEEP.
>>
>>              - Other behavior which while safe in user context, in
>>                 interrupt context may cause untold havoc to the system.
>> 
>>
>>    
>>
>
> As I understand it, the problem with unbounded wait/sleep in an
> interrupt thread is that we will be blocking all lower-priority interrupts
> in this state and it can result an unresponsive/hung system.
>
> I think we can solve the problem if IPsec were to make
> the kernel crypto API call in synchronous mode only if
> servicing_interrupt() check is not true. We can keep using
> the asynchronous mode if the check is true.
>
> Most outgoing packets will likely fall under this case. And
> incoming packets processed by a service threads like
> the soft ring threads will fall under this case.
>
>  
>
>>      From crypto:  Can we rustle all crypto providers (HW and SW) and make
>>                    them obey certain rules regarding their synchronous
>>                    providers?
>>
>>                    Beyond that, maybe can we have the framework return and
>>                    error from a synchronous call that allows the caller
>>                    (IPsec) to try again asynchronously?  That way, we
>>                    cover the smart HW (like N2) and SW (like the native
>>                    Solaris crypto code), and the dumb HW and SW too?
>> 
>>
>>    
>>
>
> This will place too many constraints on a HW crypto provider
> *and* the crypto framework. I would prefer the above
> solution with the servicing_interrupt() check.
>
>-Krishna
>_______________________________________________
>crypto-discuss mailing list
>crypto-discuss at opensolaris.org
>http://mail.opensolaris.org/mailman/listinfo/crypto-discuss
>  
>



Reply via email to