main/postmarketos-zram: override vm.min_free_kbytes if >= 1GB RAM
Without a sufficient vm.min_free_kbytes value, the kernel may not start reclaiming memory early enough to make use of zram swap before the kernel OOM killer fires. Set a minimum of 100000 KB on devices with >= 1GB of RAM where the kernel's calculated value is lower. This ignores devices with <1GB of RAM, because I think with so little RAM isn't unlikely to really matter and if we set this too high then we risk insta-OOMs. Signed-off-by: Clayton Craft <craftyguy@postmarketos.org> Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/8157>
This commit is contained in:
parent
b383547b54
commit
0f0b8ceaa2
2 changed files with 23 additions and 3 deletions
|
|
@ -1,6 +1,6 @@
|
|||
maintainer="Clayton Craft <clayton@craftyguy.net>"
|
||||
pkgname=postmarketos-zram
|
||||
pkgver=2
|
||||
pkgver=3
|
||||
pkgrel=0
|
||||
pkgdesc="zram swap configuration for postmarketOS"
|
||||
url="https://postmarketos.org"
|
||||
|
|
@ -27,6 +27,6 @@ package() {
|
|||
sha512sums="
|
||||
ca91be78a47c00f40f3e645f79a72b2cd7ba3f080e2feb256998bb121f64c0394041f2ed822ad307ac36e86398b8175b3284dc5097a7017947e520a304b0a37d postmarketos-zram-swap.initd
|
||||
5c1787bc2d597726113aaf3ea59229b5a56b8fc3446c78406a202e163a0b37ac564a87b2acc1c1f1a7dcdc18ff863c45e13aa687b93fa537c5ef000b9e8d6d19 postmarketos-zram-swap.service
|
||||
cc8ae3a0a26aeac7015c5b66c08d76f7d7d4479f20b0876dc14368d6f4ff57a0132bac1f673c194d1b3e1df23660161486123f9691ee4d078a06f328d7246417 zramstart
|
||||
b08a59a624e4b56f2f88987ce4e246b86effea31bb9a3f8d1581c1bf3444bc0f9ed96a17bf64b5942bd9cc1eca5ab8a295f8220d86d52ed6ac95f9362ba587ac zramstart
|
||||
a70d2bcb26c1af42a71811a1c1cd2984808f5ce09d7af52b26824cf5c15c8a9c819691fc6290cf3028226fca39f6e7a495546c5573c582a14d5a8c7c65dbfe3e zramstop
|
||||
"
|
||||
|
|
|
|||
|
|
@ -6,6 +6,10 @@ set -e
|
|||
# shellcheck disable=SC1091
|
||||
. /usr/share/misc/source_deviceinfo
|
||||
|
||||
get_mem_size_mb() {
|
||||
LC_ALL=C free -m | awk '/^Mem:/{print $2}'
|
||||
}
|
||||
|
||||
get_size() {
|
||||
# Size defaults to:
|
||||
# - 150% of RAM for devices with less than 32GB of RAM
|
||||
|
|
@ -14,7 +18,7 @@ get_size() {
|
|||
# https://gitlab.postmarketos.org/postmarketOS/pmaports/-/issues/4250
|
||||
|
||||
local mem_size_mb size_pct
|
||||
mem_size_mb="$(LC_ALL=C free -m | awk '/^Mem:/{print $2}')"
|
||||
mem_size_mb="$(get_mem_size_mb)"
|
||||
|
||||
if [ "$mem_size_mb" -le 32768 ]; then
|
||||
size_pct=150
|
||||
|
|
@ -45,6 +49,21 @@ get_algo() {
|
|||
echo "${deviceinfo_zram_swap_algo:-zstd}"
|
||||
}
|
||||
|
||||
set_min_free_kbytes() {
|
||||
local mem_size_mb current
|
||||
# Set vm.min_free_kbytes to 100000 KB if the kernel's current value
|
||||
# is lower. This ensures the kernel starts reclaiming memory early
|
||||
# enough to make use of zram swap before the kernel OOM killer fires.
|
||||
# This is only applied on devices with >= 1GB of RAM.
|
||||
mem_size_mb="$(get_mem_size_mb)"
|
||||
[ "$mem_size_mb" -lt 1024 ] && return
|
||||
|
||||
current="$(cat /proc/sys/vm/min_free_kbytes)"
|
||||
[ "$current" -ge 100000 ] && return
|
||||
|
||||
sysctl -w vm.min_free_kbytes=100000 >/dev/null
|
||||
}
|
||||
|
||||
size=$(get_size)
|
||||
algo=$(get_algo)
|
||||
|
||||
|
|
@ -64,5 +83,6 @@ swapon "$dev" >/dev/null
|
|||
sysctl -w \
|
||||
vm.page-cluster=0 \
|
||||
vm.swappiness=180 >/dev/null
|
||||
set_min_free_kbytes
|
||||
|
||||
echo "ZRAM swap device $dev activated using $algo and size $size MB"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue