Messages in this thread | | | Date | Thu, 23 May 2013 18:39:01 +0200 | From | Peter Zijlstra <> | Subject | Re: OOPS in perf_mmap_close() |
| |
On Thu, May 23, 2013 at 04:12:14PM +0000, Christoph Lameter wrote: > On Thu, 23 May 2013, Peter Zijlstra wrote: > > > The patch completely fails to explain how RLIMIT_LOCKED is supposed to > > deal with pinned vs locked. Perf used to account its pages against > > RLIMIT_LOCKED, with the patch it compares pinned against RLIMIT_LOCKED > > but completely discards any possible locked pages. > > Pinned pages are different from mlock. Mlock semantics means that the > pages are kept in memory but the pages are movable (subject to page > migration f.e.). > > Pinned pages have to stay where they are since the physical addresses may > be used for device I/O or other stuff. > > Both pinned and mlocked pages cannot be evicted from memory. If one wants > to account for unevictable pages then both are contributing. However, > since a pinned page may be mlocked simply adding up the counter may cause > problems. The sum could be used as a worst case estimate though. > > We could mlock all pinned pages but then the issue arises on how to track > that properly in order to unpin when the I/O action is done since the app > may have also mlocked pages.
I know all that, and its completely irrelevant to the discussion.
You cannot simply take away pinned pages from the RLIMIT_MEMLOCK accounting without mention nor replacement limits.
You now have double the amount of memory you can loose, once to actual mlock() and once through whatever generates pinned -- if it bothers with checking limits at all.
Where we had the guarantee that x < y; you did x := x1 + x2; which then should result in: x1 + x2 < y, instead you did: x1 < y && x2 < y, not the same and completely wrong.
| |