Date: Tue, 20 Jul 2010 12:10:34 -0500 From: Mark Tinguely <marktinguely@gmail.com> To: freebsd-arm@freebsd.org Cc: alc@freebsd.org Subject: Revision 209887 Message-ID: <4C45D88A.30107@gmail.com>
next in thread | raw e-mail | index | archive | help
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. 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. --Mark.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4C45D88A.30107>