4

私はこのフォーラムの初心者です。現在、問題が発生しています。

私は Linux カーネル ドライバーの初心者で、現在、ブロック大容量記憶装置用の Linux SCSI デバイス ドライバーの開発に携わっています。開発プラットフォームは、Fedora 14 を搭載したハイエンド マシン上にあります。セットアップは、1 つのホストに対して 1 つの LU/デバイスです。簡単に言うと、ドライバーは問題なく初期化され、デバイスを検出してデバイスに scsi フレームを送信でき、デバイスの読み取りと書き込みができ、Iometer の安定した読み取りと書き込みができるという意味で動作しています。ドライバーを介してテストします。一度に 1 つの未処理のコマンドしかない場合 (キューイングなし)。

問題は、キューイングを機能させることができなかったことです。上位の SCSI レイヤーは、最初のコマンドでない限り、未処理のコマンドを複数 (LLD) 送信しませんscsi_done()。処理のためにコマンドをデバイスに送信する前に、上位層がqueuecommand()複数回呼び出すことができ、デバイスが応答のために私を中断しLLD、コマンドをscsi_done(). キューイングがなければ、速度は非常に遅くなります。

.can_queue を設定し、 と の両方で.cmd_per_lunターゲットの queue_depth に設定するなど、キューイングに関連していると思われる値を既に微調整しました。基本的に、1を含むさまざまな値で遊んでいますが、役に立ちませんでした。これが効果がある場合は、タグ付けも無効にして有効にしましたが、それでも変更はありません。これまでのところ、. 不足していて、ドライバーレベルでまだできることはありますか? Linux がコマンド キューイングをサポートしていないなんて信じられません。ここで何かが欠けています。 scsi_hostscsi_host_templatescsi_deviceslave_configure

4

0 に答える 0