On Thu, Aug 1, 2024 at 6:56 PM Ge Yang <yangge1116@xxxxxxx> wrote: > > > > >> I can't reproduce this problem, using tmpfs to compile linux. > >> Seems you limit the memory size used to compile linux, which leads to > >> OOM. May I ask why the memory size is limited to 481280kB? Do I also > >> need to limit the memory size to 481280kB to test? > > > > Yes, you need to limit the cgroup memory size to force the swap > > action. I am using memory.max = 470M. > > > > I believe other values e.g. 800M can trigger it as well. The reason to > > limit the memory to cause the swap action. > > The goal is to intentionally overwhelm the memory load and let the > > swap system do its job. The 470M is chosen to cause a lot of swap > > action but not too high to cause OOM kills in normal kernels. > > In another word, high enough swap pressure but not too high to bust > > into OOM kill. e.g. I verify that, with your patch reverted, the > > mm-stable kernel can sustain this level of swap pressure (470M) > > without OOM kill. > > > > I borrowed the 470M magic value from Hugh and verified it works with > > my test system. Huge has a similar swab test up which is more > > complicated than mine. It is the inspiration of my swap stress test > > setup. > > > > FYI, I am using "make -j32" on a machine with 12 cores (24 > > hyperthreading). My typical swap usage is about 3-5G. I set my > > swapfile size to about 20G. > > I am using zram or ssd as the swap backend. Hope that helps you > > reproduce the problem. > > > Hi Chris, > > I try to construct the experiment according to your suggestions above. Hi Ge, Sorry to hear that you were not able to reproduce it. > High swap pressure can be triggered, but OOM can't be reproduced. The > specific steps are as follows: > root@ubuntu-server-2204:/home/yangge# cp workspace/linux/ /dev/shm/ -rf I use a slightly different way to setup the tmpfs: Here is section of my script: if ! [ -d $tmpdir ]; then sudo mkdir -p $tmpdir sudo mount -t tmpfs -o size=100% nodev $tmpdir fi sudo mkdir -p $cgroup sudo sh -c "echo $mem > $cgroup/memory.max" || echo setup memory.max error sudo sh -c "echo 1 > $cgroup/memory.oom.group" || echo setup oom.group error Per run: # $workdir is under $tmpdir sudo rm -rf $workdir mkdir -p $workdir cd $workdir echo "Extracting linux tree" XZ_OPT='-T0 -9 –memory=75%' tar xJf $linux_src || die "xz extract failed" sudo sh -c "echo $BASHPID > $cgroup/cgroup.procs" echo "Cleaning linux tree, setup defconfig" cd $workdir/linux make -j$NR_TASK clean make defconfig > /dev/null echo Kernel compile run $i /usr/bin/time -a -o $log make --silent -j$NR_TASK || die "make failed" > root@ubuntu-server-2204:/home/yangge# sync > root@ubuntu-server-2204:/home/yangge# echo 3 > /proc/sys/vm/drop_caches > root@ubuntu-server-2204:/home/yangge# cd /sys/fs/cgroup/ > root@ubuntu-server-2204:/sys/fs/cgroup/# mkdir kernel-build > root@ubuntu-server-2204:/sys/fs/cgroup/# cd kernel-build > root@ubuntu-server-2204:/sys/fs/cgroup/kernel-build# echo 470M > memory.max > root@ubuntu-server-2204:/sys/fs/cgroup/kernel-build# echo $$ > cgroup.procs > root@ubuntu-server-2204:/sys/fs/cgroup/kernel-build# cd /dev/shm/linux/ > root@ubuntu-server-2204:/dev/shm/linux# make clean && make -j24 I am using make -j 32. Your step should work. Did you enable MGLRU in your .config file? Mine did. I attached my config file here. > > Please help to see which step does not meet your requirements. How many cores does your server have? I assume your RAM should be plenty on that server. Chris
Attachment:
config
Description: Binary data