7

以下の総合統計が欲しいのですが。

  1. softirq回発生しましたか?
  2. interrupts回発生しましたか?
  3. context switches回発生しましたか?

pidstat、、cat /proc/interruptsを使用できることはわかっています/cat/proc/softirqs。しかし、それらを使用することはあまりにも多くのオーバーヘッドです。

  • {1-3}作業せず/procに最速の方法で収益値を取得するにはどうすればよいですか?

  • ftraceを使用して、イベントの追跡に役立てることはできますか?

システムを監視するために高解像度タイマーを使用します。

4

4 に答える 4

6

次に、 perfを使用します。

# perf stat -B dd if=/dev/zero of=/dev/null count=1000000

1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s

 Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000':

            5,099 cache-misses             #      0.005 M/sec (scaled from 66.58%)
          235,384 cache-references         #      0.246 M/sec (scaled from 66.56%)
        9,281,660 branch-misses            #      3.858 %     (scaled from 33.50%)
      240,609,766 branches                 #    251.559 M/sec (scaled from 33.66%)
    1,403,561,257 instructions             #      0.679 IPC   (scaled from 50.23%)
    2,066,201,729 cycles                   #   2160.227 M/sec (scaled from 66.67%)
              217 page-faults              #      0.000 M/sec
                3 CPU-migrations           #      0.000 M/sec
               83 context-switches         #      0.000 M/sec
       956.474238 task-clock-msecs         #      0.999 CPUs

       0.957617512  seconds time elapsed
于 2013-01-27T12:48:51.323 に答える
5

Linuxのperfサブシステムを確認してください。これは、Linuxシステムからソフトまたはハードのパフォーマンスカウンターを取得するために必要な方法です。

于 2013-01-26T21:18:51.157 に答える
2

このすべての情報/procをある程度の解像度で取得できます。さらにrezが必要な場合は、組み込みシステムのカーネルを微調整できます。

必要な情報を監視する$ vmstat 1ことができ、vmstatのソースをチェックして、でどのように情報を読み取ったかを正確に確認できます/prochttp://procps.sourceforge.net.

于 2013-01-27T00:28:03.123 に答える
1

たぶん、Linuxカーネルモジュール(LKM)の作成を検討する必要があります。

ここにチュートリアルがあります:http ://www.tldp.org/LDP/lkmpg/2.6/html/

正確なプロファイリングシステムが必要な場合は、カーネルモジュールを何らかの中断、またはその他の有効なエントリポイント*に接続し、説明する必要のあるものを(多くの指示なしで!)保存できます。次に、中断後、定期的にそのデータを収集して分析します。

他のモジュールと同じ方法で、ファイルシステム内の特別なファイル(mknodeを介してユーザースペースに作成されるか、MKDEV / register_chrdevを使用した初期化内で作成)を介して情報をエクスポートできます。

上記のリンクにいくつかの情報があります。

*たとえば、モジュールを読み取りシステムコールにアタッチする(実際の読み取りを自分の読み取りでラップする)か、ファイルをエクスポートしてオープン/クローズの試行をキャッチすることができます。

後者の使用例は次のようになります。

void f() {
  int fd_prof;
  fd_prof = open("/dev/profiler", O_RDONLY);
  /* Do whichever thing you want to profile */
  close(fd_prof);
  /* Read profiled data from /dev/profiled_data or wherever you want
   * to export it to */

LKMをコンパイルするときは、libcがカーネル空間に存在しないため、標準Cライブラリにアクセスできないことに注意してください。

心配しないでください。カーネル空間にsprintfのような関数が実装されています。もちろん、システムコール(読み取り、書き込み...)に直接アクセスできます(コンテキストスイッチなし)。

于 2013-01-26T21:09:46.187 に答える