It is likely that the backing object has the page ready to use, which can be handled with a read lock only (or even without locks, but I did not go for it right now).
commit 19d3829d1c48ca41b223e1079ab58f50240a8ae4 (HEAD -> vm15local) Author: Mateusz Guzik <mjg@FreeBSD.org> Date: Sat Aug 20 11:17:46 2022 +0000 vm: read-locked backing object fault handling This largely eliminates vm object contention when doing -j 104 buildkernel of stable/12: before: 103744637 (rw:vm object) 6091096 (spin mutex:turnstile chain) 4682478 (rw:pmap pv list) 4658491 (sleep mutex:process lock) after: 22508492 (rw:pmap pv list) 5903096 (sleep mutex:process lock) 2476543 (sx:vm map (user)) 1119649 (sleep mutex:pmap) Reviewed by: Differential Revision: commit f1b93cc2b18a627d64afa34043faa3bb3948195b Author: Mateusz Guzik <mjg@FreeBSD.org> Date: Sun Aug 7 13:07:59 2022 +0000 vm: include function name when checking vm_fault_object retval Reviewed by: Differential Revision: commit 0417436c08afed77fbead93eeb192e6b67dce815 Author: Mateusz Guzik <mjg@FreeBSD.org> Date: Sun Aug 7 13:05:47 2022 +0000 vm: move up object lock asserts in fault functions No functional changes. Reviewed by: Differential Revision: commit d8eda53492c18f75a81e6b3f171e45403ffae517 Author: Mateusz Guzik <mjg@FreeBSD.org> Date: Sat Aug 20 12:27:23 2022 +0000 vm: employ vm_page_aflag_set_cond in vm_fault_busy_sleep Reviewed by: Differential Revision: commit 78765a4a0308b22d15bd86bb70e89a510799c538 Author: Mateusz Guzik <mjg@FreeBSD.org> Date: Sat Aug 20 12:26:39 2022 +0000 vm: add vm_page_aflag_set_cond Reduces ping-ponging if the bits to set are already there. Reviewed by: Differential Revision: