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: