Open MPI logo

Hardware Locality Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Hardware Locality Development mailing list

Subject: [hwloc-devel] More memory binding questions
From: Jeff Squyres (jsquyres_at_[hidden])
Date: 2011-01-04 16:22:18


The previous mail was about the constants; now I have questions about the functions. :-)

hwloc_alloc_membind
hwloc_alloc_membind_nodeset

What does "binding cannot be enforced" mean (i.e., when EXDEV is returned)? Assumedly the system supports binding (otherwise ENOSYS would have been returned). Does it mean, for example, that I asked for X memory on node Y, but node Y didn't have X memory available on node Y?

When EXDEV is returned, is valid memory returned (that must be freed via hwloc_free), or does the entire allocation fail?

hwloc_get_area_membind
hwloc_get_area_membind_nodeset

Is the purpose of these 2 functions to query the memory binding policy for an (addr, len) tuple in the current process?

If so, what happens if there are multiple memory binding policies in effect for that tuple?

What is the purpose of the IN flags argument? Taking a guess: can you pass _PROCESS or _THREAD in to query the binding policy for this specific thread or the entire process? (and all other flags are ignored or illegal?)

hwloc_get_membind
hwloc_get_membind_nodeset

Is the purpose of these 2 functions to query the memory binding polocy for the entire current process (or a thread in the current process)?

(assuming the other questions/answers from _get_area_membind are also relevant here)

hwloc_get_proc_membind
hwloc_get_proc_membind_nodeset

It took me a while to notice the PID argument in this function, and that this was the main difference from hwloc_get_membind*. I assume that the documentation statement "Get current process memory binding in cpuset cpuset." is actually incorrect -- right? It shouldn't say "current" -- it should indicate that you can query the memory binding policy for the process specified by the pid argument, right? If so, is it equivalent to calling hwloc_get_membind* in that process?

Assumedly, you need some kind of rights on the target process -- either you're the owner of the process, or are superuser, ...or have some other administrative rights on the target. Right?

Several of the above questions (more-or-less) apply to hwloc_set_*mem*, so I'll refrain form listing them explicitly here.

-- 
Jeff Squyres
jsquyres_at_[hidden]
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/