このLinux割り込みハンドラーの実行にかかる時間を測定するにはどうすればよいですか?

CptanPanic

一部の受信データが欠落しているという問題が発生しているカスタムLinuxシリアルドライバーをデバッグしようとしています。4つのシリアルポートに対して1つの割り込みがあり、ボーレートは115200です。最初に、割り込みハンドラーにかかる時間を測定する方法を確認したいと思います。私はperfを使用しましたが、秒単位ではなくパーセント単位です。第二に、物事をスピードアップするために改善できる以下のコードの問題を誰かが見ていますか?

 void serial_interrupt(int irq, void *dev_id)
{
    ...

  // Need to loop through each port to see which port caused the interrupt.
  list_for_each(lpNode, &serial_ports)
  {
    struct serial_port_module *ser_dev = list_entry(lpNode, struct serial_port_module, port_list);

    lnIsr = ioread8(ser_dev->membase + ser_dev->chan_num * PORT_OFFSET + SERIAL_ISR);

     if (lnIsr & IPM512_RX_INT)
      {
        while (serialdata_is_data_available(ser_dev)) // equals a ioread8()
        {
          lcIn = ioread8(ser_dev->membase + ser_dev->chan_num * PORT_OFFSET + SERIAL_RBR);

          kfifo_in(&ser_dev->rx_fifo, &lcIn, sizeof(lcIn));

          // Notify if anyone is doing a blocking read.
          wake_up_interruptible(&ser_dev->read_queue);
        }
      }
    }
  }
ピーター

ftrace APIを使用して、レイテンシの問題を追跡してみてください。知る時間はもうありません:https://www.kernel.org/doc/Documentation/trace/ftrace.txt

これが重すぎる場合は、簡単なインストルメンテーションを自分で追加するのはどうですか?getnstimeofday(struct timespec *ts)は比較的軽量です... sysfsデバッグファイルに出力できるコードが少ないと、最悪の場合の実行時間、この関数の呼び出しの待ち時間に関するいくつかの統計、割り込みごとに使用可能な最悪の場合のバイト数...この数がハードウェアFIFOサイズの近くで、問題が発生しています。

最適化の1つは、データが利用可能である限り、データをバッチでバッファーに読み取り、バッファー全体を入力してから、リーダーをウェイクアップすることです。

while(data_available(dev))
{
  buf[cnt++] = ioread8();
}
kfifo_in(fifo, buf, cnt);
wake_up_interruptible();

しかし、この単純なコードの実行時間は問題になる可能性は低いです。おそらく、割り込みの見逃しや、割り込み処理の予期しない遅延に悩まされています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プログラムの実行時間を測定するにはどうすればよいですか

分類Dev

Windowsコマンドラインでコマンドの実行時間を測定するにはどうすればよいですか?

分類Dev

Linuxでプログラムの実行時間を正しく測定するにはどうすればよいですか?

分類Dev

このコードの実行時間を短縮するにはどうすればよいですか?

分類Dev

コールバックでJavaScriptコードの実行時間を測定するにはどうすればよいですか?

分類Dev

ページの読み込み時にJavascriptを実行するにはどうすればよいですか

分類Dev

ATSで関数呼び出しを実行するのにかかる時間を測定するにはどうすればよいですか?

分類Dev

Thread.sleep()を中断するために、ハンドラーに割り込みを送信するにはどうすればよいですか?

分類Dev

割り込みハンドラーを使用するときにグローバル変数を回避するにはどうすればよいですか?

分類Dev

ページの読み込み時にAngularJSコントローラー関数を実行するにはどうすればよいですか?

分類Dev

クラスの読み込み時にコードを実行するにはどうすればよいですか?

分類Dev

UIAlertActionのハンドラーを実行するにはどうすればよいですか?

分類Dev

クライアント側のJavaコードからサーブレットのメソッドの実行時間を測定するにはどうすればよいですか?

分類Dev

プログラムの100回の実行時間を測定するにはどうすればよいですか?

分類Dev

実行時間をマイクロ秒で測定するにはどうすればよいですか?

分類Dev

測定された合計実行時間から時計にかかる時間を削除するにはどうすればよいですか?

分類Dev

LinuxでCPU使用率とメモリの割合を時間に対して測定するにはどうすればよいですか?

分類Dev

SQLCTE実行時間を測定するにはどうすればよいですか

分類Dev

このコードを合理化し、実行にかかる時間を短縮するにはどうすればよいですか?

分類Dev

エディターの使用時間を測定するにはどうすればよいですか?

分類Dev

C ++でコードの実行時間を取得するにはどうすればよいですか?

分類Dev

PHPの組み込みWebサーバーをバックグラウンドで実行するにはどうすればよいですか?

分類Dev

この単純なデータクリーニングコードの実行時間を改善するにはどうすればよいですか?

分類Dev

Webアプリケーションの実際の応答時間を測定するにはどうすればよいですか?

分類Dev

このPHPコードをより効率的に実行するにはどうすればよいですか?

分類Dev

「キーボード割り込みを除く」の代わりにLCDのボタンを使用するにはどうすればよいですか?

分類Dev

AirflowでDAGチェーンの実行時間を取得するにはどうすればよいですか?

分類Dev

Windows Phoneでドラッグした時間を測定するにはどうすればよいですか?

分類Dev

Linux割り込みハンドラーで遅延させるにはどうすればよいですか(通常はスリープできないことがわかっています)

Related 関連記事

  1. 1

    プログラムの実行時間を測定するにはどうすればよいですか

  2. 2

    Windowsコマンドラインでコマンドの実行時間を測定するにはどうすればよいですか?

  3. 3

    Linuxでプログラムの実行時間を正しく測定するにはどうすればよいですか?

  4. 4

    このコードの実行時間を短縮するにはどうすればよいですか?

  5. 5

    コールバックでJavaScriptコードの実行時間を測定するにはどうすればよいですか?

  6. 6

    ページの読み込み時にJavascriptを実行するにはどうすればよいですか

  7. 7

    ATSで関数呼び出しを実行するのにかかる時間を測定するにはどうすればよいですか?

  8. 8

    Thread.sleep()を中断するために、ハンドラーに割り込みを送信するにはどうすればよいですか?

  9. 9

    割り込みハンドラーを使用するときにグローバル変数を回避するにはどうすればよいですか?

  10. 10

    ページの読み込み時にAngularJSコントローラー関数を実行するにはどうすればよいですか?

  11. 11

    クラスの読み込み時にコードを実行するにはどうすればよいですか?

  12. 12

    UIAlertActionのハンドラーを実行するにはどうすればよいですか?

  13. 13

    クライアント側のJavaコードからサーブレットのメソッドの実行時間を測定するにはどうすればよいですか?

  14. 14

    プログラムの100回の実行時間を測定するにはどうすればよいですか?

  15. 15

    実行時間をマイクロ秒で測定するにはどうすればよいですか?

  16. 16

    測定された合計実行時間から時計にかかる時間を削除するにはどうすればよいですか?

  17. 17

    LinuxでCPU使用率とメモリの割合を時間に対して測定するにはどうすればよいですか?

  18. 18

    SQLCTE実行時間を測定するにはどうすればよいですか

  19. 19

    このコードを合理化し、実行にかかる時間を短縮するにはどうすればよいですか?

  20. 20

    エディターの使用時間を測定するにはどうすればよいですか?

  21. 21

    C ++でコードの実行時間を取得するにはどうすればよいですか?

  22. 22

    PHPの組み込みWebサーバーをバックグラウンドで実行するにはどうすればよいですか?

  23. 23

    この単純なデータクリーニングコードの実行時間を改善するにはどうすればよいですか?

  24. 24

    Webアプリケーションの実際の応答時間を測定するにはどうすればよいですか?

  25. 25

    このPHPコードをより効率的に実行するにはどうすればよいですか?

  26. 26

    「キーボード割り込みを除く」の代わりにLCDのボタンを使用するにはどうすればよいですか?

  27. 27

    AirflowでDAGチェーンの実行時間を取得するにはどうすればよいですか?

  28. 28

    Windows Phoneでドラッグした時間を測定するにはどうすればよいですか?

  29. 29

    Linux割り込みハンドラーで遅延させるにはどうすればよいですか(通常はスリープできないことがわかっています)

ホットタグ

アーカイブ