No description
Find a file
Roman Gushchin 68600f623d mm: don't miss the last page because of round-off error
I've noticed, that dying memory cgroups are often pinned in memory by a
single pagecache page.  Even under moderate memory pressure they sometimes
stayed in such state for a long time.  That looked strange.

My investigation showed that the problem is caused by applying the LRU
pressure balancing math:

  scan = div64_u64(scan * fraction[lru], denominator),

where

  denominator = fraction[anon] + fraction[file] + 1.

Because fraction[lru] is always less than denominator, if the initial scan
size is 1, the result is always 0.

This means the last page is not scanned and has
no chances to be reclaimed.

Fix this by rounding up the result of the division.

In practice this change significantly improves the speed of dying cgroups
reclaim.

[guro@fb.com: prevent double calculation of DIV64_U64_ROUND_UP() arguments]
  Link: http://lkml.kernel.org/r/20180829213311.GA13501@castle
Link: http://lkml.kernel.org/r/20180827162621.30187-3-guro@fb.com
Signed-off-by: Roman Gushchin <guro@fb.com>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Tejun Heo <tj@kernel.org>
Cc: Rik van Riel <riel@surriel.com>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2018-10-26 16:25:19 -07:00
arch xtensa: use generic vga.h 2018-10-26 16:25:18 -07:00
block
certs
crypto
Documentation slub: extend slub debug to handle multiple slabs 2018-10-26 16:25:19 -07:00
drivers Char/Misc driver patches for 4.20-rc1 2018-10-26 09:11:43 -07:00
firmware
fs fs/iomap.c: change return type to vm_fault_t 2018-10-26 16:25:18 -07:00
include mm: don't miss the last page because of round-off error 2018-10-26 16:25:19 -07:00
init
ipc
kernel mm: rework memcg kernel stack accounting 2018-10-26 16:25:19 -07:00
lib lib/test_kasan.c: add tests for several string/memory API functions 2018-10-26 16:25:18 -07:00
LICENSES
mm mm: don't miss the last page because of round-off error 2018-10-26 16:25:19 -07:00
net
samples Char/Misc driver patches for 4.20-rc1 2018-10-26 09:11:43 -07:00
scripts scripts/tags.sh: add DECLARE_HASHTABLE() 2018-10-26 16:25:18 -07:00
security
sound
tools USB/PHY patches for 4.20-rc1 2018-10-26 08:14:13 -07:00
usr
virt KVM updates for v4.20 2018-10-25 17:57:35 -07:00
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS Char/Misc driver patches for 4.20-rc1 2018-10-26 09:11:43 -07:00
Makefile
README

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.