Skip to content

Commit 3565fc4

Browse files
committed
Apply balanced settings to avoid fragmentation
Signed-off-by: Kyle Harding <kyle@balena.io>
1 parent 5b9195d commit 3565fc4

1 file changed

Lines changed: 55 additions & 14 deletions

File tree

docker-compose.yml

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,16 @@ services:
160160
image: bash:alpine3.22
161161
entrypoint: ["/usr/local/bin/bash", "-c"]
162162
privileged: true
163+
labels:
164+
io.balena.features.procfs: 1
165+
io.balena.features.sysfs: 1
163166
environment:
164167
DISABLED: 0
165168
VERBOSE: 0
169+
VM_COMPACTION_PROACTIVENESS: 40
170+
VM_MIN_FREE_KBYTES: 524288 # 512MB
171+
MM_TRANSPARENT_HUGEPAGE_ENABLED: never
172+
MM_TRANSPARENT_HUGEPAGE_DEFRAG: never
166173
command:
167174
- |
168175
set -euo pipefail
@@ -183,27 +190,61 @@ services:
183190
;;
184191
esac
185192
186-
echo "Setting swappiness to 5 (prioritize cache reclaim over swap)"
187-
echo 5 > /proc/sys/vm/swappiness
193+
case ${MM_TRANSPARENT_HUGEPAGE_ENABLED,,} in
194+
always|madvise|never)
195+
;;
196+
*)
197+
echo "Invalid value for MM_TRANSPARENT_HUGEPAGE_ENABLED: ${MM_TRANSPARENT_HUGEPAGE_ENABLED}"
198+
exit 1
199+
;;
200+
esac
201+
202+
case ${MM_TRANSPARENT_HUGEPAGE_DEFRAG,,} in
203+
always|madvise|never)
204+
;;
205+
*)
206+
echo "Invalid value for MM_TRANSPARENT_HUGEPAGE_DEFRAG: ${MM_TRANSPARENT_HUGEPAGE_DEFRAG}"
207+
exit 1
208+
;;
209+
esac
188210
189-
echo "Setting vfs_cache_pressure to 250 (aggressive filesystem cache reclaim)"
190-
echo 250 > /proc/sys/vm/vfs_cache_pressure
211+
# Match only numeric values between 0 and 100
212+
case ${VM_COMPACTION_PROACTIVENESS} in
213+
100|[1-9][0-9]|[0-9])
214+
;;
215+
*)
216+
echo "Invalid value for VM_COMPACTION_PROACTIVENESS: ${VM_COMPACTION_PROACTIVENESS} (must be 0-100)"
217+
exit 1
218+
;;
219+
esac
191220
192-
echo "Setting dirty_ratio to 5 (keep dirty pages low)"
193-
echo 5 > /proc/sys/vm/dirty_ratio
221+
case ${VM_MIN_FREE_KBYTES} in
222+
''|*[![:digit:]]*)
223+
echo "Invalid value for VM_MIN_FREE_KBYTES: ${VM_MIN_FREE_KBYTES} (must be numeric)"
224+
exit 1
225+
;;
226+
*)
227+
;;
228+
esac
194229
195-
echo "Setting dirty_background_ratio to 2 (start background writeout early)"
196-
echo 2 > /proc/sys/vm/dirty_background_ratio
230+
# Enable aggressive background compaction
231+
sysctl -w vm.compaction_proactiveness=${VM_COMPACTION_PROACTIVENESS}
197232
198-
echo "Setting overcommit_memory to 0 (heuristic overcommit)"
199-
echo 0 > /proc/sys/vm/overcommit_memory
233+
# Keep more memory free for allocations
234+
sysctl -w vm.min_free_kbytes=${VM_MIN_FREE_KBYTES}
200235
201-
echo "Setting min_free_kbytes to 1048576 (keep 1GB always free)"
202-
echo 1048576 > /proc/sys/vm/min_free_kbytes
236+
# Disable THP to reduce fragmentation
237+
echo "${MM_TRANSPARENT_HUGEPAGE_ENABLED,,}" > /sys/kernel/mm/transparent_hugepage/enabled
238+
echo "${MM_TRANSPARENT_HUGEPAGE_DEFRAG,,}" > /sys/kernel/mm/transparent_hugepage/defrag
203239
204240
while true; do
205-
free -h
206-
sleep 1h
241+
# Watch fragmentation improve over time
242+
cat /proc/buddyinfo
243+
244+
# Monitor compaction activity
245+
cat /proc/vmstat | grep compact_
246+
247+
sleep 15m
207248
done
208249
209250
# enable IPv6

0 commit comments

Comments
 (0)