From 0de6004f3c4b6c0d9c50014c604793d658cd1421 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Mon, 11 Dec 2023 22:12:54 +0000 Subject: Implement per-CPU caching for the page table page (vp) pool and the PTE descriptor (pted) pool in the arm64 pmap implementation. This significantly reduces the side-effects of lock contention on the kernel map lock that is (incorrectly) translated into excessive page daemon wakeups. This is not a perfect solution but it does lead to significant speedups on machines with many CPU cores. This requires adding a new pmap_init_percpu() function that gets called at the point where kernel is ready to set up the per-CPU pool caches. Dummy implementations of this function are added for all non-arm64 architectures. Some other architectures can probably benefit from providing an actual implementation that sets up per-CPU caches for pmap pools as well. ok phessler@, claudio@, miod@, patrick@ --- sys/arch/arm/include/pmap.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'sys/arch/arm') diff --git a/sys/arch/arm/include/pmap.h b/sys/arch/arm/include/pmap.h index 0622bc9c253..fa3cb731f4b 100644 --- a/sys/arch/arm/include/pmap.h +++ b/sys/arch/arm/include/pmap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.h,v 1.54 2023/04/13 15:23:22 miod Exp $ */ +/* $OpenBSD: pmap.h,v 1.55 2023/12/11 22:12:53 kettenis Exp $ */ /* $NetBSD: pmap.h,v 1.76 2003/09/06 09:10:46 rearnsha Exp $ */ /* @@ -241,6 +241,7 @@ extern struct pmap kernel_pmap_store; #define pmap_deactivate(p) do { /* nothing */ } while (0) +#define pmap_init_percpu() do { /* nothing */ } while (0) #define pmap_unuse_final(p) do { /* nothing */ } while (0) #define pmap_remove_holes(vm) do { /* nothing */ } while (0) -- cgit v1.2.3