12

Linux カーネルのモジュールのプロファイリングに興味があります。私はこのようにしてみました:

  1. でカーネルを構築しましたCONFIG_PROFILING=y
  2. でカーネルを起動しましたprofile=2
  3. プロファイラーをリセットするecho 123 > /proc/profile
  4. モジュールは専用デーモンによって正常にロードされました
  5. ioctl特定の呼び出しを通じて、モジュールを使用しているユーザー空間アプリを実行します。テスト アプリは期待どおりに機能したため、モジュールは正常に機能していました。
  6. System.appがカーネルと共に生成されたreadprofile -p /proc/profile -m System.map場所を使用して、プロファイリング情報を読み取ります。

ここまでは順調ですね。ほとんどすべてが期待どおりに機能しました。ただし、うまくいかなかったのは、モジュールに関する情報が得られなかったことです。つまり、モジュールからの機能についての言及がありませんでした。

しかし、よく考えてみると、を使用してモジュールを再コンパイルするのを忘れていたことを思い出しましたCONFIG_PROFILING=y

それで、私の質問は次のとおりです。モジュールがプロファイリング ログに表示されなかったのは、モジュールがコンパイルされていなかったCONFIG_PROFILING=yためですか、それとも、私が知らない他の明らかな理由があるのでしょうか?

すぐに試すのではなく、なぜ質問しているのか疑問に思うのは、それは、家ではできないので、コードに再びアクセスする前に、知識のある人が何を言うかを聞きたいからです.

4

2 に答える 2

6

モジュールは動的にロードされるため、この方法でプロファイリングすることはできないようです。これは、System.map ファイルからモジュールが欠落していることを意味します。

解決策は、ドライバーをカーネルに組み込むことです。残念ながら、システムはモジュールに組み込まれたドライバーでのみ動作するように設計されている可能性があるため、これが常に機能するとは限りません。

于 2011-04-26T06:53:55.363 に答える
0

oprofileを使用することをお勧めします。

于 2011-04-26T07:20:34.743 に答える