ブートローダーのキャッシュの問題を忘れないでください

背景問題

最近解凍アルゴリズム移植でのARMv7ボードのブートローダは、移植自体はまだ比較的滑らかであるが、移植は、その機能が正常であるが、効率が大幅に低減されるが見出さ終了しました。同様に、約10倍ubootをとるデータを、伸張。

予備的な位置決め

10倍のオーダーから、より疑わキャッシュ関連するが、他の要因も最初の疑いがある場合は、確認されました。直接関係の下でCPUとDDRていることを確認します。

DDRドライブはまったく同じであるので、最初のルールのDDR。

その後、CPUは、電源後のクロックがチップブートROMセットで硬化される、デフォルトは比較的低く、それは1Gに増加された、調整されたCPUクロックのコードを見ます。変更が有効になっていることを確認するために、ビットを低減するCPU周波数を設定しようと実際の速度を遅くすることが判明、それはCPUクロックの設定を有効にない示します。でも成功していない場合は、控えめに言っても、CPUの設定は、それは10倍のパフォーマンスギャップが発生することはありません。

キャッシュの目は、彼の上に落ちました。ビューのコードポイントから、MMU、Dキャッシュはオープンとの命令キャッシュの両方です。それが有効になっているので、あなたが実際に役割を果たしているかどうかを確認する方法を見つけなければならないので、簡単な方法は、意図的で性能の変化があるかどうかを確認するためにそれを有効にしません。

コードを変更し有効にし、作業命令キャッシュの結果から見て、命令キャッシュDCacneの減圧時間を有効にしていないテストされていなかった、とDキャッシュは、スイッチングDキャッシュの減圧時間に影響を動作しませんでした。確かにDキャッシュにその質問。

キャッシュ設定

この時点まで、私は別のキャッシュが動作しないの前に、最終的には、対応するセットアップコードを追加し、SMPビットを設定することが判明したが、一緒に問題を解決していなかった問題が解決さだと思います。

引き続きGoogleの後、キャッシュ上のいくつかの情報を見上げ、彼はMMUを設定するページテーブルに転じました。

簡単に言えば、あなたはMMUを有効にすると、ページテーブルは、各サイトだけでなく、権限を含む多くの機能、キャッシュの設定で、どのように仮想ページテーブル内のアドレスと物理アドレスのマッピング、通知MMUを与える必要があります。
いくつかのアドレスレジスタに関連するキャッシュ一般的に有効になっていないために、このレジスタは、キャッシュ効果によって読み込まれていません。他の通常のアドレスについては、通常のキャッシュは、効率を改善するために有効。キャッシュキャッシュを有効にもライトスルー(ライトスルー/ライトスルー)またはwrikeバック(書き戻し)として設定することができ、特定のモードを設定する必要があります。ライトスルーの場合、データは両方のキャッシュに書き込まれ、メインメモリへの書き込み、キャッシュとメインメモリのデータは常に一貫しています。ライトバックの場合は、データのみがキャッシュに書き込まれ、キャッシュが書き込まメインメモリからスワップアウトされたときのみ、汚れたとしてマーク。

ページテーブルの実際の制御は、設定されたライトスルーを見つけます。ライトスルーが必要で、実際たびにメインメモリを書かれた、自然の速度が遅くなり、すぐにライトバックテストを変更します。案の定、解凍速度は質的な飛躍を取得します。

私のコード自体に問題は、SRAM上で実行され、ソースデータを抽出する必要があり、そのデータは、DRAMに解凍されます。DRAMはライトバックするアドレスに対応して設けられた後、速度が約3倍の増加を獲得しました。アドレス対応さらにSRAMはまたバックを書き込むために提供された後、約10倍の速度は再び増加します。28倍程度の累積リフトは、それだけでキャッシュが本当に良いことです賞賛されていません。

ところで、プラスSMPビットの始まりあなたはDキャッシュが機能しなかった見つけた場合は本当にあなたが前に別の問題で、この設定を確認することができ、必要には、この構成でubootから探し出すのに数日私を犯されます。

キャッシュバックブラシ

あなたは、解凍速度活用を行って、それはまた、他の多くの問題をもたらしているときに、私のシステムなどが起動しない、ブートローダーが直接過去にリンクされてジャンプします。次に、それはキャッシュとメインメモリのデータの矛盾が発生し、ライトバックに変更する必要があります。
あなたは、キャッシュを細かく制御していることを、メインシステムにある場合は、バックバックブラシが無効無効を磨くために、私のシーンでは、この問題では、ブートローダが悪いと白、比較的単純で、単にそれの一部、その後、いくつかのブラシを移植しますキャッシュのコード、すべての直接ブラシDキャッシュ。その後、いくつかの主要な場所に次の、そして案の定への呼び出しは、正常に戻ってプロセスを開始します。

おすすめ

転載: www.cnblogs.com/zqb-all/p/11443127.html