From: kbuild test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [RFC v1] mm: add page preemption
Date: Tue, 22 Oct 2019 13:40:18 +0800 [thread overview]
Message-ID: <201910221352.KLgww2SY%lkp@intel.com> (raw)
In-Reply-To: <20191020134304.11700-1-hdanton@sina.com>
[-- Attachment #1: Type: text/plain, Size: 10948 bytes --]
Hi Hillf,
[FYI, it's a private test report for your RFC patch.]
[auto build test WARNING on mmotm/master]
url: https://github.com/0day-ci/linux/commits/Hillf-Danton/mm-add-page-preemption/20191022-083630
base: git://git.cmpxchg.org/linux-mmotm.git master
config: x86_64-randconfig-f003-201942 (attached as .config)
compiler: gcc-7 (Debian 7.4.0-14) 7.4.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from include/asm-generic/bug.h:5:0,
from arch/x86/include/asm/bug.h:83,
from include/linux/bug.h:5,
from include/linux/mmdebug.h:5,
from include/linux/mm.h:9,
from mm/vmscan.c:17:
mm/vmscan.c: In function 'isolate_lru_pages':
mm/vmscan.c:1726:34: error: 'struct scan_control' has no member named 'reclaimer_prio'; did you mean 'reclaim_idx'?
page_prio_higher(page, sc->reclaimer_prio))
^
include/linux/compiler.h:58:52: note: in definition of macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
>> mm/vmscan.c:1723:3: note: in expansion of macro 'if'
if (IS_ENABLED(CONFIG_PAGE_PREEMPTION) &&
^~
mm/vmscan.c:1726:34: error: 'struct scan_control' has no member named 'reclaimer_prio'; did you mean 'reclaim_idx'?
page_prio_higher(page, sc->reclaimer_prio))
^
include/linux/compiler.h:58:61: note: in definition of macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
>> mm/vmscan.c:1723:3: note: in expansion of macro 'if'
if (IS_ENABLED(CONFIG_PAGE_PREEMPTION) &&
^~
mm/vmscan.c:1726:34: error: 'struct scan_control' has no member named 'reclaimer_prio'; did you mean 'reclaim_idx'?
page_prio_higher(page, sc->reclaimer_prio))
^
include/linux/compiler.h:69:3: note: in definition of macro '__trace_if_value'
(cond) ? \
^~~~
include/linux/compiler.h:56:28: note: in expansion of macro '__trace_if_var'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~~~~~~~~~~~
>> mm/vmscan.c:1723:3: note: in expansion of macro 'if'
if (IS_ENABLED(CONFIG_PAGE_PREEMPTION) &&
^~
mm/vmscan.c: In function 'balance_pgdat':
mm/vmscan.c:3759:7: error: 'struct scan_control' has no member named 'reclaimer_prio'; did you mean 'reclaim_idx'?
sc.reclaimer_prio = pgdat->kswapd_prio;
^~~~~~~~~~~~~~
reclaim_idx
mm/vmscan.c:3759:31: error: 'pg_data_t {aka struct pglist_data}' has no member named 'kswapd_prio'; did you mean 'kswapd_wait'?
sc.reclaimer_prio = pgdat->kswapd_prio;
^~~~~~~~~~~
kswapd_wait
mm/vmscan.c: In function 'kswapd_try_to_sleep':
mm/vmscan.c:3854:11: error: 'pg_data_t {aka struct pglist_data}' has no member named 'kswapd_prio'; did you mean 'kswapd_wait'?
pgdat->kswapd_prio = MAX_PRIO + 1;
^~~~~~~~~~~
kswapd_wait
mm/vmscan.c:3893:12: error: 'pg_data_t {aka struct pglist_data}' has no member named 'kswapd_prio'; did you mean 'kswapd_wait'?
pgdat->kswapd_prio = MAX_PRIO + 1;
^~~~~~~~~~~
kswapd_wait
mm/vmscan.c: In function 'kswapd':
mm/vmscan.c:3949:10: error: 'pg_data_t {aka struct pglist_data}' has no member named 'kswapd_prio'; did you mean 'kswapd_wait'?
pgdat->kswapd_prio = MAX_PRIO + 1;
^~~~~~~~~~~
kswapd_wait
In file included from include/asm-generic/bug.h:5:0,
from arch/x86/include/asm/bug.h:83,
from include/linux/bug.h:5,
from include/linux/mmdebug.h:5,
from include/linux/mm.h:9,
from mm/vmscan.c:17:
mm/vmscan.c: In function 'wakeup_kswapd':
mm/vmscan.c:4021:14: error: 'pg_data_t {aka struct pglist_data}' has no member named 'kswapd_prio'; did you mean 'kswapd_wait'?
if (pgdat->kswapd_prio < prio) {
^
include/linux/compiler.h:58:52: note: in definition of macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
mm/vmscan.c:4021:3: note: in expansion of macro 'if'
if (pgdat->kswapd_prio < prio) {
^~
mm/vmscan.c:4021:14: error: 'pg_data_t {aka struct pglist_data}' has no member named 'kswapd_prio'; did you mean 'kswapd_wait'?
if (pgdat->kswapd_prio < prio) {
^
include/linux/compiler.h:58:61: note: in definition of macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
mm/vmscan.c:4021:3: note: in expansion of macro 'if'
if (pgdat->kswapd_prio < prio) {
^~
mm/vmscan.c:4021:14: error: 'pg_data_t {aka struct pglist_data}' has no member named 'kswapd_prio'; did you mean 'kswapd_wait'?
if (pgdat->kswapd_prio < prio) {
^
include/linux/compiler.h:69:3: note: in definition of macro '__trace_if_value'
(cond) ? \
^~~~
include/linux/compiler.h:56:28: note: in expansion of macro '__trace_if_var'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~~~~~~~~~~~
mm/vmscan.c:4021:3: note: in expansion of macro 'if'
if (pgdat->kswapd_prio < prio) {
^~
mm/vmscan.c:4025:10: error: 'pg_data_t {aka struct pglist_data}' has no member named 'kswapd_prio'; did you mean 'kswapd_wait'?
pgdat->kswapd_prio = prio;
^~~~~~~~~~~
kswapd_wait
vim +/if +1723 mm/vmscan.c
1668
1669 /**
1670 * pgdat->lru_lock is heavily contended. Some of the functions that
1671 * shrink the lists perform better by taking out a batch of pages
1672 * and working on them outside the LRU lock.
1673 *
1674 * For pagecache intensive workloads, this function is the hottest
1675 * spot in the kernel (apart from copy_*_user functions).
1676 *
1677 * Appropriate locks must be held before calling this function.
1678 *
1679 * @nr_to_scan: The number of eligible pages to look through on the list.
1680 * @lruvec: The LRU vector to pull pages from.
1681 * @dst: The temp list to put pages on to.
1682 * @nr_scanned: The number of pages that were scanned.
1683 * @sc: The scan_control struct for this reclaim session
1684 * @mode: One of the LRU isolation modes
1685 * @lru: LRU list id for isolating
1686 *
1687 * returns how many pages were moved onto *@dst.
1688 */
1689 static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
1690 struct lruvec *lruvec, struct list_head *dst,
1691 unsigned long *nr_scanned, struct scan_control *sc,
1692 enum lru_list lru)
1693 {
1694 struct list_head *src = &lruvec->lists[lru];
1695 unsigned long nr_taken = 0;
1696 unsigned long nr_zone_taken[MAX_NR_ZONES] = { 0 };
1697 unsigned long nr_skipped[MAX_NR_ZONES] = { 0, };
1698 unsigned long skipped = 0;
1699 unsigned long scan, total_scan, nr_pages;
1700 LIST_HEAD(pages_skipped);
1701 isolate_mode_t mode = (sc->may_unmap ? 0 : ISOLATE_UNMAPPED);
1702
1703 total_scan = 0;
1704 scan = 0;
1705 while (scan < nr_to_scan && !list_empty(src)) {
1706 struct page *page;
1707
1708 page = lru_to_page(src);
1709 prefetchw_prev_lru_page(page, src, flags);
1710
1711 VM_BUG_ON_PAGE(!PageLRU(page), page);
1712
1713 nr_pages = compound_nr(page);
1714 total_scan += nr_pages;
1715
1716 if (page_zonenum(page) > sc->reclaim_idx) {
1717 next_page:
1718 list_move(&page->lru, &pages_skipped);
1719 nr_skipped[page_zonenum(page)] += nr_pages;
1720 continue;
1721 }
1722
> 1723 if (IS_ENABLED(CONFIG_PAGE_PREEMPTION) &&
1724 is_active_lru(lru) &&
1725 global_reclaim(sc) &&
1726 page_prio_higher(page, sc->reclaimer_prio))
1727 goto next_page;
1728
1729 /*
1730 * Do not count skipped pages because that makes the function
1731 * return with no isolated pages if the LRU mostly contains
1732 * ineligible pages. This causes the VM to not reclaim any
1733 * pages, triggering a premature OOM.
1734 *
1735 * Account all tail pages of THP. This would not cause
1736 * premature OOM since __isolate_lru_page() returns -EBUSY
1737 * only when the page is being freed somewhere else.
1738 */
1739 scan += nr_pages;
1740 switch (__isolate_lru_page(page, mode)) {
1741 case 0:
1742 nr_taken += nr_pages;
1743 nr_zone_taken[page_zonenum(page)] += nr_pages;
1744 list_move(&page->lru, dst);
1745 break;
1746
1747 case -EBUSY:
1748 /* else it is being freed elsewhere */
1749 list_move(&page->lru, src);
1750 continue;
1751
1752 default:
1753 BUG();
1754 }
1755 }
1756
1757 /*
1758 * Splice any skipped pages to the start of the LRU list. Note that
1759 * this disrupts the LRU order when reclaiming for lower zones but
1760 * we cannot splice to the tail. If we did then the SWAP_CLUSTER_MAX
1761 * scanning would soon rescan the same pages to skip and put the
1762 * system at risk of premature OOM.
1763 */
1764 if (!list_empty(&pages_skipped)) {
1765 int zid;
1766
1767 list_splice(&pages_skipped, src);
1768 for (zid = 0; zid < MAX_NR_ZONES; zid++) {
1769 if (!nr_skipped[zid])
1770 continue;
1771
1772 __count_zid_vm_events(PGSCAN_SKIP, zid, nr_skipped[zid]);
1773 skipped += nr_skipped[zid];
1774 }
1775 }
1776 *nr_scanned = total_scan;
1777 trace_mm_vmscan_lru_isolate(sc->reclaim_idx, sc->order, nr_to_scan,
1778 total_scan, skipped, nr_taken, mode, lru);
1779 update_lru_sizes(lruvec, lru, nr_zone_taken);
1780 return nr_taken;
1781 }
1782
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32269 bytes --]
next prev parent reply other threads:[~2019-10-22 5:40 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-20 13:43 [RFC v1] mm: add page preemption Hillf Danton
2019-10-20 15:24 ` Matthew Wilcox
2019-10-21 12:27 ` Michal Hocko
2019-10-22 1:41 ` Hillf Danton
2019-10-22 5:40 ` kbuild test robot [this message]
2019-10-22 12:14 ` Hillf Danton
2019-10-22 12:42 ` Michal Hocko
2019-10-22 14:28 ` Hillf Danton
2019-10-23 8:17 ` Michal Hocko
2019-10-23 11:53 ` Hillf Danton
2019-10-23 12:04 ` Michal Hocko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201910221352.KLgww2SY%lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.