getpid() performance
Julian Grajkowski
julian.grajkowski at gmail.com
Wed Sep 16 07:15:12 UTC 2020
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?
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
More information about the freebsd-drivers
mailing list