All of lore.kernel.org
 help / color / mirror / Atom feed
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 --]

  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.