[PATCH v14 0/5] xenbus/backend: Add memory pressure handler callback

From: sjpark
Date: Mon Jan 27 2020 - 03:18:45 EST


From: SeongJae Park <sjpark@xxxxxxxxx>

Granting pages consumes backend system memory. In systems configured
with insufficient spare memory for those pages, it can cause a memory
pressure situation. However, finding the optimal amount of the spare
memory is challenging for large systems having dynamic resource
utilization patterns. Also, such a static configuration might lack
flexibility.

To mitigate such problems, this patchset adds a memory reclaim callback
to 'xenbus_driver' (patch 1) and then introduce a lock for race
condition avoidance (patch 2). After that, patch 3 applies the callback
mechanism to mitigate the problem in 'xen-blkback'. The fourth and
fifth patches are trivial cleanups; those fix nits we found during the
development of this patchset.

Note that this patch has only trivial changes from v13. Please refer to
below patch history for the changes.


Base Version
------------

This patch is based on v5.5 Linux kernel. A complete tree is also
available at my public git repo:
https://github.com/sjp38/linux/tree/patches/blkback/buffer_squeeze/v14


Patch History
-------------

Changes from v13
(https://lore.kernel.org/xen-devel/20191218183718.31719-1-sjpark@xxxxxxxxxx/)
- Rebase on v5.5
- Add 'Reviewed-by' tags
- Update applied version of the new blkback parameter (5.5 -> 5.6)

Changes from v12
(https://lore.kernel.org/xen-devel/20191218104232.9606-1-sjpark@xxxxxxxxxx/)
- Do not unnecessarily disable interrupts (suggested by Juergen)
- Hold lock from xenbus side (suggested by Juergen)

Changes from v11
(https://lore.kernel.org/xen-devel/20191217160748.693-2-sjpark@xxxxxxxxxx/)
- Fix wrong trylock use (reported by Juergen)
- Merge patch 3 and 4 (suggested by Juergen)
- Update test result

Changes from v10
(https://lore.kernel.org/xen-devel/20191216124527.30306-1-sjpark@xxxxxxxxxx/)
- Fix race condition (reported by SeongJae, suggested by Juergen)

Changes from v9
(https://lore.kernel.org/xen-devel/20191213153546.17425-1-sjpark@xxxxxxxxx/)
- Add 'Reviewed-by' and 'Acked-by' from Roger Pau MonnÃ
- Update the commit message for overhead test of the 2nd path

Changes from v8
(https://lore.kernel.org/xen-devel/20191213130211.24011-1-sjpark@xxxxxxxxx/)
- Drop 'Reviewed-by: Juergen' from the second patch
(suggested by Roger Pau MonnÃ)
- Update contact of the new module param to SeongJae Park
<sjpark@xxxxxxxxx>
(suggested by Roger Pau MonnÃ)
- Wordsmith the description of the parameter
(suggested by Roger Pau MonnÃ)
- Fix dumb bugs
(suggested by Roger Pau MonnÃ)
- Move module param definition to xenbus.c and reduce the number of
lines for this change
(suggested by Roger Pau MonnÃ)
- Add a comment for the new callback, reclaim_memory, as other
callbacks also have
- Add another trivial cleanup of xenbus.c file (4th patch)

Changes from v7
(https://lore.kernel.org/xen-devel/20191211181016.14366-1-sjpark@xxxxxxxxx/)
- Update sysfs-driver-xen-blkback for new parameter
(suggested by Roger Pau MonnÃ)
- Use per-xen_blkif buffer_squeeze_end instead of global variable
(suggested by Roger Pau MonnÃ)

Changes from v6
(https://lore.kernel.org/linux-block/20191211042428.5961-1-sjpark@xxxxxxxxx/)
- Remove more unnecessary prefixes (suggested by Roger Pau MonnÃ)
- Constify a variable (suggested by Roger Pau MonnÃ)
- Rename 'reclaim' into 'reclaim_memory' (suggested by Roger Pau MonnÃ)
- More wordsmith of the commit message (suggested by Roger Pau MonnÃ)

Changes from v5
(https://lore.kernel.org/linux-block/20191210080628.5264-1-sjpark@xxxxxxxxx/)
- Wordsmith the commit messages (suggested by Roger Pau MonnÃ)
- Change the reclaim callback return type (suggested by Roger Pau
MonnÃ)
- Change the type of the blkback squeeze duration variable
(suggested by Roger Pau MonnÃ)
- Add a patch for removal of unnecessary static variable name prefixes
(suggested by Roger Pau MonnÃ)
- Fix checkpatch.pl warnings

Changes from v4
(https://lore.kernel.org/xen-devel/20191209194305.20828-1-sjpark@xxxxxxxxxx/)
- Remove domain id parameter from the callback (suggested by Juergen
Gross)
- Rename xen-blkback module parameter (suggested by Stefan Nuernburger)

Changes from v3
(https://lore.kernel.org/xen-devel/20191209085839.21215-1-sjpark@xxxxxxxxxx/)
- Add general callback in xen_driver and use it (suggested by Juergen
Gross)

Changes from v2
(https://lore.kernel.org/linux-block/af195033-23d5-38ed-b73b-f6e2e3b34541@xxxxxxxxxx)
- Rename the module parameter and variables for brevity
(aggressive shrinking -> squeezing)

Changes from v1
(https://lore.kernel.org/xen-devel/20191204113419.2298-1-sjpark@xxxxxxxxxx/)
- Adjust the description to not use the term, `arbitrarily`
(suggested by Paul Durrant)
- Specify time unit of the duration in the parameter description,
(suggested by Maximilian Heyne)
- Change default aggressive shrinking duration from 1ms to 10ms
- Merge two patches into one single patch

SeongJae Park (5):
xenbus/backend: Add memory pressure handler callback
xenbus/backend: Protect xenbus callback with lock
xen/blkback: Squeeze page pools if a memory pressure is detected
xen/blkback: Remove unnecessary static variable name prefixes
xen/blkback: Consistently insert one empty line between functions

.../ABI/testing/sysfs-driver-xen-blkback | 10 +++++
drivers/block/xen-blkback/blkback.c | 42 +++++++++----------
drivers/block/xen-blkback/common.h | 1 +
drivers/block/xen-blkback/xenbus.c | 26 ++++++++++--
drivers/xen/xenbus/xenbus_probe.c | 8 +++-
drivers/xen/xenbus/xenbus_probe_backend.c | 38 +++++++++++++++++
include/xen/xenbus.h | 2 +
7 files changed, 101 insertions(+), 26 deletions(-)

--
2.17.1