2009-09-06 44 views
19

メモリ断片化プロファイラはありますか? (freshmeat_linux/Linux] gccのバージョンがいいだろう)。 Valgrindはカスタムmalloc/free関数を使用しているため、これを解析することはできません。メモリ断片化プロファイラ

おかげで、 アンドリュー

+0

あなたは 'gdb'や別のデバッガを使うことができます。 –

+0

gdbを使ってウォークスルーし、管理されるメモリバッファ全体のプロファイルを生成するmallocは実現不可能です。 – nos

答えて

1

私はトラブルあなたが見つけるかもしれない任意のツールは、カスタムメモリ管理のセグメントデータ構造を理解する方法を理解しています。忙しい配布(malloc/freeへのフック)を得ることができるかもしれませんが、空き配布(本質的に断片化です)は空中に浮かんで見えます。

なぜ、ビジー/フリーの統計情報/ヒストグラムをカスタムメモリマネージャに追加しないでください。ビンがlog2(サイズ)に比例するものでインデックス付けされている場合は、これらの統計情報を分割し合体するときのように保持して、サイズを知っていれば、log2(サイズ)

に比例するインデックスを使用して直接検索してビンを見つけることができます

例えば、ヒストグラムのビン間隔

[2^nは、2 ^(N + 1))...

(例えば、あなたが細かいビンは、ログベースの平方根2(サイズを使用したい場合) はできx86で4つの整数命令で計算する[ビットスキャン、比較、設定、追加]

使用する合理的なビンサイズの別のセットはfollo (n-1)、2 ^(n + 1))...

[2^n + 2 ^(n-1)、2 ^(n + 1))...

再び簡単に計算[ビットスキャン、シフト、および、追加])

+0

彼はカスタムアロケータについて言及していません。たとえば誰かがそれを奪ったのではない。 linux上のglibcアロケータの内部構造を歩くことができるツールを書いています。 – nos

+0

"custom malloc/free functions"の "custom"はどういう意味ですか? – pgast

+3

'カスタム'はvalgrindを指します - valgrindがデフォルトのアロケータを置き換えるので、valgrindがmallocフラグメンテーションを測定するのは愚かです。 – nos

0

nedmalloc非常に良いカスタムアロケータで、断片化を避けるために最適化されたソース、付属しています。

私はそれをプラグインし、フラグメンテーション統計の内部ログを調べ始めます。

+0

nedmallocはスピードアップのための素晴らしい方法のように見えますこのプログラムは、断片化プロファイリングの問題を解決することには至りません。 情報をありがとう、私は真剣にそれに切り替えることを検討しています。 – Andrew

+0

アイデアは、a)nedmallocはフラグメンテーションをうまく処理するため、問題が少なく、b)チューニングとソースコードを組み込んでいるので、mtraceよりもはるかに詳細なイントロスペクションで独自の分析を行うことができます。 – Justicle

5

私はmtraceで始まります。トレースがあるとき、glibcにはperlスクリプトのmtrace(1)が付いています。このスクリプトはリークを検出します。ただし、トレース形式は分かりやすいため、断片化分析を直接処理する必要があります。

+1

mtraceログのビジュアライザーまたはアナライザーはありますか? – osgx

3

私は恐れます。 Valgrindです。

valgrindがコードの拡張機能を使用して割り当てを行う方法とその方法を知ることができます(アプリケーションを修正して再コンパイルする必要がありますが、デバッグしていない場合はnoopsにコンパイルします)。詳細はValgrindのマニュアルMemory pools: working with custom allocatorsにあります。

あなたはこれをしたら、あなたはあなたのヒープの使用状況を診断することを可能にする2つのツールがあります。はツールのを設定山塊とDHAT(クイックリマインダーを、Valgrindは、それはちょうど私たちは皆知っている1と愛を実行しています、Memcheck、デフォルト)。

Massif "は、ヒーププロファイラーであり、プログラムが使用するヒープメモリーの量を測定します。これには、便利なスペースと、ブックの保持や配置のために割り当てられた余分なバイトが含まれます。スタックは、デフォルトではそうしません。「

それが作成できる 『それはグラフィックの一種であるので、』グラフ:さらに多くのです

 
19.63^            ###      
    |            #       
    |            # ::      
    |            # : :::     
    |          :::::::::# : : ::    
    |          :  # : : : ::    
    |          :  # : : : : :::   
    |          :  # : : : : : ::   
    |       :::::::::::  # : : : : : : :::  
    |       :   :  # : : : : : : : :: 
    |      :::::   :  # : : : : : : : : :: 
    |      @@@: :   :  # : : : : : : : : : @ 
    |     ::@ : :   :  # : : : : : : : : : @ 
    |    :::: @ : :   :  # : : : : : : : : : @ 
    |    ::: : @ : :   :  # : : : : : : : : : @ 
    |   ::: : : @ : :   :  # : : : : : : : : : @ 
    |   :::: : : : @ : :   :  # : : : : : : : : : @ 
    |  ::: : : : : @ : :   :  # : : : : : : : : : @ 
    | :::: : : : : : @ : :   :  # : : : : : : : : : @ 
    | ::: : : : : : : @ : :   :  # : : : : : : : : : @ 
    0 +----------------------------------------------------------------------->KB  0                 29.48 

Number of snapshots: 25 
Detailed snapshots: [9, 14 (peak), 24] 

何、本当にきれいなグラフを生成しているMassif Visualizerがあります

DHATは、あなたがどのように正確に診断することができますアプリケーションはヒープを使用しますが、その部分は短期間であり、プログラムの全ライフを通して維持されますが、最初は使用されます。残念なことに、それに付随する素晴らしいグラフやグラフィカルツールはありません。出力は純粋ですありがたいことに、取得したいデータの量とその並べ替え方法を教えてくださいそれは聞こえるほど悪くない。

関連する問題