linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] kanoj-mm2.0-2.2.9 unneccesary page force in by munlock
@ 1999-05-17  4:02 Kanoj Sarcar
  1999-05-17  4:48 ` Linus Torvalds
  0 siblings, 1 reply; 5+ messages in thread
From: Kanoj Sarcar @ 1999-05-17  4:02 UTC (permalink / raw)
  To: Linux-MM; +Cc: torvalds, number6

While looking at the code for munlock() in mm/mlock.c, I found
that munlock() unneccesarily executes a code path that forces
page fault in over the entire range. The following patch fixes 
this problem:

--- /usr/tmp/p_rdiff_a007Qs/mlock.c     Sun May 16 20:48:12 1999
+++ mm/mlock.c  Sun May 16 20:47:01 1999
@@ -117,8 +117,9 @@
                pages = (end - start) >> PAGE_SHIFT;
                if (!(newflags & VM_LOCKED))
                        pages = -pages;
+               else
+                       make_pages_present(start, end);
                vma->vm_mm->locked_vm += pages;
-               make_pages_present(start, end);
        }
        return retval;
 }

Please review and include in the source.

Thanks.

Kanoj
kanoj@engr.sgi.com
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

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

* Re: [PATCH] kanoj-mm2.0-2.2.9 unneccesary page force in by munlock
  1999-05-17  4:02 [PATCH] kanoj-mm2.0-2.2.9 unneccesary page force in by munlock Kanoj Sarcar
@ 1999-05-17  4:48 ` Linus Torvalds
  1999-05-17  6:16   ` Kanoj Sarcar
  0 siblings, 1 reply; 5+ messages in thread
From: Linus Torvalds @ 1999-05-17  4:48 UTC (permalink / raw)
  To: Kanoj Sarcar; +Cc: Linux-MM, number6


On Sun, 16 May 1999, Kanoj Sarcar wrote:
>
> While looking at the code for munlock() in mm/mlock.c, I found
> that munlock() unneccesarily executes a code path that forces
> page fault in over the entire range. The following patch fixes 
> this problem:

Well, it shouldn't force a page-fault, as the code is only executed if the
lockedness changes - and if it is a unlock then it will have been locked
before, so all the pages will have been present, and as such we wouldn't
actually need to fault them in.

I agree that it is certainly unnecessary, though, and pollutes TLB's etc
for no good reason.

How about this diff instead, avoiding the if-then-else setup?

		Linus

-----
--- v2.3.2/linux/mm/mlock.c	Fri Nov 20 11:43:19 1998
+++ linux/mm/mlock.c	Sun May 16 21:45:23 1999
@@ -115,10 +115,11 @@
 	if (!retval) {
 		/* keep track of amount of locked VM */
 		pages = (end - start) >> PAGE_SHIFT;
-		if (!(newflags & VM_LOCKED))
+		if (newflags & VM_LOCKED) {
 			pages = -pages;
-		vma->vm_mm->locked_vm += pages;
-		make_pages_present(start, end);
+			make_pages_present(start, end);
+		}
+		vma->vm_mm->locked_vm -= pages;
 	}
 	return retval;
 }


--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

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

* Re: [PATCH] kanoj-mm2.0-2.2.9 unneccesary page force in by munlock
  1999-05-17  4:48 ` Linus Torvalds
@ 1999-05-17  6:16   ` Kanoj Sarcar
  1999-05-17 16:11     ` Linus Torvalds
  0 siblings, 1 reply; 5+ messages in thread
From: Kanoj Sarcar @ 1999-05-17  6:16 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux-MM

> 
> 
> On Sun, 16 May 1999, Kanoj Sarcar wrote:
> >
> > While looking at the code for munlock() in mm/mlock.c, I found
> > that munlock() unneccesarily executes a code path that forces
> > page fault in over the entire range. The following patch fixes 
> > this problem:
> 
> Well, it shouldn't force a page-fault, as the code is only executed if the
> lockedness changes - and if it is a unlock then it will have been locked
> before, so all the pages will have been present, and as such we wouldn't
> actually need to fault them in.

Hmm, my logic was a little bit different. Note that you can call munlock()
on a range even when a previous mlock() has not been done on the range (I
think that's not an munlock error in POSIX). In 2.2.9, this would end up
faulting in the pages, which doesn't need to happen ... (haven't really
thought whether "root" can erroneously force memory deadlocks this way)

> 
> I agree that it is certainly unnecessary, though, and pollutes TLB's etc
> for no good reason.
> 
> How about this diff instead, avoiding the if-then-else setup?
> 
> 		Linus
> 
> -----
> --- v2.3.2/linux/mm/mlock.c	Fri Nov 20 11:43:19 1998
> +++ linux/mm/mlock.c	Sun May 16 21:45:23 1999
> @@ -115,10 +115,11 @@
>  	if (!retval) {
>  		/* keep track of amount of locked VM */
>  		pages = (end - start) >> PAGE_SHIFT;
> -		if (!(newflags & VM_LOCKED))
> +		if (newflags & VM_LOCKED) {
>  			pages = -pages;
> -		vma->vm_mm->locked_vm += pages;
> -		make_pages_present(start, end);
> +			make_pages_present(start, end);
> +		}
> +		vma->vm_mm->locked_vm -= pages;
>  	}
>  	return retval;
>  }
> 

I can't see any difference with my proposed fix, so if you are happy
with this one, I am too :-)  Note that in both our solutions, an "if"
check is happening, I am not sure if you are trying to remove the 
"else" code to reduce icache pollution. Also note that mlocks far 
outnumber munlocks (since apps depend on the final exit to release
all the locked memory), which in your solution translates to more
negate operations (pages = -pages).

Thanks.

Kanoj
kanoj@engr.sgi.com
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

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

* Re: [PATCH] kanoj-mm2.0-2.2.9 unneccesary page force in by munlock
  1999-05-17  6:16   ` Kanoj Sarcar
@ 1999-05-17 16:11     ` Linus Torvalds
  1999-05-17 17:31       ` Kanoj Sarcar
  0 siblings, 1 reply; 5+ messages in thread
From: Linus Torvalds @ 1999-05-17 16:11 UTC (permalink / raw)
  To: Kanoj Sarcar; +Cc: Linux-MM


On Sun, 16 May 1999, Kanoj Sarcar wrote:
> 
> Hmm, my logic was a little bit different. Note that you can call munlock()
> on a range even when a previous mlock() has not been done on the range (I
> think that's not an munlock error in POSIX). In 2.2.9, this would end up
> faulting in the pages, which doesn't need to happen ... (haven't really
> thought whether "root" can erroneously force memory deadlocks this way)

Well, if you look closely, the mlock_fixup() routine tests whether
lockedness has changed and returns early if it hasn't.. So in your case
nothing at all would have been done..

		Linus

--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

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

* Re: [PATCH] kanoj-mm2.0-2.2.9 unneccesary page force in by munlock
  1999-05-17 16:11     ` Linus Torvalds
@ 1999-05-17 17:31       ` Kanoj Sarcar
  0 siblings, 0 replies; 5+ messages in thread
From: Kanoj Sarcar @ 1999-05-17 17:31 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux-MM

> 
> 
> On Sun, 16 May 1999, Kanoj Sarcar wrote:
> > 
> > Hmm, my logic was a little bit different. Note that you can call munlock()
> > on a range even when a previous mlock() has not been done on the range (I
> > think that's not an munlock error in POSIX). In 2.2.9, this would end up
> > faulting in the pages, which doesn't need to happen ... (haven't really
> > thought whether "root" can erroneously force memory deadlocks this way)
> 
> Well, if you look closely, the mlock_fixup() routine tests whether
> lockedness has changed and returns early if it hasn't.. So in your case
> nothing at all would have been done..
> 
> 		Linus

Indeed, it does, my mistake ... it still makes sense to clean up the
code, as you mentioned originally ...

Thanks.

Kanoj
kanoj@engr.sgi.com
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

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

end of thread, other threads:[~1999-05-17 17:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-05-17  4:02 [PATCH] kanoj-mm2.0-2.2.9 unneccesary page force in by munlock Kanoj Sarcar
1999-05-17  4:48 ` Linus Torvalds
1999-05-17  6:16   ` Kanoj Sarcar
1999-05-17 16:11     ` Linus Torvalds
1999-05-17 17:31       ` Kanoj Sarcar

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