summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJianfeng Zhang2018-12-21 12:24:50 +0800
committerJianfeng Zhang2018-12-21 12:24:50 +0800
commita221edc35f7f34388273d8f7799369d46bdc9256 (patch)
tree0efe307fad1ed74774e7b79fcf5d84990f3d975b
parenta57476ff63900b06f6e2aded15935e63561eecfd (diff)
downloadaur-a221edc35f7f34388273d8f7799369d46bdc9256.tar.gz
add config files
-rw-r--r--.SRCINFO8
-rw-r--r--PKGBUILD14
-rw-r--r--balloon.rules71
-rw-r--r--momd@.service13
4 files changed, 100 insertions, 6 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 1b4269326861..ac2b4eec914d 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -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
diff --git a/PKGBUILD b/PKGBUILD
index 0b10a9ef0632..9ea378fb6858 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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
+