I sent this last year, but nobody responded, and I still need an answer.
The RAM preservation feature in init is very nice; I used to have issues with init running out of memory. However, the RAM reservation applies after first reserving the RAM for all of the child processes based on their quotas. That may be fine in most cases, but it doesn't work properly when you give a child process a huge RAM quota to ensure that it gets all of the available RAM. In that situation, the RAM preservation happens after all of the available RAM has been reserved for the child processes, leaving no RAM available for init to preserve for itself. Something needs to change here.
Changing the ordering is the simplest solution, but there may be a better solution. When we reserve all the remaining RAM for a particular process, we supply a huge RAM quota that is much larger than the process actually needs. It seems that the solution would be to split the quota numbers into a minimum (amount *reserved*) and a maximum (amount *available*). It would work very nicely for standard desktop workloads, especially when web browsers are involved. For example, I'd like to ensure that chromium has access to up to 2G of RAM, if it is available, but I don't want to reserve 2G of RAM specifically for chromium.
Would this solution work well? Or is there something that I'm missing here?