Revision 209887
Alan Cox
alc at cs.rice.edu
Tue Jul 20 17:36:05 UTC 2010
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
More information about the freebsd-arm
mailing list