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

From: Nai Xia
Date: Mon Jun 08 2009 - 13:25:54 EST


On Mon, Jun 8, 2009 at 3:39 PM, Wu Fengguang<fengguang.wu@xxxxxxxxx> 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 majordomo@xxxxxxxxxx  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/