Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp4602963ybv; Mon, 10 Feb 2020 23:28:49 -0800 (PST) X-Google-Smtp-Source: APXvYqyq3AUMSkIcVXk1mEH3J0mt4fwaucBfm2SBP/J8J+osKlBhaqMNurPhR/L0vBqV4iz743Y/ X-Received: by 2002:aca:c08b:: with SMTP id q133mr1977641oif.46.1581406128540; Mon, 10 Feb 2020 23:28:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581406128; cv=none; d=google.com; s=arc-20160816; b=o07Al2rv0RKmYW8iJRQEYvwkRuborRtfEmtoRzhDSuu9r0X2Lzno30qSJHXiUKVOTM 9nPIQilQ33xcJPgVUdMyUcEt7AInnUicRfljiMFElI3uWbhwqGN3017C7x9qs0wE29En yES0LPOOm0KYV1R8vtTvr3iNLogLwIIQVdrPGVPyNE4ufjbfsJL4Swh62muInc381QhP ueiExiNgPw1T9XfG4j40xO+TUUhsGnwxrNLB9uPX+KmnwCOK1ScnlMI3TyYncL+Bswqp 4rGZh9CU3iIG8eBXy0fKMlyPoEpX8t8pAh8a/SbO5d0kS0YmLzm0GA2UbfDsXjbt/JjW 1JDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=7LP0sMYBzl+D2JqY2Soygzltfk1AIpMooW3/Su409nk=; b=Tr5v6vuOLLIE4VyrmfCo0MYJnpU96DEwoZ6REiBly6wl8enrb/9Y9oZhXgOn/ES08d 0v5lcWvTLcg8/0rDsCdG8rD3+wd6MX5dGP6VqSvMetaEy8gnwTZIxgI7B1BrE8kpnCeF 0DcEj4EA5kQvax2YKkJ9MBrTcJosW+sIPic9vdU5qaIKY9glP4cRfxi+GNJQKy81UwuO bG5Uq5mnM5rE0ijHFZSPa81cAFY7yjJdmITg3WpYUncdWrQ8jv0Nb5HYSUA1T+xkWrE2 VvX9Lrzl6VIY4cEvwV0YMPqelK7ToNXvFQOfeDHy6RHmrjKlpt5jWf6BmHxZaNMgrRzP PRzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=BzmseVny; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s128si1349920oig.204.2020.02.10.23.28.37; Mon, 10 Feb 2020 23:28:48 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=BzmseVny; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728018AbgBKGUm (ORCPT + 99 others); Tue, 11 Feb 2020 01:20:42 -0500 Received: from mail-pg1-f196.google.com ([209.85.215.196]:36732 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727870AbgBKGUk (ORCPT ); Tue, 11 Feb 2020 01:20:40 -0500 Received: by mail-pg1-f196.google.com with SMTP id d9so5167436pgu.3 for ; Mon, 10 Feb 2020 22:20:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7LP0sMYBzl+D2JqY2Soygzltfk1AIpMooW3/Su409nk=; b=BzmseVnyVt2mzXgZKqt/KT8OSaDMTAG/OG9ViGWylPV390jMQ4NzWavfnpMYOKxJqU PJM7DSfyn3hga72bfGoOSLNm2iP3YoxosN9PpoUhJ3afpUx49INK0biaoCpglFvUpWJD i+r4jeuek+ERCuQv56g8ZchtqCZiszeL15Y9mpjugEA0upkB0d9DYBt7j562iQpmN1xe NlAKq5t1ljSmgYEZ+zAEPOKb6fjPrcXdbVipYtwRDNJ7aV0aexMTqnNoQ3kzzBDZbXjT O8/Hd+iY2HR7+UoogRctV5mmz1+bgDj/V73u6oBpdg8bRo5LB7JBtedzkhA9fItnE4B1 c/KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7LP0sMYBzl+D2JqY2Soygzltfk1AIpMooW3/Su409nk=; b=tYZ+qy8TexSnjZ8sXDUFafyTed5DgwU9woU/U2KDVnh4GpbaMfDUViOBpJ/166o8+h pEO1IMSX5TuYabD/QcKkwsFM1gtlprcjwcUBjZsNle71mr/6YFW3G0kHRYjXeFuBh4T7 rma2eqBfprbAWhLFJROlIFF2vWmsyR+l0i4muJTQ/cyq76CFK/jxhfYJfTbifcmM4iN1 bZRI00CGHi2yBkOLavCIeZPbMO6ueju9E2WDtHLlWi42YDnM6gK0zEXawrloOCtivv/j N/l05gyYqSGho592pXtpx7/FNUR2TOiJSlIk4yyt3CcJhpGSbfVaX7OHGsPUDSGqPQtB d23w== X-Gm-Message-State: APjAAAUYnRtusfeidAMjJpTMXFFBOj21ghIinE5v248ALhWdaPYK7d5e 1u/IhIOlLIVKR1Lx3BfoJbM= X-Received: by 2002:a05:6a00:5b:: with SMTP id i27mr1781402pfk.112.1581402038202; Mon, 10 Feb 2020 22:20:38 -0800 (PST) Received: from localhost.localdomain ([114.206.198.176]) by smtp.gmail.com with ESMTPSA id x197sm2578696pfc.1.2020.02.10.22.20.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 10 Feb 2020 22:20:37 -0800 (PST) From: js1304@gmail.com X-Google-Original-From: iamjoonsoo.kim@lge.com To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Johannes Weiner , Michal Hocko , Hugh Dickins , Minchan Kim , Vlastimil Babka , Mel Gorman , kernel-team@lge.com, Joonsoo Kim Subject: [PATCH 9/9] mm/swap: count a new anonymous page as a reclaim_state's rotate Date: Tue, 11 Feb 2020 15:19:53 +0900 Message-Id: <1581401993-20041-10-git-send-email-iamjoonsoo.kim@lge.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1581401993-20041-1-git-send-email-iamjoonsoo.kim@lge.com> References: <1581401993-20041-1-git-send-email-iamjoonsoo.kim@lge.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Joonsoo Kim reclaim_stat's rotate is used for controlling the ratio of scanning page between file and anonymous LRU. All new anonymous pages are counted for rotate before the patch, protecting anonymous pages on active LRU, and, it makes that reclaim on anonymous LRU is less happened than file LRU. Now, situation is changed. all new anonymous pages are not added to the active LRU so rotate would be far less than before. It will cause that reclaim on anonymous LRU happens more and it would result in bad effect on some system that is optimized for previous setting. Therefore, this patch counts a new anonymous page as a reclaim_state's rotate. Although it is non-logical to add this count to the reclaim_state's rotate in current algorithm, reducing the regression would be more important. I found this regression on kernel-build test and it is roughly 2~5% performance degradation. With this workaround, performance is completely restored. Signed-off-by: Joonsoo Kim --- mm/swap.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/mm/swap.c b/mm/swap.c index 18b2735..c3584af 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -187,6 +187,9 @@ int get_kernel_page(unsigned long start, int write, struct page **pages) } EXPORT_SYMBOL_GPL(get_kernel_page); +static void __pagevec_lru_add_fn(struct page *page, struct lruvec *lruvec, + void *arg); + static void pagevec_lru_move_fn(struct pagevec *pvec, void (*move_fn)(struct page *page, struct lruvec *lruvec, void *arg), void *arg) @@ -207,6 +210,19 @@ static void pagevec_lru_move_fn(struct pagevec *pvec, spin_lock_irqsave(&pgdat->lru_lock, flags); } + if (move_fn == __pagevec_lru_add_fn) { + struct list_head *entry = &page->lru; + unsigned long next = (unsigned long)entry->next; + unsigned long rotate = next & 2; + + if (rotate) { + VM_BUG_ON(arg); + + next = next & ~2; + entry->next = (struct list_head *)next; + arg = (void *)rotate; + } + } lruvec = mem_cgroup_page_lruvec(page, pgdat); (*move_fn)(page, lruvec, arg); } @@ -475,6 +491,14 @@ void lru_cache_add_inactive_or_unevictable(struct page *page, hpage_nr_pages(page)); count_vm_event(UNEVICTABLE_PGMLOCKED); } + + if (PageSwapBacked(page) && evictable) { + struct list_head *entry = &page->lru; + unsigned long next = (unsigned long)entry->next; + + next = next | 2; + entry->next = (struct list_head *)next; + } lru_cache_add(page); } @@ -927,6 +951,7 @@ static void __pagevec_lru_add_fn(struct page *page, struct lruvec *lruvec, { enum lru_list lru; int was_unevictable = TestClearPageUnevictable(page); + unsigned long rotate = (unsigned long)arg; VM_BUG_ON_PAGE(PageLRU(page), page); @@ -962,7 +987,7 @@ static void __pagevec_lru_add_fn(struct page *page, struct lruvec *lruvec, if (page_evictable(page)) { lru = page_lru(page); update_page_reclaim_stat(lruvec, page_is_file_cache(page), - PageActive(page)); + PageActive(page) | rotate); if (was_unevictable) count_vm_event(UNEVICTABLE_PGRESCUED); } else { -- 2.7.4