mirror of https://gitee.com/openkylin/linux.git
[S390] Optimize storage key operations for anon pages
For anonymous pages without a swap cache backing the check in page_remove_rmap for the physical dirty bit in page_remove_rmap is unnecessary. The instructions that are used to check and reset the dirty bit are expensive. Removing the check noticably speeds up process exit. In addition the clearing of the dirty bit in __SetPageUptodate is pointless as well. With these two changes there is no storage key operation for an anonymous page anymore if it does not hit the swap space. The micro benchmark which repeatedly executes an empty shell script gets about 5% faster. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
934b2857cc
commit
a4b526b3ba
|
@ -239,9 +239,6 @@ static inline void __SetPageUptodate(struct page *page)
|
|||
{
|
||||
smp_wmb();
|
||||
__set_bit(PG_uptodate, &(page)->flags);
|
||||
#ifdef CONFIG_S390
|
||||
page_clear_dirty(page);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void SetPageUptodate(struct page *page)
|
||||
|
|
|
@ -667,7 +667,8 @@ void page_remove_rmap(struct page *page, struct vm_area_struct *vma)
|
|||
* Leaving it set also helps swapoff to reinstate ptes
|
||||
* faster for those pages still in swapcache.
|
||||
*/
|
||||
if (page_test_dirty(page)) {
|
||||
if ((!PageAnon(page) || PageSwapCache(page)) &&
|
||||
page_test_dirty(page)) {
|
||||
page_clear_dirty(page);
|
||||
set_page_dirty(page);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue