Date: Wed, 16 Sep 2020 09:14:58 +0200 From: Julian Grajkowski <julian.grajkowski@gmail.com> To: freebsd-drivers@freebsd.org Subject: getpid() performance Message-ID: <CAGQdsJhgAM4aHY46SaGDpXJGOdEzG6rD93WzG7RT9PWi_%2BwJrA@mail.gmail.com>
index | next in thread | raw e-mail
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
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGQdsJhgAM4aHY46SaGDpXJGOdEzG6rD93WzG7RT9PWi_%2BwJrA>
