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>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGQdsJhgAM4aHY46SaGDpXJGOdEzG6rD93WzG7RT9PWi_%2BwJrA>