NetBSD-Bugs archive

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

kern/55432: Optimize uvm_fault for pagesize larger than 4k

>Number:         55432
>Category:       kern
>Synopsis:       Optimize uvm_fault for pagesize larger than 4k
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 30 07:05:00 +0000 2020
>Originator:     Rin Okuyama
>Release:        9.99.68 and netbsd-9 (and older release branches also)
Department of Physics, Meiji University
NetBSD obs266 9.99.68 NetBSD 9.99.68 (OBS266) #284: Mon Jun 29 23:06:25 JST 2020  rin@latipes:/usr/src/sys/arch/evbppc/compile/OBS266 evbppc

NetBSD erlite 9.0_STABLE NetBSD 9.0_STABLE (ERLITE) #1: Sun Jun 28 23:05:51 JST 2020  rin@latipes:/build/work/src/sys/arch/evbmips/compile/ERLITE evbmips
uvm_fault() resolves not only a page containing the fault address, but
also pages around it speculatively. Number of pages to be resolved is
hardcoded for types of fault:

These values are taken from FreeBSD, whose main targets have 4k pages.

The problem is for pages larger than 4k, say, if the machine has 16k
pages, 4 times of pages are resolved speculatively. This seems too
much. Therefore, I would like to propose to rescale these values so
that amount of memory to be resolved is approximately same as that
for 4k page:

With this patch, nothing changes for 4k pages. (Also, if pagesize is
smaller than 4k, i.e., mc68010, do not rescale for safety; it is
already suffering from memory shortage.)

For machines with pagesize larger than 4k, the performance is clearly
improved. I've carried out simple benchmark by measuring time to make

For PowerPC 405GPr (powerpc/ibm4xx, 16k pages):
before:	12414.44 real     11117.19 user      1172.01 sys
after:	12103.14 real     10859.51 user      1125.75 sys
Improve in real: 2.51%

For Cavium CN50xx (evbmips/mips64, 8k pages):
before:	3607.57 real      2862.35 user       472.94 sys
after:	3519.00 real      2844.17 user       430.26 sys
Improve in real: 2.46%

(Note that since -current is unstable for mips64, netbsd-9 is used
for Cavium CN50xx.)

Thoughts? Can I commit the patch?

Also, the current hard-coded value may be not optimal even for 4k
pages. It is take from FreeBSD as of 1998, and FreeBSD seems to adjust
# of pages on demand now. See their sys/vm/vm_fault.c.
Code inspection and benchmark as described above.
Described above.

Home | Main Index | Thread Index | Old Index