Re: [RFC MM] speculative page fault

Minchan Kim
2009-11-13T16:20:47Z

On Fri, Nov 13, 2009 at 4:35 PM, KAMEZAWA Hiroyuki
<kamezawa.hiroyu@jp.fujitsu.com> wrote:
> This is just a toy patch inspied by on Christoph's mmap_sem works.
> Only for my hobby, now.
>
> Not well tested. So please look into only if you have time.
>
> My multi-thread page fault test program shows some improvement.
> But I doubt my test ;) Do you have recommended benchmarks for parallel page-faults ?
>
> Counting # of page faults per 60sec. See page-faults. bigger is better.
> Test on x86-64 8cpus.
>
> [Before]
>  474441.541914  task-clock-msecs         #      7.906 CPUs
>          10318  context-switches         #      0.000 M/sec
>             10  CPU-migrations           #      0.000 M/sec
>       15816787  page-faults              #      0.033 M/sec
>  1485219138381  cycles                   #   3130.458 M/sec  (scaled from 69.99%)
>   295669524399  instructions             #      0.199 IPC    (scaled from 79.98%)
>    57658291915  branches                 #    121.529 M/sec  (scaled from 79.98%)
>      798567455  branch-misses            #      1.385 %      (scaled from 79.98%)
>     2458780947  cache-references         #      5.182 M/sec  (scaled from 20.02%)
>      844605496  cache-misses             #      1.780 M/sec  (scaled from 20.02%)
>
> [After]
> 471166.582784  task-clock-msecs         #      7.852 CPUs
>          10378  context-switches         #      0.000 M/sec
>             10  CPU-migrations           #      0.000 M/sec
>       37950235  page-faults              #      0.081 M/sec
>  1463000664470  cycles                   #   3105.060 M/sec  (scaled from 70.32%)
>   346531590054  instructions             #      0.237 IPC    (scaled from 80.20%)
>    63309364882  branches                 #    134.367 M/sec  (scaled from 80.19%)
>      448256258  branch-misses            #      0.708 %      (scaled from 80.20%)
>     2601112130  cache-references         #      5.521 M/sec  (scaled from 19.81%)
>      872978619  cache-misses             #      1.853 M/sec  (scaled from 19.80%)
>

Looks amazing. page fault is the two times faster than old.
What's your test program?

I think per thread vma cache is effective as well as speculative lock.

> Main concept of this patch is
>  - Do page fault without taking mm->mmap_sem until some modification in vma happens.
>  - All page fault via get_user_pages() should have to take mmap_sem.
>  - find_vma()/rb_tree must be walked under proper locks. For avoiding that, use
>   per-thread cache.
>
> It seems I don't have enough time to update this, more.
> So, I dump patches here just for share.

I think this is good embedded device as well as big thread environment
like google.
Some embedded device has big threads. That's because design issue of
migration from RTOS
to Linux. Thread model makes system design easier since threads share
address space like RTOS.
I know it's bad design. but At a loss, it's real problem.

I support this idea.
Thanks, Kame.

> 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: email@kvack.org
>

--
Kind regards,
Minchan Kim