PCIハードウェアアクセス速度 - カーネルとユーザースペース[閉じる]

PCIハードウェアアクセス速度 - カーネルとユーザースペース[閉じる]

こんにちは、Linuxの専門家の皆さん!

PCIデバイスを制御してストレスを与える最善の方法を見つけようとしています。まず、pciutils(lspciとsetpci)のコマンドを使用してデバイスを設定し、バスからトラフィックを生成する単純なbashスクリプトを作成しました。

スクリプトはうまく動作しますが、PCIeリンク速度よりはるかに遅く実行されているように見えるため、バスにストレスをかけるか、電源モードとリンク速度をすばやく切り替えることは困難です。

pci.hライブラリの関数を呼び出すためにカーネルモジュールを書くと、より速く実行されるかどうか疑問に思います。 PCIデバイスにすばやくアクセスできますか?

どんな助けにも感謝します:)

答え1

シェルには、操作を実行するために外部コマンドを呼び出すときに多くのオーバーヘッドがあります。 Fork / execには比較的高いオーバーヘッドがあります。

CLI ユーティリティを呼び出すのではなく、API を直接使用してシェルスクリプトからユーザ空間 C プログラムに移動すると、速度が大幅に向上します。また、カーネルモジュールを書くよりも簡単です。スクリプト言語(Perl、Python、Rubyなど)へのAPIバインディングを見つけることができる場合は、それほど速くなります。

カーネルモジュールに変換して削除できる残りのオーバーヘッド(システムコールオーバーヘッドなど)がまだあります。この時点で、基本的にすべてのオーバーヘッドが削除され、より速い速度を得る唯一の方法は、オペレーティングシステムおよび/またはカスタムテストハードウェアを削除することです。

PS:実際には、ユーザースペースCプログラムやカーネルモジュールを書く方法に関する質問が良いかもしれません。スタックオーバーフロー、プログラミングの問題を解決するためのStack Exchangeのウェブサイトです。他のStack Exchangeサイトと同様に、次のサイトも確認してください。スタックオーバーフローヘルプセンターそこに質問を投稿する前に。特に、人気のある質問に関するいくつかの便利なヒントを提供します。

関連情報