memory-constraints/memory-constraints.macros

27 lines
1.0 KiB
Plaintext
Raw Normal View History

#
# Macros for memory constraints on buildjobs.
# If you happen to have HUGE packages sometimes you need to do
# crazy magic in order to make sure it is most of the time building
# rather than just giving you OOM
#
# m: memory limit in MBs per core; default is 1000
%limit_build(m:) \
_threads="`/usr/bin/getconf _NPROCESSORS_ONLN`"
_core_memory="%{-m:%{-m*}}%{!-m:1000}"
echo "Available memory:" \
cat /proc/meminfo \
echo "System limits:" \
ulimit -a \
echo "System jobs: $_threads" \
if test "$_threads" -gt 1 ; then \
mem_per_process="$_core_memory" \
max_mem=$(awk '/MemTotal/ { print $2 }' /proc/meminfo) \
max_jobs="$(($max_mem / $mem_per_process))"
test "$_threads" -gt "$max_jobs" && $_threads="$max_jobs" && echo "Warning: Reducing number of jobs to $max_jobs because of memory limits" \
test "$_threads" -le 0 && $_threads=1 && echo "Warning: Do not use the parallel build at all becuse of memory limits" \
fi \
%global jobs $_threads
%global _smp_mflags -j$_threads
%{nil}