Re: [PATCH] LoongArch: Add vDSO syscall __vdso_getcpu()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 6/18/22 17:10, Huacai Chen wrote:
Hi,

On Fri, Jun 17, 2022 at 11:35 PM hev <r@xxxxxx> wrote:
Hello,

On Fri, Jun 17, 2022 at 10:57 PM Huacai Chen <chenhuacai@xxxxxxxxxxx> wrote:
We test 20 million times of getcpu(), the real syscall version take 25
seconds, while the vsyscall version take only 2.4 seconds.

Signed-off-by: Huacai Chen <chenhuacai@xxxxxxxxxxx>
---
  arch/loongarch/include/asm/vdso.h      |  4 +++
  arch/loongarch/include/asm/vdso/vdso.h | 10 +++++-
  arch/loongarch/kernel/vdso.c           | 23 +++++++++-----
  arch/loongarch/vdso/Makefile           |  3 +-
  arch/loongarch/vdso/vdso.lds.S         |  1 +
  arch/loongarch/vdso/vgetcpu.c          | 43 ++++++++++++++++++++++++++
  6 files changed, 74 insertions(+), 10 deletions(-)
  create mode 100644 arch/loongarch/vdso/vgetcpu.c

diff --git a/arch/loongarch/include/asm/vdso.h b/arch/loongarch/include/asm/vdso.h
index 8f8a0f9a4953..e76d5e37480d 100644
--- a/arch/loongarch/include/asm/vdso.h
+++ b/arch/loongarch/include/asm/vdso.h
@@ -12,6 +12,10 @@

  #include <asm/barrier.h>

+typedef struct vdso_pcpu_data {
+       u32 node;
+} ____cacheline_aligned_in_smp vdso_pcpu_data;
+
  /*
   * struct loongarch_vdso_info - Details of a VDSO image.
   * @vdso: Pointer to VDSO image (page-aligned).
diff --git a/arch/loongarch/include/asm/vdso/vdso.h b/arch/loongarch/include/asm/vdso/vdso.h
index 5a01643a65b3..94055f7c54b7 100644
--- a/arch/loongarch/include/asm/vdso/vdso.h
+++ b/arch/loongarch/include/asm/vdso/vdso.h
@@ -8,6 +8,13 @@

  #include <asm/asm.h>
  #include <asm/page.h>
+#include <asm/vdso.h>
+
+#if PAGE_SIZE < SZ_16K
+#define VDSO_DATA_SIZE SZ_16K
Whether we add members to the vdso data structure or extend
SMP_CACHE_BYTES/NR_CPUS, the static VDSO_DATA_SIZE may not match, and
there is no assertion checking to help us catch bugs early. So I
suggest defining VDSO_DATA_SIZE as ALIGN_UP(sizeof (struct vdso_data),
PAGE_SIZE).
VSYSCALL usage is very limited (you know, VSYSCALL appears for so many
years, but the number nearly doesn't increase until now), so I think
16KB is enough in the future.

I don't think omitting compile-time assertions for *correctness* is worth the negligible improvement in brevity and ease of maintenance. In fact, static checks for correctness actually *lightens* maintenance burden, by explicitly calling out the assumptions so that newcomers (i.e. me or some other random linux/arch developer refactoring code) would find them very helpful.

So I'm in support for declaring the VDSO_DATA_SIZE explicitly in terms of sizeof(struct vdso_data) and PAGE_SIZE.



[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux