getpid() performance
Warner Losh
imp at bsdimp.com
Wed Sep 16 07:24:48 UTC 2020
On Wed, Sep 16, 2020 at 1:15 AM Julian Grajkowski <
julian.grajkowski at gmail.com> wrote:
> Hi,
>
> I am working on a contiguous memory allocator which frequently calls
> getpid() in user space and I have noticed very poor performance of this
> function call. I measured this call performance using following code:
>
> inline uint64_t rdtsc_start(void)
> {
> uint32_t cycles_high;
> uint32_t cycles_low;
>
> asm volatile("lfence\n\t"
> "rdtscp\n\t"
> "mov %%edx, %0\n\t"
> "mov %%eax, %1\n\t"
> : "=r" (cycles_high), "=r" (cycles_low)
> : : "%rax", "%rdx", "%rcx");
>
> return (((uint64_t)cycles_high << 32) | cycles_low);
> }
>
>
> inline uint64_t rdtsc_end(void)
> {
> uint32_t cycles_high;
> uint32_t cycles_low;
>
> asm volatile("rdtscp\n\t"
> "mov %%edx, %0\n\t"
> "mov %%eax, %1\n\t"
> "lfence\n\t"
> : "=r" (cycles_high), "=r" (cycles_low)
> : : "%rax", "%rdx", "%rcx");
>
> return (((uint64_t)cycles_high << 32) | cycles_low);
> }
>
> This way I measured ~320 cycles used for getpid() on FreeBSD 12.1. For
> comparison, in Linux (CentOS 7) this call uses ~10 cycles. I am aware that
> this should not be compared directly. as these are different systems, but
> such a big difference in performance is an issue for me, as getpid() is
> called very often in my code.
>
> Is such a poor performance of getpid() a known problem and is it possible
> that this might be improved in future releases?
>
glibc optimizes getpid() system call so it only calls it once and returns a
cached value (which is in line with 10 cycles, there's no way you can
save/restore state in 10 cycles, let alone do a dispatch). FreeBSD doesn't.
Warner
> Measurements were done on the same mahcine with following setup:
>
> CPU: Intel(R) Atom(TM) CPU C3958 @ 2.00GHz (2000.06-MHz K8-class CPU)
> FreeBSD/SMP: Multiprocessor System Detected: 16 CPUs
>
> 8GB RAM (2x4GB):
> Type: DDR4
> Type Detail: Synchronous Unbuffered (Unregistered)
> Speed: 2400 MT/s
>
> Thank you very much in advance for any help.
>
> Kind regards,
> Julian
> _______________________________________________
> freebsd-drivers at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-drivers
> To unsubscribe, send any mail to "freebsd-drivers-unsubscribe at freebsd.org"
>
More information about the freebsd-drivers
mailing list