@@ -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