web-dev-qa-db-ja.com

多数のページフォールトに対処するにはどうすればよいですか?

1秒あたり最大200000のページフォールトが発生しますが、これは膨大な数であり、システム全体のパフォーマンスに影響を与えると思います。 16GのRAMを搭載したMBPを使用しています。

このような数のページフォールトに(​​常に)対処するにはどうすればよいですか?つまり、その背後にある理由を見つけることは可能ですか(どのプロセスがそれを引き起こし、その理由など)?


例えば:

$ Sudo vm_stat 1 
Mach Virtual Memory Statistics: (page size of 4096 bytes)
    free   active   specul inactive throttle    wired  prgable   faults     copy    0fill reactive   purged file-backed anonymous cmprssed cmprssor  dcomprs   comprs  pageins  pageout  swapins swapouts
    4917    96838      529    97567        0  3289215        2   11428M  127346K 5267290K 2537359K  215040K       47481    147453 11108999   703646 3631740K 3986806K  125027K  3038713 4551661K 4575495K 
    4728   119600      514   119225        0  3290072        0   197571      160     2067    28142        2       47479    191860 11063976   658555   153524   108572       31        0    11145    18981 
    4165   104525      514   104919        0  3288821        0   130758        0     2229    74497       12       47449    162509 11094522   689295    90301   121063        3        3    18085     7894 
    4648   106152      463   105365        0  3289210        0   169256      268     8150    73677        6       47404    164576 11097078   686991   122692   126220        0        0    12751    15474 
    5364   105849      246   101327        0  3291998        0   194376       81    24019    43351       10       47189    160233 11103191   687904   121794   129662       72        0    14705    14031 
    4800   131711      234   126573        0  3289384        0   272238        0     4346   110454        0       47177    211341 11035585   639095   167782   108490        0        0    10628    23480 
    3813   114535      203   114136        0  3289283        0   235409        0     3292    39228        6       47149    181725 11065977   670501   153957   184877       12        2    18041    17254 
    4568   115828      104   116790        0  3289299        0   211943        0     2536    81178        1       46680    186042 11061206   665872   139337   134989        0        0    18848    19316 
    3273    95211      105    95156        0  3289239        0   223742      268     2123    40588        4       46670    143802 11103048   708970   156600   198575        0        0    22910     8
$ top -n1 | head
Processes: 453 total, 8 running, 16 stuck, 429 sleeping, 2870 threads 
2016/07/21 15:06:33
Load Avg: 7.95, 9.09, 9.22 
CPU usage: 9.17% user, 41.17% sys, 49.64% idle 
SharedLibs: 54M resident, 8520K data, 3092K linkedit.
MemRegions: 307835 total, 4421M resident, 11M private, 143M shared.
PhysMem: 16G used (13G wired), 4880K unused.
VM: 4577G vsize, 528M framework vsize, 4619730480(0) swapins, 4643542587(0) swapouts.
Networks: packets: 67336466/41G in, 59785188/11G out.
Disks: 620736722/18T read, 615258201/18T written.
$ uptime
15:25pm  up 17 days 23:31,  48 users,  load average: 7.95, 9.09, 9.22
$ Sudo fs_usage | grep -e PgIn -e PgOut
15:25:02    PgOut[ST1P]   0.000146 W kernel_task
15:25:02    PgOut[ST1P]   0.000241 W kernel_task
15:25:02    PgOut[ST1P]   0.000234 W kernel_task
15:25:02    PgOut[ST1P]   0.000317 W kernel_task
15:25:02    PgOut[ST1P]   0.000333 W kernel_task
15:25:02    PgOut[ST1P]   0.000252 W kernel_task
15:25:02    PgOut[ST1P]   0.000248 W kernel_task
15:25:02    PgOut[ST1P]   0.000240 W kernel_task
15:25:02    PgOut[ST1P]   0.000236 W kernel_task
15:25:02    PgOut[ST1P]   0.000261 W kernel_task
15:25:02    PgOut[ST1P]   0.000257 W kernel_task
15:25:02    PgOut[ST1P]   0.000253 W kernel_task
15:25:02    PgOut[ST1P]   0.000289 W kernel_task
15:25:02    PgOut[ST1P]   0.000159 W kernel_task
15:25:02    PgOut[ST1P]   0.000120 W kernel_task
1
kenorb

カーネルがそれをサポートしている場合は、各ページフォールト時にスタックの記録を試みることができます。このコマンドを実行し、数秒後に中断します。

Sudo perf record -e page-faults -ag

大きなバイナリファイルを作成しますperf.dataで視覚化できます

perf report  

perfは大きなテーマです。 tutorial から始めることができます。

3
meuh