Re: getting the cpuid for a userspace process ?

From: John Baldwin <jhb_at_freebsd.org>
Date: Tue, 25 Oct 2011 14:54:00 -0400
On Tuesday, October 25, 2011 2:09:12 pm Poul-Henning Kamp wrote:
> In message <201110251342.45194.jhb_at_freebsd.org>, John Baldwin writes:
> >On Tuesday, October 25, 2011 11:06:22 am Luigi Rizzo wrote:
> >> as the subject says... is there any way to get the current
> >> CPU id for a userspace process (of course,
> >> valid only at the time the function is called as the
> >> process might be arbitrarily moved while it runs)
> >
> >Not from userland, no.  On x86 you can use cpuid to fetch the APIC ID, but 
> >that does not map 1:1 to FreeBSD cpu IDs.
> 
> How does JEmalloc do it ?

I don't think it does on FreeBSD.  The only thing malloc() knows on FreeBSD is
the total number of CPUs.  I believe Linux has a system call that returns this
though (sched_getcpu() is the public interface which is a wrapper around a
getcpu() system call).  From the manpage it would seem that sched_getcpu() 
uses a per-thread shared page of some sort so that it doesn't actually have to 
enter the kernel to get the CPU ID.  Alternatively, you could imagine it on 
x86 at least exporting a table mapping APIC IDs to CPU IDs and then using 
cpuid and that table to do the lookup purely in userland.  That would only 
necessitate a global shared page and not one per-thread.  You could still fall 
back to a system call for other architectures that simply returned 
curthread->td_oncpu.

-- 
John Baldwin
Received on Tue Oct 25 2011 - 18:45:50 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:19 UTC