ARM CortexでSMP linux(3.0.1-rt11)を実行しているという観測から始めて、ユニプロセッサであるA8ベースのSoC。私は、SMPサポートを無効にすることでパフォーマンス上の利点があるかどうかを知りたいと思っていました。そしてもしそうなら、それは私のドライバーと割り込みハンドラーにどんな影響を与えますか?最新(3.0.0以上)のLinuxカーネルでCONFIG_SMP、Spinlocks、CONFIG_PREEMPT間のリンクを理解する
2つの関連トピック:スピンロックとカーネルプリエンプションを読みました。私はもう少しグーグルや読書をしましたが、今回は陳腐で矛盾した答えはほとんどありません。だから私はstackoverflowしようと思った。
私の疑問/質問の起源のLinuxデバイスドライバ第3版の第5章からこのパラです:スピンロックは、その性質上、マルチプロセッサ システムでの使用を目的としてい
、ユニプロセッサワークステーションが実行しているものの、プリエンプティブ カーネルは並行性に関する限りSMPのように動作し、となります。 非プリエンプティブユニプロセッサシステムがロックでスピンした場合、 は永遠に回転します。他のスレッドは、 CPUを取得してロックを解除することはできません。このため、プリエンプションが有効になっていないユニプロセッサシステム のスピンロック操作は、 を実行するように最適化されています。ただし、IRQマスキング ステータスを変更するものは例外です。プリエンプションのために、 へのあなたのコードがSMPシステムで実行されることを決して期待しない場合でも、あなたはまだ適切なロッキングを実装する必要があります。
私の疑問/質問は以下のとおりです。
a)は、デフォルトではカーネル空間でLinuxカーネルのプリエンプティブですか?はいの場合、このプリエンプションはプロセスのみに限定されていますか、または割り込みハンドラも先取りできますか?
b)Linuxカーネル(ARM)はネスト割り込みをサポートしていますか?はいの場合、各割り込みハンドラ(上半分)は独自のスタックを持つか、同じ4k/8kカーネルモードスタックを共有しますか?
c)SMP(Config_SMP)とプリエンプション(Config_preempt)を無効にすると、ドライバと割り込みハンドラのスピンロックが意味をなさないでしょうか?
d)カーネルが割り込みをどのように処理して、上半分の実行中に割り込みを発生させるか、つまり割り込みが無効にされるかマスクされますか? CONFIG_SMPなしでコンパイルされたカーネルについて
、およびCONFIG_PREEMPT ずにスピンロックは全く存在しません:
は、いくつかのグーグル後、私はこれを見つけました。これは優れた設計上の決定です。 他の誰も同時に実行できない場合は、 をロックする理由はありません。カーネルがCONFIG_SMPなしでコンパイルが、CONFIG_PREEMPTが 設定された場合、単にどんなレースを防ぐ に十分なプリエンプションを無効にスピンロック。ほとんどの場合、プリエンプションはSMPに相当する と考えることができ、別途心配する必要はありません。
sourceにカーネルのバージョンまたは日付はありません。最新のLinuxカーネルに有効かどうか誰にでも確認できますか?
これは4つの質問ですので、一緒に答えられない可能性があるので分割してください。 –