PowerPC プロセッサのプロセッサ キャッシュを無効にするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/73312

  •  09-06-2019
  •  | 
  •  

質問

組み込みシステム (PowerPC プロセッサを使用) では、プロセッサ キャッシュを無効にしたいと考えています。どのような手順を踏む必要がありますか?

少し明確にするために、問題のアプリケーションは可能な限り一定の実行速度を持たなければなりません。同じコード パスを実行する際の変動は許容されません。これがキャッシュをオフにする理由です。

役に立ちましたか?

解決

質問に少し遅れました。また、PPC で低レベルのプロセッサ初期化コードをすべて実行してからしばらく経ちましたが、キャッシュと MMU がかなり密接に結合していたことを覚えているようです (キャッシュと MMU を有効にする必要がありました)。もう一方を有効にします)そして私は 考える MMU ページ テーブルで、キャッシュ可能な属性を定義できます。

したがって、私の言いたいことは次のとおりです。確定的な時間で実行する必要があるコードの特定のサブセットがある場合、ページ テーブルでキャッシュ不可として定義されているメモリ領域にそのコードを (リンカー コマンド ファイル経由で) 配置することになるでしょうか。そうすることで、キャッシュから恩恵を受けることができる/すべきすべてのコードが恩恵を受け、(できれば) 恩恵を受けるべきではないコードのサブセットは恩恵を受けません。

とにかくこの方法で処理します。そうすれば、後でシステムの一部でキャッシュを有効にしたい場合は、初期化コードを (再) 書き込む代わりに、MMU ページ テーブルのいくつかのビットを反転するだけで済みます。すべてのページテーブルとキャッシュを設定します。

他のヒント

E600 リファレンス マニュアルより:
HID0 特殊目的レジスタには、命令キャッシュとデータ キャッシュを無効化、無効化、およびロックするいくつかのビットが含まれています。

データ キャッシュを無効にするには、HID0[DCE] = 0 を使用する必要があります。
命令キャッシュを無効にするには、HID0[ICE] = 0 を使用する必要があります。

電源投入時には、両方のキャッシュが無効になることに注意してください。これをアセンブリコードで記述する必要があります。

おそらく、キャッシュをグローバルに無効にするのではなく、特定のアドレス範囲に対してのみ無効にしたいのではないでしょうか?

一部のプロセッサでは、アドレス範囲の TLB (変換ルックアサイド バッファ) エントリを構成して、範囲ごとにキャッシュを有効または無効にすることができます。この方法により、メモリ マップド I/O のキャッシュを無効にしても、RAM のメイン ブロックのキャッシュはオンのままにすることができます。

私がこれを実行した唯一の PowerPC は PowerPC 440EP (IBM、その後 AMCC 製) でした。そのため、すべての PowerPC が同じように動作するかどうかはわかりません。

PPCコアとはどのようなものですか?キャッシュ制御は、ベンダーごとにコアごとに大きく異なります。また、キャッシュを無効にすることは、一般にマシンにとって非常に悪いことであると考えられています。パフォーマンスは非常に遅くなり、古い 8 ビット プロセッサと同じくらい遅くなります (少し大げさです)。一部の ARM バリアントには、キャッシュの代わりに機能する密結合メモリである TCM が搭載されていますが、その機能を備えた PPC バリアントを私は知りません。

おそらく、より良い解決策は、レベル 1 キャッシュをアクティブなままにし、代わりにオンチップ L2 キャッシュを静的にマップされた RAM として使用することです。これは、少なくとも最新の PowerQUICC デバイスでは一般的です。

キャッシュをオフにしても何の役にも立ちません。実行速度は桁違いに低下します。このようなシステムを出荷することは決してないので、このような条件下でのパフォーマンスは重要ではありません。

安定した実行速度を達成するには、次のいずれかのアプローチを検討してください。

1) キャッシュの一部またはすべてをロックします。Freescale、IBM、および AMCC の現在のすべての PowerPC チップは、この機能を提供します。

2) L2 キャッシュを備えた Freescale チップの場合は、そのキャッシュの一部をオンチップ メモリとしてマッピングすることを検討してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top