1

これはすべて Linux と C で行われます。

デバイス ドライバーの読み取り/書き込み関数を最大 8 回呼び出す必要があるユーザー空間ライブラリ関数があります。(私はライブラリとデバイス ドライバを作成しています。) これを実現するには 2 つの方法があります。

  1. ライブラリ呼び出しで必要な回数だけ読み取り/書き込みを行います。
  2. 必要な回数、デバイスへの読み取り/書き込みをドライバーに処理させます。

ドライバーは、以前の ioctl 呼び出しに基づいて、必要な回数を既に知っています。オプション 1 では、ユーザー空間とカーネル空間の間でより多くの切り替えが必要になるため、パフォーマンスが低下することがわかっています。一方、オプション 2 は問題を引き起こします。読み取り呼び出しの場合、2 つのモードを切り替えることなく一度に 1 つの読み取りをユーザー空間に戻すことができない限り、ユーザー空間に戻されるバッファーは最大 8 倍になります。同じデータが毎回書き込まれる場合を除き、書き込み呼び出しでも同じ問題が発生します。したがって、オプション 2 の最悪のケースでは、オプション 1 とは対照的に、8 倍の大きさのバッファをやり取りする必要があります。

結局のところ、どちらがより効率的ですか?

4

1 に答える 1

0

コメンテーターが示唆したように、効率が重要な場合は、ベンチマーキングとプロファイリングの代わりに投機を行う必要はありません。「効率」は膨大な数の要因の影響を受ける可能性があり、各オプションのプロファイルを作成することは、最適なオプションを特定する正しい方法です。

于 2014-07-21T22:44:21.977 に答える