Linuxドライバ:パイプライニング遅延[閉じる]

Linuxドライバ:パイプライニング遅延[閉じる]

非ブロック読み書き機能を備えたドライバを作成したいと思います。パイプライン0の入力はパイプライン1の出力に接続されます。データはwrite()遅延後にパイプに書き込まれます(カーネルタイマーまたはジョブキューを使用)。書き込み待ち時間はを介して制御(インポートおよび設定)する必要がありますioctl()。最後に、読み書きバッファサイズを1B、1KB、1MBに設定し、待ち時間を0.1ミリ秒1秒に設定してドライバのスループットを測定したいと思います。

Linux用のドライバを作成する方法についていくつかのチュートリアルを読んだ。

しかし、次のような問題に直面しています。

  1. プロセスが出力を生成するたびにドライバがバッファを読み取るようにドライバを最初に生成するにはどうすればよいですか?
  2. このバッファのデータを他の実行プログラムの入力にどのように渡すことができますか?

デフォルトでは、「遅延のあるパイプラインドライバ」を作成する必要があります。

通常のパイプには「|」記号を使用します。私のドライバを実装したい場合は、「a | b」などの独自のシンボルをどのように作成できますか? (「a」はバッファサイズ、「b」は設定された遅延です)

それは次のとおりです。ls myfile.txt 20|5 wc

上記の例では、20は20KBのバッファサイズ、5は5msの待ち時間です。

ベストアンサー1

まず、システムは通常、デフォルト値が1MBのFIFOサイズを管理します。を使用して確認または変更できますsysctl fs.pipe-max-size [newsize]。これには新しい手順は必要ありません。

さらに、所望のプログラムを適用するためにホイール、カーネル、またはシェルを再作成する必要はない。このアイデアを追求することにした場合は、実行してくださいcommand | yourbufferprogram | othercommand

このプログラムを作成するには、popen()データをバッファリングしてスループットを計算するためのシステム呼び出しとメモリ制御のみが必要です。一度試してみて詰まったら、より具体的な質問を投稿してください。スタックオーバーフロー

最後に、予想よりも多くの入力データがある場合、これらのバッファはメモリ使用量が急速に爆発する可能性があることに注意してください。

おすすめ記事