Date: Tue, 20 Jul 2010 12:35:56 -0500 From: Alan Cox <alc@cs.rice.edu> To: Mark Tinguely <marktinguely@gmail.com> Cc: alc@freebsd.org, freebsd-arm@freebsd.org Subject: Re: Revision 209887 Message-ID: <4C45DE7C.5080207@cs.rice.edu> In-Reply-To: <4C45D88A.30107@gmail.com> References: <4C45D88A.30107@gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Mark Tinguely wrote: > This is a FYI on the pmap_qenter() change in the i386/amd64 - revision > 209887. > PS to last week's email. Sorry I did not keep the message-id consistent. > > A similar change in the ARM pmap_kenter_internal() seems to help > significantly. Running a port (bash3) compile on a modified GUMSTIX > kernel on an emulator, I am getting mid-teen percentages of mapping > request that we do not have to do. An example snapshot of the counts: > > 2475 kenter()s not needed. > 11479 enters required. > All 11479 old ptes were zero because we aggressively remove > dangling allocation. > > As the compilation continues, the ratio between kenter()s not needed > per kenters() needed goes up. > > The numbers above assume a patch for vfs_unbusy_pages() that is the > duplicate to the one in bufdone_finish(). In theory the > vfs_unbusy_pages() should help keep the number of unnecessary > pmap_qenter() calls down, so the above numbers could only be higher > without that patch. > Keep in mind that vfs_unbusy_pages() is only used by the NFS client code, so it may not affect your particular test anyway. > I also propose to removed the calls to pmap_wb_page() in pmap_qenter() > and pmap_inv_page() in pmap_qremove(): > In pmap_qenter(), pmap_fix_cache() will write back the page mappings > and turn off caching if shared. > If the page was shared when pmap_qremove() is called, the caches will > already be turned off, and pmap_kremove() will writeback and > invalidate this mapping during the removal process. > Alan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4C45DE7C.5080207>