8

私は、並列処理のために最大8回フォークするアプリケーションに取り組んでいます。各フォークには、フォークの時点での元のプロセスからのメモリスペースの完全なコピーがあります。Linuxはプロセス間でページを共有し、変更された場合にのみ新しいページを作成するため、フォークは高速です。実際には、メモリ消費量の増加は、私のアプリケーションでは約3倍のようです。その成長を減らす変更を特定するために使用するツールまたは手法に関する提案はありますか?

1つの考えは、変更されたページのページの断片化を調べることです。フォークされたプロセスに割り当てられているものの強引な調査もあります。どちらの場合でも、その分析を実行するためにどのような手法またはツールを推奨できますか?

プログラムは並列処理でも完了するまでに数時間かかり、最大1TBのメモリフットプリントがあるため、インストルメンテーションオプションが制限されることに注意してください。

4

1 に答える 1

2

vmstatsystemtapおよび またはを使用して、消費量を監視できglibcます。消費の実際の影響を理解するために、障害が発生している場所を確認するためにmalloc-hooks使用できます。perf

大規模なメモリ プールを使用するときにアプリケーションが TLB の負荷に直面する場合 (たとえば、非常に大量のデータをストリーミングしている場合)、ヒュージ/ラージ ページを使用して 4k ページのオーバーヘッドを軽減できます。

madviseまた、割り当てられたメモリでおそらく何をしようとしているのかをプロセス内からカーネルに伝えるために使用することもできます。

于 2012-11-28T15:14:16.477 に答える