On Thu, Apr 5, 2018 at 7:51 AM, Michal Hocko <mhocko@xxxxxxxxxx> wrote: > On Wed 04-04-18 16:59:18, Joel Fernandes wrote: >> Hi Steve, >> >> On Wed, Apr 4, 2018 at 9:18 AM, Joel Fernandes <joelaf@xxxxxxxxxx> wrote: >> > On Wed, Apr 4, 2018 at 9:13 AM, Steven Rostedt <rostedt@xxxxxxxxxxx> wrote: >> > [..] >> >>> >> >>> Also, I agree with the new patch and its nice idea to do that. >> >> >> >> Thanks, want to give it a test too? >> >> With the latest tree and the below diff, I can still OOM-kill a victim >> process doing a large buffer_size_kb write: >> >> I pulled your ftrace/core and added this: >> + /* >> i = si_mem_available(); >> if (i < nr_pages) >> return -ENOMEM; >> + */ >> >> Here's a run in Qemu with 4-cores 1GB total memory: >> >> bash-4.3# ./m -m 1M & >> [1] 1056 >> bash-4.3# >> bash-4.3# >> bash-4.3# >> bash-4.3# echo 10000000 > /d/tracing/buffer_size_kb >> [ 33.213988] Out of memory: Kill process 1042 (bash) score >> 1712050900 or sacrifice child >> [ 33.215349] Killed process 1056 (m) total-vm:9220kB, >> anon-rss:7564kB, file-rss:4kB, shmem-rss:640kB > > OK, so the reason your memory hog is triggered is that your echo is > built-in and we properly select bask as an oom_origin but then another > clever heuristic jumps in and tries to reduce the damage by sacrificing > a child process. And your memory hog runs as a child from the same bash > session. Oh, ok. Makes sense. > > I cannot say I would love this heuristic. In fact I would really love to > dig it deep under the ground. But this is a harder sell than it might > seem. Anyway is your testing scenario really representative enough to No honestly I don't care much for this heuristic but was just helping test it. The scenario is not something I care about, but it seems like if I hit it then others users will too. Maybe Zhaoyang can try his use case again with ftrace/core and si_mem_available commented? IOW I was just helping test the new patch with the si_mem_available check commented out. > care? Does the buffer_size_kb updater runs in the same process as any > large memory process? In this Qemu run its just the cat process. At work I use trace-cmd or atrace neither of which I believe have large memory footprints (AFAIK) Thanks, - Joel