Re: [RFC v3] Support volatile range for anon vma

Minchan Kim
2012-12-11T08:45:15Z

On Tue, Dec 11, 2012 at 09:29:03AM +0100, Mike Hommey wrote:
> On Tue, Dec 11, 2012 at 05:11:17PM +0900, Minchan Kim wrote:
> > On Tue, Dec 11, 2012 at 08:59:50AM +0100, Mike Hommey wrote:
> > > On Tue, Dec 11, 2012 at 04:37:44PM +0900, Minchan Kim wrote:
> > > > On Tue, Dec 11, 2012 at 08:17:42AM +0100, Mike Hommey wrote:
> > > > > On Tue, Dec 11, 2012 at 11:41:04AM +0900, Minchan Kim wrote:
> > > > > > - What's the madvise(addr, length, MADV_VOLATILE)?
> > > > > >
> > > > > > It's a hint that user deliver to kernel so kernel can *discard*
> > > > > > pages in a range anytime.
> > > > > >
> > > > > > - What happens if user access page(ie, virtual address) discarded
> > > > > > by kernel?
> > > > > >
> > > > > > The user can see zero-fill-on-demand pages as if madvise(DONTNEED).
> > > > >
> > > > > What happened to getting SIGBUS?
> > > >
> > > > I thought it could force for user to handle signal.
> > > > If user can receive signal, what can he do?
> > > > Maybe he can call madivse(NOVOLATILE) in my old version but I removed it
> > > > in this version so user don't need handle signal handling.
> > >
> > > NOVOLATILE and signal throwing are two different and not necessarily
> > > related needs. We (Mozilla) could probably live without NOVOLATILE,
> > > but certainly not without signal throwing.
> >
> > What's shortcoming if we don't provide signal handling?
> > Could you explain how you want to signal in your allocator?
>
> The main use case we have for signals is not an allocator. We're
> currently using ashmem to decompress libraries on Android. We would like
> to use volatile memory for that instead, so that unused pages can be
> discarded. With NOVOLATILE, or when getting zero-filled pages, that just
> doesn't pan out: you may well be jumping in the volatile memory from
> anywhere, and you can't check the status of the page you're jumping into
> before jumping. Thus you need to be signaled when reaching a discarded
> page.

It seems you are saying about tmpfs-based volatile ranges.
As I mentioned in John's thread, some interface to pin memory
as ashmem's term is needed for tmpfs-based volatile ranges.
But in case of allocator, we might not need it so this patch which
for considering allocator usecase removed SIGBUS.
If user allocator guys ask such interface, it wouldn't be a problem
for unifying both usecases but if they don't want due to by
performance, I don't want to add it. If so, there are two choices.

1) Go separate way with each interface.
(madvise for anon vs fadvise or fallocate for tmpfs)
2) A new system call to unify them.

>
> Mike
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: email@kvack.org

--
Kind regards,
Minchan Kim