Re: [PATCH 11/28] mm: factor shrinker work calculations

From: kbuild test robot
Date: Sat Nov 02 2019 - 06:56:34 EST


Hi Dave,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on xfs-linux/for-next]
[also build test WARNING on v5.4-rc5 next-20191031]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url: https://github.com/0day-ci/linux/commits/Dave-Chinner/xfs-Lower-CIL-flush-limit-for-large-logs/20191102-153137
base: https://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git for-next
config: parisc-c3000_defconfig (attached as .config)
compiler: hppa-linux-gcc (GCC) 7.4.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.4.0 make.cross ARCH=parisc

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

In file included from ./arch/parisc/include/generated/asm/div64.h:1:0,
from include/linux/kernel.h:18,
from arch/parisc/include/asm/bug.h:5,
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 'shrink_scan_count':
include/asm-generic/div64.h:226:28: warning: comparison of distinct pointer types lacks a cast
(void)(((typeof((n)) *)0) == ((uint64_t *)0)); \
^
>> mm/vmscan.c:502:3: note: in expansion of macro 'do_div'
do_div(delta, shrinker->seeks);
^~~~~~

vim +/do_div +502 mm/vmscan.c

460
461 /*
462 * Calculate the number of new objects to scan this time around. Return
463 * the work to be done. If there are freeable objects, return that number in
464 * @freeable_objects.
465 */
466 static int64_t shrink_scan_count(struct shrink_control *shrinkctl,
467 struct shrinker *shrinker, int priority,
468 int64_t *freeable_objects)
469 {
470 int64_t delta;
471 int64_t freeable;
472
473 freeable = shrinker->count_objects(shrinker, shrinkctl);
474 if (freeable == 0 || freeable == SHRINK_EMPTY)
475 return freeable;
476
477 if (shrinker->seeks) {
478 /*
479 * shrinker->seeks is a measure of how much IO is required to
480 * reinstantiate the object in memory. The default value is 2
481 * which is typical for a cold inode requiring a directory read
482 * and an inode read to re-instantiate.
483 *
484 * The scan batch size is defined by the shrinker priority, but
485 * to be able to bias the reclaim we increase the default batch
486 * size by 4. Hence we end up with a scan batch multipler that
487 * scales like so:
488 *
489 * ->seeks scan batch multiplier
490 * 1 4.00x
491 * 2 2.00x
492 * 3 1.33x
493 * 4 1.00x
494 * 8 0.50x
495 *
496 * IOWs, the more seeks it takes to pull the item into cache,
497 * the smaller the reclaim scan batch. Hence we put more reclaim
498 * pressure on caches that are fast to repopulate and to keep a
499 * rough balance between caches that have different costs.
500 */
501 delta = freeable >> (priority - 2);
> 502 do_div(delta, shrinker->seeks);
503 } else {
504 /*
505 * These objects don't require any IO to create. Trim them
506 * aggressively under memory pressure to keep them from causing
507 * refetches in the IO caches.
508 */
509 delta = freeable / 2;
510 }
511
512 *freeable_objects = freeable;
513 return delta > 0 ? delta : 0;
514 }
515

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip