Messages in this thread Patch in this message | | | Date | Fri, 30 Oct 2015 09:36:26 +0100 | From | Michal Hocko <> | Subject | Re: [RFC 1/3] mm, oom: refactor oom detection |
| |
On Fri 30-10-15 12:10:15, Hillf Danton wrote: [...] > > + for_each_zone_zonelist_nodemask(zone, z, ac->zonelist, ac->high_zoneidx, ac->nodemask) { > > + unsigned long free = zone_page_state(zone, NR_FREE_PAGES); > > + unsigned long reclaimable; > > + unsigned long target; > > + > > + reclaimable = zone_reclaimable_pages(zone) + > > + zone_page_state(zone, NR_ISOLATED_FILE) + > > + zone_page_state(zone, NR_ISOLATED_ANON); > > + target = reclaimable; > > + target -= stall_backoff * (1 + target/MAX_STALL_BACKOFF); > > target = reclaimable - stall_backoff * (1 + target/MAX_STALL_BACKOFF); > = reclaimable - stall_backoff - stall_backoff * (target/MAX_STALL_BACKOFF); > > then the first stall_backoff looks unreasonable.
First stall_backoff is off by 1 but that shouldn't make any difference.
> I guess you mean > target = reclaimable - target * (stall_backoff/MAX_STALL_BACKOFF); > = reclaimable - stall_back * (target/MAX_STALL_BACKOFF);
No the reason I used the bias is to converge for MAX_STALL_BACKOFF. If you have target which is not divisible by MAX_STALL_BACKOFF then the rounding would get target > 0 and so we wouldn't converge. With the +1 you underflow which is MAX_STALL_BACKOFF in maximum which should be fixed up by the free memory. Maybe a check for free < MAX_STALL_BACKOFF would be good but I didn't get that far with this.
[...]
> /* > > @@ -2734,10 +2730,6 @@ static unsigned long do_try_to_free_pages(struct zonelist *zonelist, > > goto retry; > > } > > > > - /* Any of the zones still reclaimable? Don't OOM. */ > > - if (zones_reclaimable) > > - return 1; > > - > > Looks cleanup of zones_reclaimable left.
Removed. Thanks!
-- Michal Hocko SUSE Labs
| |