プロセッサのL1およびL2キャッシュを無効にする方法は?


10

Ubuntu 14.04でL1キャッシュまたはL2キャッシュ(あるいはその両方)を無効にすることはできますか(できればPythonなどの高レベル言語で)。もしそうなら、どうですか?

さらに、キャッシュを無効にすることは、アーキテクチャによって大きく異なりますか?もしそうなら、私はARM Cortex-A15にもっと興味があります。

編集

キャッシュを無効にする方法を調査しているときに、kernel.orgのドキュメントの / proc / sys / vm /にある「drop_caches」ファイルについて知りました

「これに書き込むと、カーネルはクリーンなキャッシュだけでなく、デントリやiノードなどの再利用可能なスラブオブジェクトも削除します。削除すると、メモリは解放されます。」

...

「このファイルは、さまざまなカーネルキャッシュ(inode、dentries、pagecacheなど)の増大を制御する手段ではありません。これらのオブジェクトは、システムの他の場所でメモリが必要になったときに、カーネルによって自動的に再利用されます。」

これは私が探しているもののようには見えません。キャッシュを無効にするようには見えないだけでなく、仮想メモリはハードウェアではなくオペレーティングシステム内にあると考えました。私の目標は、キャッシュを無効にして、RAMなどの別の場所で目的のメモリを探す必要があることです。

編集

明確にするために、キャッシュを無効にするとシステムがどうなるかを理解しています。ただし、これは、安全性が重要なアプリケーションの信頼性を高めるために宇宙アプリケーションで使用される一般的な手法です。この現象を文書化したリソースを以下に示します。

キャッシュメモリを介して、組み込みソフトウェアの放射線による障害を低減

宇宙放射線環境におけるマイクロプロセッサの地上放射線試験のガイドライン

トピックに関する本さえあります:

エレクトロニクスにおける電離放射線効果:メモリからイメージャへ


キャッシュを無効にするようなことをしようとしている場合は、組み込みプログラミングを行っています。組み込みプログラミングを行っている場合は、おそらく埋め込み言語(C)を使用する必要があります。私はOSを使用しません。余談ですが、キャッシュを無効にすると、システムの速度が大幅に低下します。
サム・

キャッシュなしでシステムを高速化する他の方法がありますが、キャッシュを無効にしてベンチマークを実行するまで、これらの方法がどれほど効果的であるかわかりません。私は組み込みアプリケーションにCまたはアセンブリが推奨される選択肢であることを知っています。ただし、Pythonで実行する方が理にかなっているいくつかの高レベルなことが発生しています。私の特定のアプリケーションのキャッシュを無効にするようなことをPythonがサポートしていれば、もっと便利でしょう。OSのストリッピングに関しては、ベアメタルは残念ながら私には選択肢になりません。
AustinTronics 2016年

回答:


2

それを行うにはカーネルモジュール(およびそのモジュールをロードするためのroot権限)が必要なので、Pythonで直接行うことはできません。

L1キャッシュを無効化するために必要なこと(無効化ではなく無効化)については、http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21を参照してください

異なるCPUアーキテクチャ(x86とARMなど)では、キャッシュを無効にするために異なるアセンブリコード(CPU命令)が必要です。LinuxカーネルがL1 / L2 / L3 / L4キャッシュを無効にする可能性があるかどうかはわかりませんが、それが可能である場合、CPUが遅いため、それが短時間だけ内部で使用されると思いますこれらのキャッシュなし。

LinuxシステムでCPUキャッシュ(L1 / L2)を無効にする方法はありますか?を参照してくださいx86 / x64システムでキャッシュを無効にする方法についてのリンク(レジスタを変更する必要がありますcr0)。ARMチェックの場合、キャッシュ無効化動作

CPUキャッシュの機能を完全に理解しているとは思いません。システムのパフォーマンスを低下させたい理由を詳しく説明してください。


アプリケーションは、航空宇宙向けの高性能組み込みコンピューティングです。アプリケーションにとって、稼働時間はパフォーマンスよりも重要です。これは奇妙に聞こえるかもしれませんが、この現象は十分に文書化されています。
AustinTronics 2016年

CPUキャッシュのない「高性能」アプリケーションを作成するにはどうすればよいですか?キャッシュは稼働時間とどのように関係していますか?
tehnicaorg

2
私はR&Dのソフトウェア開発者です。私たちはたくさんのクレイジーなことをしています。返答の途中で情報を省いたり曖昧にしたりしているようでしたら申し訳ありませんが、それは適切な情報であるため、思い通りに入ることができません。航空宇宙アプリケーションの稼働時間とキャッシュの関係に興味がある場合は、ここに公開されているJPLペーパーがあります。こちらも同様の日記です。
AustinTronics

1
皮肉なことに、今日、L1キャッシュを無効にすることは理にかなっています!
リングØ18年

4

これは、小さなASMコードで実現できます。インテルシステムプログラミングガイドの第11章を参照してください。

11.5.3キャッシュの防止

L1、L2、およびL3キャッシュを有効にしてキャッシュフィルを受信した後に無効にするには、次の手順を実行します。1.フィルなしキャッシュモードに入ります。(制御レジスタCR0のCDフラグを1に、NWフラグを0に設定します。2. WBINVD命令を使用してすべてのキャッシュをフラッシュします。3. MTRRを無効にし、デフォルトのメモリタイプを非キャッシュに設定するか、または非キャッシュメモリタイプのすべてのMTRRを設定します(セクション11.11.2.1「IA32_MTRR_DEF_TYPE MSR」のTYPEフィールドとEフラグの説明を参照してください)。

これを実装するPythonモジュールについては知りません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.