Message ID | 20231219175046.2496-5-jszhang@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | riscv: support fast gup | expand |
On 19/12/2023 18:50, Jisheng Zhang wrote: > Activate the fast gup for riscv mmu platforms. Here are some > GUP_FAST_BENCHMARK performance numbers: > > Before the patch: > GUP_FAST_BENCHMARK: Time: get:53203 put:5085 us > > After the patch: > GUP_FAST_BENCHMARK: Time: get:17711 put:5060 us On which platform did you run this benchmark? > > The get time is reduced by 66.7%! IOW, 3x get speed! Well done! Thanks, Alex > > Signed-off-by: Jisheng Zhang <jszhang@kernel.org> > --- > arch/riscv/Kconfig | 1 + > arch/riscv/include/asm/pgtable.h | 6 ++++++ > 2 files changed, 7 insertions(+) > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index d3555173d9f4..04df9920282d 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -119,6 +119,7 @@ config RISCV > select HAVE_FUNCTION_GRAPH_RETVAL if HAVE_FUNCTION_GRAPH_TRACER > select HAVE_FUNCTION_TRACER if !XIP_KERNEL && !PREEMPTION > select HAVE_EBPF_JIT if MMU > + select HAVE_FAST_GUP if MMU > select HAVE_FUNCTION_ARG_ACCESS_API > select HAVE_FUNCTION_ERROR_INJECTION > select HAVE_GCC_PLUGINS > diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h > index ab00235b018f..c6eb214139e6 100644 > --- a/arch/riscv/include/asm/pgtable.h > +++ b/arch/riscv/include/asm/pgtable.h > @@ -673,6 +673,12 @@ static inline int pmd_write(pmd_t pmd) > return pte_write(pmd_pte(pmd)); > } > > +#define pud_write pud_write > +static inline int pud_write(pud_t pud) > +{ > + return pte_write(pud_pte(pud)); > +} > + > static inline int pmd_dirty(pmd_t pmd) > { > return pte_dirty(pmd_pte(pmd));
On Sun, Dec 31, 2023 at 07:37:33AM +0100, Alexandre Ghiti wrote: > On 19/12/2023 18:50, Jisheng Zhang wrote: > > Activate the fast gup for riscv mmu platforms. Here are some > > GUP_FAST_BENCHMARK performance numbers: > > > > Before the patch: > > GUP_FAST_BENCHMARK: Time: get:53203 put:5085 us > > > > After the patch: > > GUP_FAST_BENCHMARK: Time: get:17711 put:5060 us > > > On which platform did you run this benchmark? T-HEAD th1520(cpufreq isn't enabled since the clk/pll isn't upstreamed, so cpu is running at the default freq set by u-boot) > > > > > > The get time is reduced by 66.7%! IOW, 3x get speed! > > > Well done! > > Thanks, > > Alex > > > > > > Signed-off-by: Jisheng Zhang <jszhang@kernel.org> > > --- > > arch/riscv/Kconfig | 1 + > > arch/riscv/include/asm/pgtable.h | 6 ++++++ > > 2 files changed, 7 insertions(+) > > > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > > index d3555173d9f4..04df9920282d 100644 > > --- a/arch/riscv/Kconfig > > +++ b/arch/riscv/Kconfig > > @@ -119,6 +119,7 @@ config RISCV > > select HAVE_FUNCTION_GRAPH_RETVAL if HAVE_FUNCTION_GRAPH_TRACER > > select HAVE_FUNCTION_TRACER if !XIP_KERNEL && !PREEMPTION > > select HAVE_EBPF_JIT if MMU > > + select HAVE_FAST_GUP if MMU > > select HAVE_FUNCTION_ARG_ACCESS_API > > select HAVE_FUNCTION_ERROR_INJECTION > > select HAVE_GCC_PLUGINS > > diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h > > index ab00235b018f..c6eb214139e6 100644 > > --- a/arch/riscv/include/asm/pgtable.h > > +++ b/arch/riscv/include/asm/pgtable.h > > @@ -673,6 +673,12 @@ static inline int pmd_write(pmd_t pmd) > > return pte_write(pmd_pte(pmd)); > > } > > +#define pud_write pud_write > > +static inline int pud_write(pud_t pud) > > +{ > > + return pte_write(pud_pte(pud)); > > +} > > + > > static inline int pmd_dirty(pmd_t pmd) > > { > > return pte_dirty(pmd_pte(pmd));
On 02/01/2024 04:25, Jisheng Zhang wrote: > On Sun, Dec 31, 2023 at 07:37:33AM +0100, Alexandre Ghiti wrote: >> On 19/12/2023 18:50, Jisheng Zhang wrote: >>> Activate the fast gup for riscv mmu platforms. Here are some >>> GUP_FAST_BENCHMARK performance numbers: >>> >>> Before the patch: >>> GUP_FAST_BENCHMARK: Time: get:53203 put:5085 us >>> >>> After the patch: >>> GUP_FAST_BENCHMARK: Time: get:17711 put:5060 us >> >> On which platform did you run this benchmark? > T-HEAD th1520(cpufreq isn't enabled since the clk/pll isn't upstreamed, > so cpu is running at the default freq set by u-boot) >> >>> The get time is reduced by 66.7%! IOW, 3x get speed! >> >> Well done! >> >> Thanks, >> >> Alex >> >> >>> Signed-off-by: Jisheng Zhang <jszhang@kernel.org> >>> --- >>> arch/riscv/Kconfig | 1 + >>> arch/riscv/include/asm/pgtable.h | 6 ++++++ >>> 2 files changed, 7 insertions(+) >>> >>> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig >>> index d3555173d9f4..04df9920282d 100644 >>> --- a/arch/riscv/Kconfig >>> +++ b/arch/riscv/Kconfig >>> @@ -119,6 +119,7 @@ config RISCV >>> select HAVE_FUNCTION_GRAPH_RETVAL if HAVE_FUNCTION_GRAPH_TRACER >>> select HAVE_FUNCTION_TRACER if !XIP_KERNEL && !PREEMPTION >>> select HAVE_EBPF_JIT if MMU >>> + select HAVE_FAST_GUP if MMU >>> select HAVE_FUNCTION_ARG_ACCESS_API >>> select HAVE_FUNCTION_ERROR_INJECTION >>> select HAVE_GCC_PLUGINS >>> diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h >>> index ab00235b018f..c6eb214139e6 100644 >>> --- a/arch/riscv/include/asm/pgtable.h >>> +++ b/arch/riscv/include/asm/pgtable.h >>> @@ -673,6 +673,12 @@ static inline int pmd_write(pmd_t pmd) >>> return pte_write(pmd_pte(pmd)); >>> } >>> +#define pud_write pud_write >>> +static inline int pud_write(pud_t pud) >>> +{ >>> + return pte_write(pud_pte(pud)); >>> +} >>> + >>> static inline int pmd_dirty(pmd_t pmd) >>> { >>> return pte_dirty(pmd_pte(pmd)); Thanks, you can add: Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com> Thanks, Alex > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index d3555173d9f4..04df9920282d 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -119,6 +119,7 @@ config RISCV select HAVE_FUNCTION_GRAPH_RETVAL if HAVE_FUNCTION_GRAPH_TRACER select HAVE_FUNCTION_TRACER if !XIP_KERNEL && !PREEMPTION select HAVE_EBPF_JIT if MMU + select HAVE_FAST_GUP if MMU select HAVE_FUNCTION_ARG_ACCESS_API select HAVE_FUNCTION_ERROR_INJECTION select HAVE_GCC_PLUGINS diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h index ab00235b018f..c6eb214139e6 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -673,6 +673,12 @@ static inline int pmd_write(pmd_t pmd) return pte_write(pmd_pte(pmd)); } +#define pud_write pud_write +static inline int pud_write(pud_t pud) +{ + return pte_write(pud_pte(pud)); +} + static inline int pmd_dirty(pmd_t pmd) { return pte_dirty(pmd_pte(pmd));
Activate the fast gup for riscv mmu platforms. Here are some GUP_FAST_BENCHMARK performance numbers: Before the patch: GUP_FAST_BENCHMARK: Time: get:53203 put:5085 us After the patch: GUP_FAST_BENCHMARK: Time: get:17711 put:5060 us The get time is reduced by 66.7%! IOW, 3x get speed! Signed-off-by: Jisheng Zhang <jszhang@kernel.org> --- arch/riscv/Kconfig | 1 + arch/riscv/include/asm/pgtable.h | 6 ++++++ 2 files changed, 7 insertions(+)