diff options
author | Jianfeng Zhang | 2018-12-21 12:24:50 +0800 |
---|---|---|
committer | Jianfeng Zhang | 2018-12-21 12:24:50 +0800 |
commit | a221edc35f7f34388273d8f7799369d46bdc9256 (patch) | |
tree | 0efe307fad1ed74774e7b79fcf5d84990f3d975b | |
parent | a57476ff63900b06f6e2aded15935e63561eecfd (diff) | |
download | aur-a221edc35f7f34388273d8f7799369d46bdc9256.tar.gz |
add config files
-rw-r--r-- | .SRCINFO | 8 | ||||
-rw-r--r-- | PKGBUILD | 14 | ||||
-rw-r--r-- | balloon.rules | 71 | ||||
-rw-r--r-- | momd@.service | 13 |
4 files changed, 100 insertions, 6 deletions
@@ -1,16 +1,18 @@ -# Generated by mksrcinfo v8 -# 六 5月 12 17:00:39 UTC 2018 pkgbase = mom pkgdesc = Memory Overcommitment Manager, for virtual machines pkgver = 0.5.12 - pkgrel = 1 + pkgrel = 2 url = https://gerrit.ovirt.org/#/admin/projects/mom arch = x86_64 license = GPL2 makedepends = git depends = python2 source = git+https://gerrit.ovirt.org/mom#tag=v0.5.12 + source = momd@.service + source = balloon.rules md5sums = SKIP + md5sums = c2b7bf62ee32aee64e127f4384767235 + md5sums = cf66caf6eec15c39381abf28235aa0ed pkgname = mom @@ -2,15 +2,19 @@ pkgname=mom pkgver=0.5.12 -pkgrel=1 +pkgrel=2 pkgdesc="Memory Overcommitment Manager, for virtual machines" arch=('x86_64') url="https://gerrit.ovirt.org/#/admin/projects/mom" license=("GPL2") depends=('python2') makedepends=('git') -source=("git+https://gerrit.ovirt.org/mom#tag=v${pkgver}") -md5sums=('SKIP') +source=("git+https://gerrit.ovirt.org/mom#tag=v${pkgver}" + "momd@.service" + "balloon.rules") +md5sums=('SKIP' + 'c2b7bf62ee32aee64e127f4384767235' + 'cf66caf6eec15c39381abf28235aa0ed') prepare() { cd mom @@ -25,6 +29,10 @@ build() { } package() { + install -Dm644 momd@.service "${pkgdir}/usr/lib/systemd/system/momd@.service" + install -Dm644 balloon.rules "${pkgdir}/etc/mom/balloon.rules" cd mom make DESTDIR="${pkgdir}" install + install -Dm644 doc/mom-balloon+ksm.conf "${pkgdir}/etc/mom/mom.conf" + sed -i 's/guest-manager-multi-thread:/guest-manager-multi-thread: true/' "${pkgdir}/etc/mom/mom.conf" } diff --git a/balloon.rules b/balloon.rules new file mode 100644 index 000000000000..f1c3ccbe8d2f --- /dev/null +++ b/balloon.rules @@ -0,0 +1,71 @@ +### Auto-Balloon ############################################################### +# Author: Jianfeng Zhang <swordfeng123@gmail.com> + +# Basic idea: make guest pressure equal to host pressure +# Host pressure = min(1, max(0, (host_used - host_free_threshold) / (host_free_critical - host_free_threshold))) +# Guest pressure = min(1, guest_visually_used / (1 - guest_free_critical)) + +# Lower bound (%) of host pressure +(defvar host_free_threshold 0.8) +# Upper bound (%) of host pressure +(defvar host_free_critical 0.1) +# Lower bound of guest pressure is 0. +# Upper bound (%) of guest pressure +(defvar guest_free_critical 0.1) + +# Change of these values will change the speed and sensitivity of adjustments +(defvar max_balloon_change_percent 0.1) +(defvar min_balloon_change_percent 0.005) + +(defvar host_free_percent (/ (Host.StatAvg "mem_free") Host.mem_available)) + +(def adjust_guest (guest) +{ + (defvar guest_mem_used (- guest.balloon_cur guest.mem_unused)) + (debug "host_usage" (- 1 host_free_percent) "guest_usage" (/ (* 1.0 guest_mem_used) Host.mem_available)) + (debug "guest_used" guest_mem_used "guest_free" guest.mem_unused "ballooned" (- guest.mem_available guest.balloon_cur)) + + (defvar guest_free (+ (guest.StatAvg "mem_unused") (- guest.mem_available (guest.StatAvg "balloon_cur")))) + (defvar guest_free_percent (/ guest_free guest.mem_available)) + (defvar guest_free_visible (/ (guest.StatAvg "mem_unused") guest.mem_available)) + + (defvar host_freedom (/ (- host_free_percent host_free_critical) + (- host_free_threshold host_free_critical))) + (defvar guest_freedom (/ (- guest_free_visible guest_free_critical) + (- guest_free_percent guest_free_critical))) + (debug "host_pressure" (- 1 host_freedom) "guest_pressure" (- 1 guest_freedom)) + + (defvar guest_avail (* guest.mem_available (- guest_free_percent guest_free_critical))) + (defvar host_avail (* Host.mem_available (- host_free_threshold host_free_critical))) + (defvar delta (/ (* (* (- host_freedom guest_freedom) guest_avail) host_avail) + (+ guest_avail host_avail))) + + (defvar guest_free_target + (if (or (<= host_free_percent host_free_critical) (<= guest_free_percent guest_free_critical)) + guest_free_critical + (+ guest_free_visible (/ delta guest.mem_available)) + ) + ) + + # Target guest visible usage + (debug "guest_visible_use_target" (- 1 guest_free_target)) + (defvar balloon_size (* guest.mem_available + (- 1 (- guest_free_percent guest_free_target)))) + (if (> balloon_size guest.balloon_max) + (set balloon_size guest.balloon_max) + 0) + (defvar balloon_adjust (- balloon_size guest.balloon_cur)) + (defvar max_change (* max_balloon_change_percent guest.mem_available)) + (defvar min_change (* min_balloon_change_percent guest.mem_available)) + (if (< balloon_adjust (- 0 max_change)) + (set balloon_size (- guest.balloon_cur max_change)) + 0) + (if (> balloon_adjust max_change) + (set balloon_size (+ guest.balloon_cur max_change)) + 0) + (if (or (< balloon_adjust (- 0 min_change)) (> balloon_adjust min_change)) + (guest.Control "balloon_target" balloon_size) + 0) +}) + +(with Guests guest (adjust_guest guest)) diff --git a/momd@.service b/momd@.service new file mode 100644 index 000000000000..69e365e6ed40 --- /dev/null +++ b/momd@.service @@ -0,0 +1,13 @@ +[Unit] +Description=Memory Overcommitment Manager +After=network.target +After=libvirtd.service +Requires=libvirtd.service + +[Service] +Type=simple +ExecStart=/usr/bin/momd -c /etc/mom/mom.conf -r /etc/mom/%i.rules + +[Install] +WantedBy=multi-user.target + |