linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* page_referenced() and VM_LOCKED
@ 2007-11-16  4:25 Ethan Solomita
  2007-11-16  5:46 ` KAMEZAWA Hiroyuki
  0 siblings, 1 reply; 8+ messages in thread
From: Ethan Solomita @ 2007-11-16  4:25 UTC (permalink / raw)
  To: linux-mm

page_referenced_file() checks for the vma to be VM_LOCKED|VM_MAYSHARE
and adds returns 1. We don't do the same in page_referenced_anon(). I
would've thought the point was to treat locked pages as active, never
pushing them into the inactive list, but since that's not quite what's
happening I was hoping someone could give me a clue.

	Thanks,
	-- Ethan

--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: page_referenced() and VM_LOCKED
  2007-11-16  4:25 page_referenced() and VM_LOCKED Ethan Solomita
@ 2007-11-16  5:46 ` KAMEZAWA Hiroyuki
  2007-11-16 18:00   ` Hugh Dickins
  2007-11-17  0:32   ` kamezawa.hiroyu
  0 siblings, 2 replies; 8+ messages in thread
From: KAMEZAWA Hiroyuki @ 2007-11-16  5:46 UTC (permalink / raw)
  To: Ethan Solomita; +Cc: linux-mm

On Thu, 15 Nov 2007 20:25:45 -0800
Ethan Solomita <solo@google.com> wrote:

> page_referenced_file() checks for the vma to be VM_LOCKED|VM_MAYSHARE
> and adds returns 1. We don't do the same in page_referenced_anon(). I
> would've thought the point was to treat locked pages as active, never
> pushing them into the inactive list, but since that's not quite what's
> happening I was hoping someone could give me a clue.
> 
> 	Thanks,
> 	-- Ethan
Hmm,

== vmscan.c::shrink_page_list()

   page_referenced()  if returns 1 ->  link to active list
   
   add to swap  # only works if anon

   try_to_unmap()    if VM_LOCKED -> SWAP_FAIL -> link to active list

==

Then, "VM_LOCKED & not referenced" anon page is added to swap cache
(before pushed back to active list)

Seems intended ?

Thanks,
- Kame

--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: page_referenced() and VM_LOCKED
  2007-11-16  5:46 ` KAMEZAWA Hiroyuki
@ 2007-11-16 18:00   ` Hugh Dickins
  2007-12-05  0:26     ` Ethan Solomita
  2007-11-17  0:32   ` kamezawa.hiroyu
  1 sibling, 1 reply; 8+ messages in thread
From: Hugh Dickins @ 2007-11-16 18:00 UTC (permalink / raw)
  To: KAMEZAWA Hiroyuki; +Cc: Ethan Solomita, linux-mm

On Fri, 16 Nov 2007, KAMEZAWA Hiroyuki wrote:
> On Thu, 15 Nov 2007 20:25:45 -0800
> Ethan Solomita <solo@google.com> wrote:
> 
> > page_referenced_file() checks for the vma to be VM_LOCKED|VM_MAYSHARE
> > and adds returns 1.

That's a case where it can deduce that the page is present and should
be treated as referenced, without even examining the page tables.

> > We don't do the same in page_referenced_anon().

It cannot make that same deduction in the page_referenced_anon() case
(different vmas may well contain different COWs of some original page).

Perhaps you're suggesting that page_referenced_one() ought to cover
this case.  Yes.  I think we were coming at it from the 2.6.4 rmap.c
in which VM_LOCKED was checked only in the try_to_unmap() case; but
I was worried about the length of the vma lists and tried to short-
circuit the full search in the one case I could; without thinking
about doing the equivalent elsewhere for the other cases.

> > I would've thought the point was to treat locked pages as active, never
> > pushing them into the inactive list, but since that's not quite what's
> > happening I was hoping someone could give me a clue.

Rik and Lee and others have proposed that we keep VM_LOCKED pages
off both active and inactive lists: that seems a better way forward.

> > 
> > 	Thanks,
> > 	-- Ethan
> Hmm,
> 
> == vmscan.c::shrink_page_list()
> 
>    page_referenced()  if returns 1 ->  link to active list
>    
>    add to swap  # only works if anon
> 
>    try_to_unmap()    if VM_LOCKED -> SWAP_FAIL -> link to active list
> 
> ==
> 
> Then, "VM_LOCKED & not referenced" anon page is added to swap cache
> (before pushed back to active list)
> 
> Seems intended ?

Not intended, no.  Rather a waste of swap.  How about this patch?

--- 2.6.24-rc2/mm/rmap.c	2007-10-24 07:16:04.000000000 +0100
+++ linux/mm/rmap.c	2007-11-16 17:45:32.000000000 +0000
@@ -283,7 +283,10 @@ static int page_referenced_one(struct pa
 	if (!pte)
 		goto out;
 
-	if (ptep_clear_flush_young(vma, address, pte))
+	if (vma->vm_flags & VM_LOCKED) {
+		referenced++;
+		*mapcount = 1;
+	} else if (ptep_clear_flush_young(vma, address, pte))
 		referenced++;
 
 	/* Pretend the page is referenced if the task has the

--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Re: page_referenced() and VM_LOCKED
  2007-11-16  5:46 ` KAMEZAWA Hiroyuki
  2007-11-16 18:00   ` Hugh Dickins
@ 2007-11-17  0:32   ` kamezawa.hiroyu
  2007-11-19  9:39     ` KAMEZAWA Hiroyuki
  1 sibling, 1 reply; 8+ messages in thread
From: kamezawa.hiroyu @ 2007-11-17  0:32 UTC (permalink / raw)
  To: Hugh Dickins; +Cc: KAMEZAWA Hiroyuki, Ethan Solomita, linux-mm

>> > I would've thought the point was to treat locked pages as active, never
>> > pushing them into the inactive list, but since that's not quite what's
>> > happening I was hoping someone could give me a clue.
>
>Rik and Lee and others have proposed that we keep VM_LOCKED pages
>off both active and inactive lists: that seems a better way forward.
>
agreed.

>> Then, "VM_LOCKED & not referenced" anon page is added to swap cache
>> (before pushed back to active list)
>> 
>> Seems intended ?
>
>Not intended, no.  Rather a waste of swap.  How about this patch?
>
seems nice. I'd like to do some test in the next week,

Thanks,
-Kame

--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: page_referenced() and VM_LOCKED
  2007-11-17  0:32   ` kamezawa.hiroyu
@ 2007-11-19  9:39     ` KAMEZAWA Hiroyuki
  2007-11-19 19:09       ` Hugh Dickins
  0 siblings, 1 reply; 8+ messages in thread
From: KAMEZAWA Hiroyuki @ 2007-11-19  9:39 UTC (permalink / raw)
  To: kamezawa.hiroyu; +Cc: Hugh Dickins, Ethan Solomita, linux-mm

On Sat, 17 Nov 2007 09:32:36 +0900 (JST)
kamezawa.hiroyu@jp.fujitsu.com wrote:

> >> > I would've thought the point was to treat locked pages as active, never
> >> > pushing them into the inactive list, but since that's not quite what's
> >> > happening I was hoping someone could give me a clue.
> >
> >Rik and Lee and others have proposed that we keep VM_LOCKED pages
> >off both active and inactive lists: that seems a better way forward.
> >
> agreed.
> 
> >> Then, "VM_LOCKED & not referenced" anon page is added to swap cache
> >> (before pushed back to active list)
> >> 
> >> Seems intended ?
> >
> >Not intended, no.  Rather a waste of swap.  How about this patch?
> >
> seems nice. I'd like to do some test in the next week,
> 
your patch helps the kernel to avoid a waste of Swap.

Tested-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>

==
I tested your patch on x86_64/6GiB memory, + 2.6.24-rc3.
mlock 5GiB and create 4GiB file by"dd".

[before patch]
MemTotal:      6072620 kB
MemFree:         50540 kB
Buffers:          4508 kB
Cached:         724828 kB
SwapCached:    5146960 kB
Active:        2683964 kB
Inactive:      3198752 kB

[after patch]
MemTotal:      6072620 kB
MemFree:         17112 kB
Buffers:          6816 kB
Cached:         744880 kB
SwapCached:      21724 kB
Active:        5175828 kB
Inactive:       744956 kB

Thanks,
-Kame

--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: page_referenced() and VM_LOCKED
  2007-11-19  9:39     ` KAMEZAWA Hiroyuki
@ 2007-11-19 19:09       ` Hugh Dickins
  0 siblings, 0 replies; 8+ messages in thread
From: Hugh Dickins @ 2007-11-19 19:09 UTC (permalink / raw)
  To: KAMEZAWA Hiroyuki; +Cc: Ethan Solomita, linux-mm

On Mon, 19 Nov 2007, KAMEZAWA Hiroyuki wrote:
> > 
> your patch helps the kernel to avoid a waste of Swap.
> 
> Tested-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>

Many thanks, Kame.  I'll send it in with my next little lot.
Hugh

> ==
> I tested your patch on x86_64/6GiB memory, + 2.6.24-rc3.
> mlock 5GiB and create 4GiB file by"dd".
> 
> [before patch]
> MemTotal:      6072620 kB
> MemFree:         50540 kB
> Buffers:          4508 kB
> Cached:         724828 kB
> SwapCached:    5146960 kB
> Active:        2683964 kB
> Inactive:      3198752 kB
> 
> [after patch]
> MemTotal:      6072620 kB
> MemFree:         17112 kB
> Buffers:          6816 kB
> Cached:         744880 kB
> SwapCached:      21724 kB
> Active:        5175828 kB
> Inactive:       744956 kB

--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: page_referenced() and VM_LOCKED
  2007-11-16 18:00   ` Hugh Dickins
@ 2007-12-05  0:26     ` Ethan Solomita
  2007-12-05 15:54       ` Hugh Dickins
  0 siblings, 1 reply; 8+ messages in thread
From: Ethan Solomita @ 2007-12-05  0:26 UTC (permalink / raw)
  To: Hugh Dickins; +Cc: KAMEZAWA Hiroyuki, linux-mm

Hugh Dickins wrote:
> On Fri, 16 Nov 2007, KAMEZAWA Hiroyuki wrote:
>> On Thu, 15 Nov 2007 20:25:45 -0800
>> Ethan Solomita <solo@google.com> wrote:
>>
>>> page_referenced_file() checks for the vma to be VM_LOCKED|VM_MAYSHARE
>>> and adds returns 1.
> 
> That's a case where it can deduce that the page is present and should
> be treated as referenced, without even examining the page tables.
> 
>>> We don't do the same in page_referenced_anon().
> 
> It cannot make that same deduction in the page_referenced_anon() case
> (different vmas may well contain different COWs of some original page).

	Sorry to come back in with this so late -- if the vma is VM_MAYSHARE, 
would there be COWs of the original page?
	-- Ethan

--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: page_referenced() and VM_LOCKED
  2007-12-05  0:26     ` Ethan Solomita
@ 2007-12-05 15:54       ` Hugh Dickins
  0 siblings, 0 replies; 8+ messages in thread
From: Hugh Dickins @ 2007-12-05 15:54 UTC (permalink / raw)
  To: Ethan Solomita; +Cc: KAMEZAWA Hiroyuki, linux-mm

On Tue, 4 Dec 2007, Ethan Solomita wrote:
> Hugh Dickins wrote:
> > On Fri, 16 Nov 2007, KAMEZAWA Hiroyuki wrote:
> > > On Thu, 15 Nov 2007 20:25:45 -0800
> > > Ethan Solomita <solo@google.com> wrote:
> > >
> > > > page_referenced_file() checks for the vma to be VM_LOCKED|VM_MAYSHARE
> > > > and adds returns 1.
> > 
> > That's a case where it can deduce that the page is present and should
> > be treated as referenced, without even examining the page tables.
> > 
> > > > We don't do the same in page_referenced_anon().
> > 
> > It cannot make that same deduction in the page_referenced_anon() case
> > (different vmas may well contain different COWs of some original page).
> 
> Sorry to come back in with this so late --
> if the vma is VM_MAYSHARE, would there be COWs of the original page?

99.999% correct answer: No, that's why we're testing VM_MAYSHARE,
because we know it has to be that original page which is present
and locked there (it might be readwrite, or it might be readonly,
but it won't be a COWed copy in a VM_MAYSHARE vma; the same would
be true if we tested VM_SHARED, but that would miss readonly cases).

00.001% adjustment: Actually, there's an aberrant case in which
do_wp_page() can put a COW into a VM_MAYSHARE area, supposedly to
suit ptrace().  I overlooked that case when I put the VM_MAYSHARE
test into page_referenced_file(); later when I learnt about it
(and found Linus unwilling to change it), I did an audit of such
oversights, but concluded this test wasn't worth changing.

Hugh

--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2007-12-05 15:55 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-11-16  4:25 page_referenced() and VM_LOCKED Ethan Solomita
2007-11-16  5:46 ` KAMEZAWA Hiroyuki
2007-11-16 18:00   ` Hugh Dickins
2007-12-05  0:26     ` Ethan Solomita
2007-12-05 15:54       ` Hugh Dickins
2007-11-17  0:32   ` kamezawa.hiroyu
2007-11-19  9:39     ` KAMEZAWA Hiroyuki
2007-11-19 19:09       ` Hugh Dickins

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox