2009-06-08 07:40:11

by Fengguang Wu

[permalink] [raw]
Subject: Re: [PATCH 2/3] vmscan: make mapped executable pages the first class citizen

On Wed, May 20, 2009 at 07:20:24PM +0800, Andi Kleen wrote:
> One scenario that might be useful to test is what happens when some very large
> processes, all mapped and executable exceed memory and fight each other
> for the working set. Do you have regressions then compared to without
> the patches?

I managed to carry out some stress tests for memory tight desktops.
The outcome is encouraging: clock time and major faults are reduced
by 50%, and pswpin numbers are reduced to ~1/3.

Here is the test scenario.
- nfsroot gnome desktop with 512M physical memory
- run some programs, and switch between the existing windows after
starting each new program.

The progress timing (seconds) is:

before after programs
0.02 0.02 N xeyes
0.75 0.76 N firefox
2.02 1.88 N nautilus
3.36 3.17 N nautilus --browser
5.26 4.89 N gthumb
7.12 6.47 N gedit
9.22 8.16 N xpdf /usr/share/doc/shared-mime-info/shared-mime-info-spec.pdf
13.58 12.55 N xterm
15.87 14.57 N mlterm
18.63 17.06 N gnome-terminal
21.16 18.90 N urxvt
26.24 23.48 N gnome-system-monitor
28.72 26.52 N gnome-help
32.15 29.65 N gnome-dictionary
39.66 36.12 N /usr/games/sol
43.16 39.27 N /usr/games/gnometris
48.65 42.56 N /usr/games/gnect
53.31 47.03 N /usr/games/gtali
58.60 52.05 N /usr/games/iagno
65.77 55.42 N /usr/games/gnotravex
70.76 61.47 N /usr/games/mahjongg
76.15 67.11 N /usr/games/gnome-sudoku
86.32 75.15 N /usr/games/glines
92.21 79.70 N /usr/games/glchess
103.79 88.48 N /usr/games/gnomine
113.84 96.51 N /usr/games/gnotski
124.40 102.19 N /usr/games/gnibbles
137.41 114.93 N /usr/games/gnobots2
155.53 125.02 N /usr/games/blackjack
179.85 135.11 N /usr/games/same-gnome
224.49 154.50 N /usr/bin/gnome-window-properties
248.44 162.09 N /usr/bin/gnome-default-applications-properties
282.62 173.29 N /usr/bin/gnome-at-properties
323.72 188.21 N /usr/bin/gnome-typing-monitor
363.99 199.93 N /usr/bin/gnome-at-visual
394.21 206.95 N /usr/bin/gnome-sound-properties
435.14 224.49 N /usr/bin/gnome-at-mobility
463.05 234.11 N /usr/bin/gnome-keybinding-properties
503.75 248.59 N /usr/bin/gnome-about-me
554.00 276.27 N /usr/bin/gnome-display-properties
615.48 304.39 N /usr/bin/gnome-network-preferences
693.03 342.01 N /usr/bin/gnome-mouse-properties
759.90 388.58 N /usr/bin/gnome-appearance-properties
937.90 508.47 N /usr/bin/gnome-control-center
1109.75 587.57 N /usr/bin/gnome-keyboard-properties
1399.05 758.16 N : oocalc
1524.64 830.03 N : oodraw
1684.31 900.03 N : ooimpress
1874.04 993.91 N : oomath
2115.12 1081.89 N : ooweb
2369.02 1161.99 N : oowriter

Note that the oo* commands are actually commented out.

The vmstat numbers are (some relevant ones are marked with *):

before after
nr_free_pages 1293 3898
nr_inactive_anon 59956 53460
nr_active_anon 26815 30026
nr_inactive_file 2657 3218
nr_active_file 2019 2806
nr_unevictable 4 4
nr_mlock 4 4
nr_anon_pages 26706 27859
*nr_mapped 3542 4469
nr_file_pages 72232 67681
nr_dirty 1 0
nr_writeback 123 19
nr_slab_reclaimable 3375 3534
nr_slab_unreclaimable 11405 10665
nr_page_table_pages 8106 7864
nr_unstable 0 0
nr_bounce 0 0
*nr_vmscan_write 394776 230839
nr_writeback_temp 0 0
numa_hit 6843353 3318676
numa_miss 0 0
numa_foreign 0 0
numa_interleave 1719 1719
numa_local 6843353 3318676
numa_other 0 0
*pgpgin 5954683 2057175
*pgpgout 1578276 922744
*pswpin 1486615 512238
*pswpout 394568 230685
pgalloc_dma 277432 56602
pgalloc_dma32 6769477 3310348
pgalloc_normal 0 0
pgalloc_movable 0 0
pgfree 7048396 3371118
pgactivate 2036343 1471492
pgdeactivate 2189691 1612829
pgfault 3702176 3100702
*pgmajfault 452116 201343
pgrefill_dma 12185 7127
pgrefill_dma32 334384 653703
pgrefill_normal 0 0
pgrefill_movable 0 0
pgsteal_dma 74214 22179
pgsteal_dma32 3334164 1638029
pgsteal_normal 0 0
pgsteal_movable 0 0
pgscan_kswapd_dma 1081421 1216199
pgscan_kswapd_dma32 58979118 46002810
pgscan_kswapd_normal 0 0
pgscan_kswapd_movable 0 0
pgscan_direct_dma 2015438 1086109
pgscan_direct_dma32 55787823 36101597
pgscan_direct_normal 0 0
pgscan_direct_movable 0 0
pginodesteal 3461 7281
slabs_scanned 564864 527616
kswapd_steal 2889797 1448082
kswapd_inodesteal 14827 14835
pageoutrun 43459 21562
allocstall 9653 4032
pgrotated 384216 228631
htlb_buddy_alloc_success 0 0
htlb_buddy_alloc_fail 0 0
unevictable_pgs_culled 0 0
unevictable_pgs_scanned 0 0
unevictable_pgs_rescued 0 0
unevictable_pgs_mlocked 4 4
unevictable_pgs_munlocked 0 0
unevictable_pgs_cleared 0 0
unevictable_pgs_stranded 0 0
unevictable_pgs_mlockfreed 0 0


2009-06-08 07:52:04

by KOSAKI Motohiro

[permalink] [raw]
Subject: Re: [PATCH 2/3] vmscan: make mapped executable pages the first class citizen

> On Wed, May 20, 2009 at 07:20:24PM +0800, Andi Kleen wrote:
> > One scenario that might be useful to test is what happens when some very large
> > processes, all mapped and executable exceed memory and fight each other
> > for the working set. Do you have regressions then compared to without
> > the patches?
>
> I managed to carry out some stress tests for memory tight desktops.
> The outcome is encouraging: clock time and major faults are reduced
> by 50%, and pswpin numbers are reduced to ~1/3.
>
> Here is the test scenario.
> - nfsroot gnome desktop with 512M physical memory
> - run some programs, and switch between the existing windows after
> starting each new program.
>
> The progress timing (seconds) is:
>
> before after programs
> 0.02 0.02 N xeyes
> 0.75 0.76 N firefox
> 2.02 1.88 N nautilus
> 3.36 3.17 N nautilus --browser
> 5.26 4.89 N gthumb
> 7.12 6.47 N gedit
> 9.22 8.16 N xpdf /usr/share/doc/shared-mime-info/shared-mime-info-spec.pdf
> 13.58 12.55 N xterm
> 15.87 14.57 N mlterm
> 18.63 17.06 N gnome-terminal
> 21.16 18.90 N urxvt
> 26.24 23.48 N gnome-system-monitor
> 28.72 26.52 N gnome-help
> 32.15 29.65 N gnome-dictionary
> 39.66 36.12 N /usr/games/sol
> 43.16 39.27 N /usr/games/gnometris
> 48.65 42.56 N /usr/games/gnect
> 53.31 47.03 N /usr/games/gtali
> 58.60 52.05 N /usr/games/iagno
> 65.77 55.42 N /usr/games/gnotravex
> 70.76 61.47 N /usr/games/mahjongg
> 76.15 67.11 N /usr/games/gnome-sudoku
> 86.32 75.15 N /usr/games/glines
> 92.21 79.70 N /usr/games/glchess
> 103.79 88.48 N /usr/games/gnomine
> 113.84 96.51 N /usr/games/gnotski
> 124.40 102.19 N /usr/games/gnibbles
> 137.41 114.93 N /usr/games/gnobots2
> 155.53 125.02 N /usr/games/blackjack
> 179.85 135.11 N /usr/games/same-gnome
> 224.49 154.50 N /usr/bin/gnome-window-properties
> 248.44 162.09 N /usr/bin/gnome-default-applications-properties
> 282.62 173.29 N /usr/bin/gnome-at-properties
> 323.72 188.21 N /usr/bin/gnome-typing-monitor
> 363.99 199.93 N /usr/bin/gnome-at-visual
> 394.21 206.95 N /usr/bin/gnome-sound-properties
> 435.14 224.49 N /usr/bin/gnome-at-mobility
> 463.05 234.11 N /usr/bin/gnome-keybinding-properties
> 503.75 248.59 N /usr/bin/gnome-about-me
> 554.00 276.27 N /usr/bin/gnome-display-properties
> 615.48 304.39 N /usr/bin/gnome-network-preferences
> 693.03 342.01 N /usr/bin/gnome-mouse-properties
> 759.90 388.58 N /usr/bin/gnome-appearance-properties
> 937.90 508.47 N /usr/bin/gnome-control-center
> 1109.75 587.57 N /usr/bin/gnome-keyboard-properties
> 1399.05 758.16 N : oocalc
> 1524.64 830.03 N : oodraw
> 1684.31 900.03 N : ooimpress
> 1874.04 993.91 N : oomath
> 2115.12 1081.89 N : ooweb
> 2369.02 1161.99 N : oowriter

Thanks this great effort!
I definitely agree this patch sould be merge to -mm asap.

Acked-by: KOSAKI Motohiro <[email protected]>


2009-06-08 07:56:47

by Fengguang Wu

[permalink] [raw]
Subject: Re: [PATCH 2/3] vmscan: make mapped executable pages the first class citizen

On Mon, Jun 08, 2009 at 03:51:53PM +0800, KOSAKI Motohiro wrote:
> > On Wed, May 20, 2009 at 07:20:24PM +0800, Andi Kleen wrote:
> > > One scenario that might be useful to test is what happens when some very large
> > > processes, all mapped and executable exceed memory and fight each other
> > > for the working set. Do you have regressions then compared to without
> > > the patches?
> >
> > I managed to carry out some stress tests for memory tight desktops.
> > The outcome is encouraging: clock time and major faults are reduced
> > by 50%, and pswpin numbers are reduced to ~1/3.
> >
> > Here is the test scenario.
> > - nfsroot gnome desktop with 512M physical memory
> > - run some programs, and switch between the existing windows after
> > starting each new program.
> >
> > The progress timing (seconds) is:
> >
> > before after programs
> > 0.02 0.02 N xeyes
> > 0.75 0.76 N firefox
> > 2.02 1.88 N nautilus
> > 3.36 3.17 N nautilus --browser
> > 5.26 4.89 N gthumb
> > 7.12 6.47 N gedit
> > 9.22 8.16 N xpdf /usr/share/doc/shared-mime-info/shared-mime-info-spec.pdf
> > 13.58 12.55 N xterm
> > 15.87 14.57 N mlterm
> > 18.63 17.06 N gnome-terminal
> > 21.16 18.90 N urxvt
> > 26.24 23.48 N gnome-system-monitor
> > 28.72 26.52 N gnome-help
> > 32.15 29.65 N gnome-dictionary
> > 39.66 36.12 N /usr/games/sol
> > 43.16 39.27 N /usr/games/gnometris
> > 48.65 42.56 N /usr/games/gnect
> > 53.31 47.03 N /usr/games/gtali
> > 58.60 52.05 N /usr/games/iagno
> > 65.77 55.42 N /usr/games/gnotravex
> > 70.76 61.47 N /usr/games/mahjongg
> > 76.15 67.11 N /usr/games/gnome-sudoku
> > 86.32 75.15 N /usr/games/glines
> > 92.21 79.70 N /usr/games/glchess
> > 103.79 88.48 N /usr/games/gnomine
> > 113.84 96.51 N /usr/games/gnotski
> > 124.40 102.19 N /usr/games/gnibbles
> > 137.41 114.93 N /usr/games/gnobots2
> > 155.53 125.02 N /usr/games/blackjack
> > 179.85 135.11 N /usr/games/same-gnome
> > 224.49 154.50 N /usr/bin/gnome-window-properties
> > 248.44 162.09 N /usr/bin/gnome-default-applications-properties
> > 282.62 173.29 N /usr/bin/gnome-at-properties
> > 323.72 188.21 N /usr/bin/gnome-typing-monitor
> > 363.99 199.93 N /usr/bin/gnome-at-visual
> > 394.21 206.95 N /usr/bin/gnome-sound-properties
> > 435.14 224.49 N /usr/bin/gnome-at-mobility
> > 463.05 234.11 N /usr/bin/gnome-keybinding-properties
> > 503.75 248.59 N /usr/bin/gnome-about-me
> > 554.00 276.27 N /usr/bin/gnome-display-properties
> > 615.48 304.39 N /usr/bin/gnome-network-preferences
> > 693.03 342.01 N /usr/bin/gnome-mouse-properties
> > 759.90 388.58 N /usr/bin/gnome-appearance-properties
> > 937.90 508.47 N /usr/bin/gnome-control-center
> > 1109.75 587.57 N /usr/bin/gnome-keyboard-properties
> > 1399.05 758.16 N : oocalc
> > 1524.64 830.03 N : oodraw
> > 1684.31 900.03 N : ooimpress
> > 1874.04 993.91 N : oomath
> > 2115.12 1081.89 N : ooweb
> > 2369.02 1161.99 N : oowriter
>
> Thanks this great effort!
> I definitely agree this patch sould be merge to -mm asap.
>
> Acked-by: KOSAKI Motohiro <[email protected]>

Thank you :)

To be complete, here are the free numbers at the end of the tests:

before patch:
total used free shared buffers cached
Mem: 474 467 7 0 0 236
-/+ buffers/cache: 230 243
Swap: 1023 418 605

after patch
total used free shared buffers cached
Mem: 474 457 16 0 0 236
-/+ buffers/cache: 221 253
Swap: 1023 404 619

Thanks,
Fengguang

2009-06-08 17:25:50

by Nai Xia

[permalink] [raw]
Subject: Re: [PATCH 2/3] vmscan: make mapped executable pages the first class citizen

On Mon, Jun 8, 2009 at 3:39 PM, Wu Fengguang<[email protected]> wrote:
> On Wed, May 20, 2009 at 07:20:24PM +0800, Andi Kleen wrote:
>> One scenario that might be useful to test is what happens when some very large
>> processes, all mapped and executable exceed memory and fight each other
>> for the working set. Do you have regressions then compared to without
>> the patches?
>
> I managed to carry out some stress tests for memory tight desktops.
> The outcome is encouraging: clock time and major faults are reduced
> by 50%, and pswpin numbers are reduced to ~1/3.
>
> Here is the test scenario.
> - nfsroot gnome desktop with 512M physical memory
> - run some programs, and switch between the existing windows after
> ?starting each new program.

I think this is a story of VM_EXEC pages fighting against other kind of pages,
but as Andi said, did you test real regression case of VM_EXEC pages fighting
against each other?

"
One scenario that might be useful to test is what happens when some very large
processes, all mapped and executable exceed memory and fight each other
for the working set. Do you have regressions then compared to without
the patches?

-Andi
"

My experices with Compcache(http://code.google.com/p/compcache/) show that
it also has similar improvement in similar case on LTSP
(http://code.google.com/p/compcache/wiki/Performance).
But it does has a non-trivial performance loss even when doing kernel
compilation.
I am not a little surprised when Andrew said it "There must be some cost
somewhere".

So you have found the spots where your patch doing great,
make double sure it will not do something bad in all places,
and that will be perfect. :-)

>
> The progress timing (seconds) is:
>
> ?before ? ? ? after ? ?programs
> ? ?0.02 ? ? ? ?0.02 ? ?N xeyes
> ? ?0.75 ? ? ? ?0.76 ? ?N firefox
> ? ?2.02 ? ? ? ?1.88 ? ?N nautilus
> ? ?3.36 ? ? ? ?3.17 ? ?N nautilus --browser
> ? ?5.26 ? ? ? ?4.89 ? ?N gthumb
> ? ?7.12 ? ? ? ?6.47 ? ?N gedit
> ? ?9.22 ? ? ? ?8.16 ? ?N xpdf /usr/share/doc/shared-mime-info/shared-mime-info-spec.pdf
> ? 13.58 ? ? ? 12.55 ? ?N xterm
> ? 15.87 ? ? ? 14.57 ? ?N mlterm
> ? 18.63 ? ? ? 17.06 ? ?N gnome-terminal
> ? 21.16 ? ? ? 18.90 ? ?N urxvt
> ? 26.24 ? ? ? 23.48 ? ?N gnome-system-monitor
> ? 28.72 ? ? ? 26.52 ? ?N gnome-help
> ? 32.15 ? ? ? 29.65 ? ?N gnome-dictionary
> ? 39.66 ? ? ? 36.12 ? ?N /usr/games/sol
> ? 43.16 ? ? ? 39.27 ? ?N /usr/games/gnometris
> ? 48.65 ? ? ? 42.56 ? ?N /usr/games/gnect
> ? 53.31 ? ? ? 47.03 ? ?N /usr/games/gtali
> ? 58.60 ? ? ? 52.05 ? ?N /usr/games/iagno
> ? 65.77 ? ? ? 55.42 ? ?N /usr/games/gnotravex
> ? 70.76 ? ? ? 61.47 ? ?N /usr/games/mahjongg
> ? 76.15 ? ? ? 67.11 ? ?N /usr/games/gnome-sudoku
> ? 86.32 ? ? ? 75.15 ? ?N /usr/games/glines
> ? 92.21 ? ? ? 79.70 ? ?N /usr/games/glchess
> ?103.79 ? ? ? 88.48 ? ?N /usr/games/gnomine
> ?113.84 ? ? ? 96.51 ? ?N /usr/games/gnotski
> ?124.40 ? ? ?102.19 ? ?N /usr/games/gnibbles
> ?137.41 ? ? ?114.93 ? ?N /usr/games/gnobots2
> ?155.53 ? ? ?125.02 ? ?N /usr/games/blackjack
> ?179.85 ? ? ?135.11 ? ?N /usr/games/same-gnome
> ?224.49 ? ? ?154.50 ? ?N /usr/bin/gnome-window-properties
> ?248.44 ? ? ?162.09 ? ?N /usr/bin/gnome-default-applications-properties
> ?282.62 ? ? ?173.29 ? ?N /usr/bin/gnome-at-properties
> ?323.72 ? ? ?188.21 ? ?N /usr/bin/gnome-typing-monitor
> ?363.99 ? ? ?199.93 ? ?N /usr/bin/gnome-at-visual
> ?394.21 ? ? ?206.95 ? ?N /usr/bin/gnome-sound-properties
> ?435.14 ? ? ?224.49 ? ?N /usr/bin/gnome-at-mobility
> ?463.05 ? ? ?234.11 ? ?N /usr/bin/gnome-keybinding-properties
> ?503.75 ? ? ?248.59 ? ?N /usr/bin/gnome-about-me
> ?554.00 ? ? ?276.27 ? ?N /usr/bin/gnome-display-properties
> ?615.48 ? ? ?304.39 ? ?N /usr/bin/gnome-network-preferences
> ?693.03 ? ? ?342.01 ? ?N /usr/bin/gnome-mouse-properties
> ?759.90 ? ? ?388.58 ? ?N /usr/bin/gnome-appearance-properties
> ?937.90 ? ? ?508.47 ? ?N /usr/bin/gnome-control-center
> ?1109.75 ? ? ?587.57 ? ?N /usr/bin/gnome-keyboard-properties
> ?1399.05 ? ? ?758.16 ? ?N : oocalc
> ?1524.64 ? ? ?830.03 ? ?N : oodraw
> ?1684.31 ? ? ?900.03 ? ?N : ooimpress
> ?1874.04 ? ? ?993.91 ? ?N : oomath
> ?2115.12 ? ? 1081.89 ? ?N : ooweb
> ?2369.02 ? ? 1161.99 ? ?N : oowriter
>
> Note that the oo* commands are actually commented out.
>
> The vmstat numbers are (some relevant ones are marked with *):
>
> ? ? ? ? ? ? ? ? ? ? ? ? ? ?before ? ?after
> ?nr_free_pages ? ? ? ? ? ? ?1293 ? ? ?3898
> ?nr_inactive_anon ? ? ? ? ? 59956 ? ? 53460
> ?nr_active_anon ? ? ? ? ? ? 26815 ? ? 30026
> ?nr_inactive_file ? ? ? ? ? 2657 ? ? ?3218
> ?nr_active_file ? ? ? ? ? ? 2019 ? ? ?2806
> ?nr_unevictable ? ? ? ? ? ? 4 ? ? ? ? 4
> ?nr_mlock ? ? ? ? ? ? ? ? ? 4 ? ? ? ? 4
> ?nr_anon_pages ? ? ? ? ? ? ?26706 ? ? 27859
> *nr_mapped ? ? ? ? ? ? ? ? ?3542 ? ? ?4469
> ?nr_file_pages ? ? ? ? ? ? ?72232 ? ? 67681
> ?nr_dirty ? ? ? ? ? ? ? ? ? 1 ? ? ? ? 0
> ?nr_writeback ? ? ? ? ? ? ? 123 ? ? ? 19
> ?nr_slab_reclaimable ? ? ? ?3375 ? ? ?3534
> ?nr_slab_unreclaimable ? ? ?11405 ? ? 10665
> ?nr_page_table_pages ? ? ? ?8106 ? ? ?7864
> ?nr_unstable ? ? ? ? ? ? ? ?0 ? ? ? ? 0
> ?nr_bounce ? ? ? ? ? ? ? ? ?0 ? ? ? ? 0
> *nr_vmscan_write ? ? ? ? ? ?394776 ? ?230839
> ?nr_writeback_temp ? ? ? ? ?0 ? ? ? ? 0
> ?numa_hit ? ? ? ? ? ? ? ? ? 6843353 ? 3318676
> ?numa_miss ? ? ? ? ? ? ? ? ?0 ? ? ? ? 0
> ?numa_foreign ? ? ? ? ? ? ? 0 ? ? ? ? 0
> ?numa_interleave ? ? ? ? ? ?1719 ? ? ?1719
> ?numa_local ? ? ? ? ? ? ? ? 6843353 ? 3318676
> ?numa_other ? ? ? ? ? ? ? ? 0 ? ? ? ? 0
> *pgpgin ? ? ? ? ? ? ? ? ? ? 5954683 ? 2057175
> *pgpgout ? ? ? ? ? ? ? ? ? ?1578276 ? 922744
> *pswpin ? ? ? ? ? ? ? ? ? ? 1486615 ? 512238
> *pswpout ? ? ? ? ? ? ? ? ? ?394568 ? ?230685
> ?pgalloc_dma ? ? ? ? ? ? ? ?277432 ? ?56602
> ?pgalloc_dma32 ? ? ? ? ? ? ?6769477 ? 3310348
> ?pgalloc_normal ? ? ? ? ? ? 0 ? ? ? ? 0
> ?pgalloc_movable ? ? ? ? ? ?0 ? ? ? ? 0
> ?pgfree ? ? ? ? ? ? ? ? ? ? 7048396 ? 3371118
> ?pgactivate ? ? ? ? ? ? ? ? 2036343 ? 1471492
> ?pgdeactivate ? ? ? ? ? ? ? 2189691 ? 1612829
> ?pgfault ? ? ? ? ? ? ? ? ? ?3702176 ? 3100702
> *pgmajfault ? ? ? ? ? ? ? ? 452116 ? ?201343
> ?pgrefill_dma ? ? ? ? ? ? ? 12185 ? ? 7127
> ?pgrefill_dma32 ? ? ? ? ? ? 334384 ? ?653703
> ?pgrefill_normal ? ? ? ? ? ?0 ? ? ? ? 0
> ?pgrefill_movable ? ? ? ? ? 0 ? ? ? ? 0
> ?pgsteal_dma ? ? ? ? ? ? ? ?74214 ? ? 22179
> ?pgsteal_dma32 ? ? ? ? ? ? ?3334164 ? 1638029
> ?pgsteal_normal ? ? ? ? ? ? 0 ? ? ? ? 0
> ?pgsteal_movable ? ? ? ? ? ?0 ? ? ? ? 0
> ?pgscan_kswapd_dma ? ? ? ? ?1081421 ? 1216199
> ?pgscan_kswapd_dma32 ? ? ? ?58979118 ?46002810
> ?pgscan_kswapd_normal ? ? ? 0 ? ? ? ? 0
> ?pgscan_kswapd_movable ? ? ?0 ? ? ? ? 0
> ?pgscan_direct_dma ? ? ? ? ?2015438 ? 1086109
> ?pgscan_direct_dma32 ? ? ? ?55787823 ?36101597
> ?pgscan_direct_normal ? ? ? 0 ? ? ? ? 0
> ?pgscan_direct_movable ? ? ?0 ? ? ? ? 0
> ?pginodesteal ? ? ? ? ? ? ? 3461 ? ? ?7281
> ?slabs_scanned ? ? ? ? ? ? ?564864 ? ?527616
> ?kswapd_steal ? ? ? ? ? ? ? 2889797 ? 1448082
> ?kswapd_inodesteal ? ? ? ? ?14827 ? ? 14835
> ?pageoutrun ? ? ? ? ? ? ? ? 43459 ? ? 21562
> ?allocstall ? ? ? ? ? ? ? ? 9653 ? ? ?4032
> ?pgrotated ? ? ? ? ? ? ? ? ?384216 ? ?228631
> ?htlb_buddy_alloc_success ? 0 ? ? ? ? 0
> ?htlb_buddy_alloc_fail ? ? ?0 ? ? ? ? 0
> ?unevictable_pgs_culled ? ? 0 ? ? ? ? 0
> ?unevictable_pgs_scanned ? ?0 ? ? ? ? 0
> ?unevictable_pgs_rescued ? ?0 ? ? ? ? 0
> ?unevictable_pgs_mlocked ? ?4 ? ? ? ? 4
> ?unevictable_pgs_munlocked ?0 ? ? ? ? 0
> ?unevictable_pgs_cleared ? ?0 ? ? ? ? 0
> ?unevictable_pgs_stranded ? 0 ? ? ? ? 0
> ?unevictable_pgs_mlockfreed 0 ? ? ? ? 0
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to [email protected]. ?For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
>

2009-06-09 06:44:20

by Fengguang Wu

[permalink] [raw]
Subject: Re: [PATCH 2/3] vmscan: make mapped executable pages the first class citizen

On Tue, Jun 09, 2009 at 01:18:26AM +0800, Nai Xia wrote:
> On Mon, Jun 8, 2009 at 3:39 PM, Wu Fengguang<[email protected]> wrote:
> > On Wed, May 20, 2009 at 07:20:24PM +0800, Andi Kleen wrote:
> >> One scenario that might be useful to test is what happens when some very large
> >> processes, all mapped and executable exceed memory and fight each other
> >> for the working set. Do you have regressions then compared to without
> >> the patches?
> >
> > I managed to carry out some stress tests for memory tight desktops.
> > The outcome is encouraging: clock time and major faults are reduced
> > by 50%, and pswpin numbers are reduced to ~1/3.
> >
> > Here is the test scenario.
> > - nfsroot gnome desktop with 512M physical memory
> > - run some programs, and switch between the existing windows after
> >  starting each new program.
>
> I think this is a story of VM_EXEC pages fighting against other kind of pages,
> but as Andi said, did you test real regression case of VM_EXEC pages fighting
> against each other?

No. We'd better buy more memory if it's not enough for VM_EXEC pages :-)

Thanks,
Fengguang

> "
> One scenario that might be useful to test is what happens when some very large
> processes, all mapped and executable exceed memory and fight each other
> for the working set. Do you have regressions then compared to without
> the patches?
>
> -Andi
> "
>
> My experices with Compcache(http://code.google.com/p/compcache/) show that
> it also has similar improvement in similar case on LTSP
> (http://code.google.com/p/compcache/wiki/Performance).
> But it does has a non-trivial performance loss even when doing kernel
> compilation.
> I am not a little surprised when Andrew said it "There must be some cost
> somewhere".
>
> So you have found the spots where your patch doing great,
> make double sure it will not do something bad in all places,
> and that will be perfect. :-)
>
> >
> > The progress timing (seconds) is:
> >
> >  before       after    programs
> >    0.02        0.02    N xeyes
> >    0.75        0.76    N firefox
> >    2.02        1.88    N nautilus
> >    3.36        3.17    N nautilus --browser
> >    5.26        4.89    N gthumb
> >    7.12        6.47    N gedit
> >    9.22        8.16    N xpdf /usr/share/doc/shared-mime-info/shared-mime-info-spec.pdf
> >   13.58       12.55    N xterm
> >   15.87       14.57    N mlterm
> >   18.63       17.06    N gnome-terminal
> >   21.16       18.90    N urxvt
> >   26.24       23.48    N gnome-system-monitor
> >   28.72       26.52    N gnome-help
> >   32.15       29.65    N gnome-dictionary
> >   39.66       36.12    N /usr/games/sol
> >   43.16       39.27    N /usr/games/gnometris
> >   48.65       42.56    N /usr/games/gnect
> >   53.31       47.03    N /usr/games/gtali
> >   58.60       52.05    N /usr/games/iagno
> >   65.77       55.42    N /usr/games/gnotravex
> >   70.76       61.47    N /usr/games/mahjongg
> >   76.15       67.11    N /usr/games/gnome-sudoku
> >   86.32       75.15    N /usr/games/glines
> >   92.21       79.70    N /usr/games/glchess
> >  103.79       88.48    N /usr/games/gnomine
> >  113.84       96.51    N /usr/games/gnotski
> >  124.40      102.19    N /usr/games/gnibbles
> >  137.41      114.93    N /usr/games/gnobots2
> >  155.53      125.02    N /usr/games/blackjack
> >  179.85      135.11    N /usr/games/same-gnome
> >  224.49      154.50    N /usr/bin/gnome-window-properties
> >  248.44      162.09    N /usr/bin/gnome-default-applications-properties
> >  282.62      173.29    N /usr/bin/gnome-at-properties
> >  323.72      188.21    N /usr/bin/gnome-typing-monitor
> >  363.99      199.93    N /usr/bin/gnome-at-visual
> >  394.21      206.95    N /usr/bin/gnome-sound-properties
> >  435.14      224.49    N /usr/bin/gnome-at-mobility
> >  463.05      234.11    N /usr/bin/gnome-keybinding-properties
> >  503.75      248.59    N /usr/bin/gnome-about-me
> >  554.00      276.27    N /usr/bin/gnome-display-properties
> >  615.48      304.39    N /usr/bin/gnome-network-preferences
> >  693.03      342.01    N /usr/bin/gnome-mouse-properties
> >  759.90      388.58    N /usr/bin/gnome-appearance-properties
> >  937.90      508.47    N /usr/bin/gnome-control-center
> >  1109.75      587.57    N /usr/bin/gnome-keyboard-properties
> >  1399.05      758.16    N : oocalc
> >  1524.64      830.03    N : oodraw
> >  1684.31      900.03    N : ooimpress
> >  1874.04      993.91    N : oomath
> >  2115.12     1081.89    N : ooweb
> >  2369.02     1161.99    N : oowriter
> >
> > Note that the oo* commands are actually commented out.
> >
> > The vmstat numbers are (some relevant ones are marked with *):
> >
> >                            before    after
> >  nr_free_pages              1293      3898
> >  nr_inactive_anon           59956     53460
> >  nr_active_anon             26815     30026
> >  nr_inactive_file           2657      3218
> >  nr_active_file             2019      2806
> >  nr_unevictable             4         4
> >  nr_mlock                   4         4
> >  nr_anon_pages              26706     27859
> > *nr_mapped                  3542      4469
> >  nr_file_pages              72232     67681
> >  nr_dirty                   1         0
> >  nr_writeback               123       19
> >  nr_slab_reclaimable        3375      3534
> >  nr_slab_unreclaimable      11405     10665
> >  nr_page_table_pages        8106      7864
> >  nr_unstable                0         0
> >  nr_bounce                  0         0
> > *nr_vmscan_write            394776    230839
> >  nr_writeback_temp          0         0
> >  numa_hit                   6843353   3318676
> >  numa_miss                  0         0
> >  numa_foreign               0         0
> >  numa_interleave            1719      1719
> >  numa_local                 6843353   3318676
> >  numa_other                 0         0
> > *pgpgin                     5954683   2057175
> > *pgpgout                    1578276   922744
> > *pswpin                     1486615   512238
> > *pswpout                    394568    230685
> >  pgalloc_dma                277432    56602
> >  pgalloc_dma32              6769477   3310348
> >  pgalloc_normal             0         0
> >  pgalloc_movable            0         0
> >  pgfree                     7048396   3371118
> >  pgactivate                 2036343   1471492
> >  pgdeactivate               2189691   1612829
> >  pgfault                    3702176   3100702
> > *pgmajfault                 452116    201343
> >  pgrefill_dma               12185     7127
> >  pgrefill_dma32             334384    653703
> >  pgrefill_normal            0         0
> >  pgrefill_movable           0         0
> >  pgsteal_dma                74214     22179
> >  pgsteal_dma32              3334164   1638029
> >  pgsteal_normal             0         0
> >  pgsteal_movable            0         0
> >  pgscan_kswapd_dma          1081421   1216199
> >  pgscan_kswapd_dma32        58979118  46002810
> >  pgscan_kswapd_normal       0         0
> >  pgscan_kswapd_movable      0         0
> >  pgscan_direct_dma          2015438   1086109
> >  pgscan_direct_dma32        55787823  36101597
> >  pgscan_direct_normal       0         0
> >  pgscan_direct_movable      0         0
> >  pginodesteal               3461      7281
> >  slabs_scanned              564864    527616
> >  kswapd_steal               2889797   1448082
> >  kswapd_inodesteal          14827     14835
> >  pageoutrun                 43459     21562
> >  allocstall                 9653      4032
> >  pgrotated                  384216    228631
> >  htlb_buddy_alloc_success   0         0
> >  htlb_buddy_alloc_fail      0         0
> >  unevictable_pgs_culled     0         0
> >  unevictable_pgs_scanned    0         0
> >  unevictable_pgs_rescued    0         0
> >  unevictable_pgs_mlocked    4         4
> >  unevictable_pgs_munlocked  0         0
> >  unevictable_pgs_cleared    0         0
> >  unevictable_pgs_stranded   0         0
> >  unevictable_pgs_mlockfreed 0         0
> >
> > --
> > To unsubscribe, send a message with 'unsubscribe linux-mm' in
> > the body to [email protected].  For more info on Linux MM,
> > see: http://www.linux-mm.org/ .
> > Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
> >