[ofa-general] Memory registration redux

Jeff Squyres jsquyres at cisco.com
Wed May 27 12:02:36 PDT 2009


Other MPI implementors -- what do you think of this scheme?


On May 27, 2009, at 1:49 PM, Roland Dreier (rdreier) wrote:

>
>  > > /*
>  > >  * If type field is INVAL, then user_cookie_counter holds the
>  > >  * user_cookie for the region being reported; if the HINT flag  
> is set
>  > >  * then hint_start/hint_end hold the start and end of the  
> mapping that
>  > >  * was invalidated.  (If HINT is not set, then multiple events
>  > >  * invalidated parts of the registered range and hint_start/ 
> hint_end
>  > >  * should be ignored)
>
>  > I don't quite grok this.  Is the intent that HINT will only be  
> set if
>  > an *entire* hint_start/hint_end range is invalidated by a single
>  > event?  I.e., if only part of the hint_start/hint_end range is
>  > invalidated, you'll get the cookie back, but not what part of the
>  > range is invalid (because assumedly the entire IBV registration  
> is now
>  > invalid anyway)?
>
> Basically, I just keep one hint_start/hint_end.  If multiple events  
> hit
> the same registration then I just give up and don't give you a hint.
>
>  > >  * If type is LAST, then the read operation has emptied the  
> list of
>  > >  * invalidated regions, and user_cookie_counter holds the value  
> of the
>  > >  * kernel's generation counter when the empty list occurred.  The
>  > >  * other fields are not filled in for this event.
>
>  > Just to be clear -- we're supposed to keep reading events until  
> we get
>  > a LAST event?
>
> Yes, that's probably the sanest use case.
>
>  > 1. Will it increase by 1 each time a page (or set of pages?) is
>  > removed from a user process?
>
> As it stands it increases by 1 every time there is an MMU  
> notification,
> even if that notification hits multiple registrations.  It wouldn't be
> hard to change that to count the number of events generated if that
> works better.
>
>  > 2. Does it change if pages are *added* to a user process?  I.e.,  
> does
>  > the counter indicate *removals* or *changes* to the user process  
> page
>  > table?
>
> No, additions don't trigger any MMU notification -- that's inherent in
> the design of the MMU notifiers stuff.  The idea is that you have a
> "secondary MMU" and MMU notifications are the equivalent of TLB
> shootdowns; the secondary MMU is responsible for populating itself on
> faults etc.
>
>  > Is the *unm_counter value guaranteed to have been changed by the  
> time
>  > munmap() returns?
>
> Yes.
>
>  > Did you pick [2] here simply because you're only expecting an INVAL
>  > and a LAST event in this specific example?  I'm assuming that we
>  > should normally loop over reading until we get LAST, correct?
>
> Right.
>
>  > What happens if I register multiple regions with the same cookie  
> value?
>
> You get in trouble -- I need to fix things to reject duplicated  
> cookies
> actually, because otherwise there's no way to unregister.
>
>  > Is a process responsible for guaranteeing that it umn_unregister()s
>  > everything before exiting, or will all pending registrations be
>  > cleaned up/unregistered/whatever when a process exits?
>
> The kernel cleans up of course to handle crashes etc.
>
>  - R.
>


-- 
Jeff Squyres
Cisco Systems




More information about the general mailing list