This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFC: Add getcpu wrapper


On 12/5/18 9:29 AM, H.J. Lu wrote:
> To optimize for multi-node NUMA system, I need a very fast way to identity which
> node the current process is running on.  getcpu:
> 
> NAME
>        getcpu  -  determine  CPU  and NUMA node on which the calling thread is
>        running
> 
> SYNOPSIS
>        #include <linux/getcpu.h>
> 
>        int getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache);
> 
>        Note: There is no glibc wrapper for this system call; see NOTES.
> 
> DESCRIPTION
>        The getcpu() system call identifies the processor and node on which the
>        calling thread or process is currently running and writes them into the
>        integers pointed to by the cpu and node arguments.  The processor is  a
>        unique  small  integer  identifying  a CPU.  The node is a unique small
>        identifier identifying a NUMA node.  When either cpu or  node  is  NULL
>        nothing is written to the respective pointer.
> 
> returns such info.  But syscall () is too slow.  I'd like to add a wrapper to
> glibc.   Any comments?

I don't object to adding syscall wrappers, but your comment appears to indicate
that the glibc wrapper will be doing something more than just wrapping, what
do you have in mind?

On some architectures we might have vdso support for this, while on others it
will be a syscall. What's  wrong with just using the fastest mechanism possible
and that's it?

I see that on x86 you have a vdso vgetcpu, and that lsl is one instruction and
loads the cpunode mask and ccpunode bits in one shot (atomic). So this should
work fine, but for all other callers I assume this will be a syscall.

-- 
Cheers,
Carlos.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]