> I'm guessing mem_notify will try to wake apps sufficiently far ahead that it can avoid those "need RAM to free RAM" situations in practice, but setting proper thresholds seems like it ought to be rather tricky I don't see how the kernel can possibly know enough for it to notify applications far enough ahead about the need to free memory; the memory allocation behavior of applications is just too unpredictable. An approach that seems like it would be better would be to notify the kernel that certain pages in your application are being used to cache data. The kernel is then free to simply grab them if it needs them. If your application decides it needs the data later, it uses as sytem call to notify the kernel that the pages are no longer being used as a cache. If the kernel didn't need the pages, they would still have their old data and the application could use them directly. On the other hand, if the kernel did have to grab the pages in the interim, the system call used to grab the pages back would return an error. Your application would then know it needs to remap the pages and regenerate the data. Of course, it's possible the pages can't be remapped because memory is too low. The application would handle that as though the data wasn't cached and it couldn't get the memory to read it. It already has to be able to do this, so this doesn't add to the application's complexity. The advantages of this approach are that the pages are immediately available to the kernel without having to wake the process up. No need to figure out complex threshholds, no need to allocate enough memory for the process to run, no delay in making the needed memory available. You could even allow for priorities when telling the kernel the pages are being used for cache so that the kernel would grab lower priority pages first. I wish I had the time to code this and submit it because I think that mem_notify is an awful botch that will cause unending pain as people add patch on patch to try to make it work. But that's just my personal opinion...
Copyright © 2017, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds