6

私はデュアル Cortex-A9 システムで作業しており、スピンロック関数が DMB を使用する必要がある理由を正確に理解しようとしています。マージ ストア バッファーがフラッシュされている限り、ロック値はロック解除コアの L1 で終了し、SCU は他のコアの L1 の値を無効にするか更新する必要があるようです。これは、一貫性と安全なロックを維持するのに十分ですか? とにかく、STREX はマージ ストア バッファをスキップしないのでしょうか。つまり、フラッシュは必要ないのでしょうか?

DMB は、特にシステム ドメインにデフォルト設定されているため、鈍いハンマーのように見えます。これは、コストがかかる可能性があるメイン メモリへの書き込みを意味する可能性が高いためです。

smp_mb を適切に使用しないドライバーの回避策として、ロック内の DMB はありますか?

現在、パフォーマンス カウンターに基づいて、システム サイクルの約 5% が DMB によるストールで消失していることがわかります。

4

2 に答える 2

2

SMP の場合、DMB が必要です。これがないと、別のプロセッサはメモリ アクセスが異なる順序で発生する可能性があるためです。つまり、クリティカル セクション内からのアクセスは、2 番目のコアの観点からロックが取得される前に発生する可能性があります。 .

そのため、2 番目のコアは、それ自体がロックを保持していることを認識し、他のコアで実行されているクリティカル セクション内からの更新も確認して、一貫性を損なう可能性があります。

于 2012-10-31T18:59:12.597 に答える
2

これらの記事があなたの質問に答えるかもしれません:

特に:

ロックが取得されると発行される Data Memory Barrier (DMB) 命令に注意してください。DMB は、メモリ バリアの前のすべてのメモリ アクセスが、メモリ バリアの後に行われるすべてのメモリ アクセスの前に、システム内の他のすべての CPU によって監視されることを保証します。ロックが取得されると、プログラムはロックによってロックされたデータ構造にアクセスすることを考えると、これはより理にかなっています。上記のロック機能の DMB により、ロックへのアクセス後に、ロックされたデータ構造へのアクセスが確実に監視されます。

于 2012-10-31T20:09:07.643 に答える