問題タブ [tlb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
428 参照

assembly - TLB は 4K、2M、1GB のページを同時にマッピングできますか?

x86-64 のロング モードで、最近の Intel/AMD マイクロプロセッサでは、TLB が仮想アドレスをページ 4K、2MB、および 1GB (ヒュージ ページ) の物理アドレスに同時に変換できますか?

マニュアルを読んで理解したように、次のように設定すると可能です。

しかし、私はそれを試したことがないので、コーディングを始める前に、それが機能するかどうか教えていただけますか?

0 投票する
1 に答える
361 参照

operating-system - x86-64でTLBに直接物理アドレスを提供する

ロングモードのx86-64アーキテクチャ上のTLBに直接、特定の仮想アドレスの物理アドレスを提供することは可能ですか?

たとえば、PML4Eにゼロを設定すると、無効なアドレスが検出されるため、ページフォールト例外がトリガーされます。例外の間に、CPUは、この仮想アドレスがX物理にあることを命令を使用して、TLBに通知できます。ページフレーム?

これを実行したいのは、コードによって物理アドレスがどこにあるかを簡単に判断できるためです。これにより、コストのかかるページウォークを回避できます。

0 投票する
2 に答える
2326 参照

memory - MIPS メモリ実行防止

I'm doing some research with the MIPS architecture and was wondering how operating systems are implemented with the limited instructions and memory protection that mips offers. I'm specifically wondering about how an operating system would prevent certain addresses ranges from being executed. For example, how could an operating system limit PC to operate in a particular range? In other words, prevent something such as executing from dynamically allocated memory?

The first thing that came to mind is with TLBs, but TLBs only offer memory write protection (and not execute).

I don't quite see how it could be handled by the OS either, because that would imply that every instruction would result in an exception and then MANY cycles would be burned just checking to see if PC was in a sane address range.

誰かが知っている場合、通常はどのように行われますか? 初期化中にハードウェアによって何らかの方法で処理されますか (たとえば、アドレス範囲が指定され、範囲外の場合は例外が発生しますか?)

0 投票する
1 に答える
1574 参照

java - メモリバリアとTLB

メモリバリアは、データキャッシュの一貫性を保証します。ただし、TLBの一貫性が保証されますか?

スレッド間でMappedByteBufferを渡すときに、JVM(java 7 update 1)がメモリエラー(SIGBUS、SIGSEG)でクラッシュすることがあるという問題が発生しています。

例えば

Thread.yield()がないと、force()、put()、およびCのmemcpy()でクラッシュが発生することがあります。これらはすべて、メモリに不正にアクセスしようとしていることを示しています。Thread.yield()を使用しても問題はありませんが、信頼できる解決策のようには思えません。

誰かがこの問題に遭遇しましたか?TLBとメモリバリアについての保証はありますか?


編集:OSはCentos 5.7ですが、i7およびDualXeonマシンでの動作を確認しました。

なぜ私はこれをするのですか?メッセージの書き込みにかかる平均時間は長さにもよりますが35〜100 nsであり、プレーンなwrite()の使用はそれほど高速ではないためです。現在のスレッドでメモリマップとクリーンアップを行う場合、これには50〜130マイクロ秒かかります。バックグラウンドスレッドを使用すると、メインスレッドがバッファを交換するのに約3〜5マイクロ秒かかります。なぜバッファを交換する必要があるのですか?私は多くのGBのデータを書き込んでおり、ByteBufferのサイズを2GB以上にすることはできないためです。

0 投票する
1 に答える
2548 参照

c - LinuxカーネルによるTLBエントリの無効化

Linuxカーネルでは、copy_page_range(mm / memory.c)に似たコードを記述したため、COW最適化を使用してあるプロセスから別のプロセスにメモリをコピーします。宛先アドレスと送信元アドレスはによってオフセットすることができPAGE_SIZE、COWは引き続き機能します。ただし、ユーザープログラムで、同じ送信元アドレスから別の宛先アドレスにコピーすると、TLBが適切にフラッシュされていないように見えることに気付きました。高レベルでは、ユーザーレベルのコードは次のことを行います(一度に1ページ、0x1000バイトをマシンにコピーします)。

SRC = 0x20000000

  1. SRCに書き込みます(関連するページを呼び出しますpage1)。
  2. 宛先プロセスでSRCを0x30000000にコピーするSyscall。これで、srcプロセスアドレス0x20000000と宛先プロセスアドレス0x30000000が同じページを指します(page1)。
  3. SRCとは異なるものを記述します(これにより、COWを処理するためのページフォールトがトリガーされます)。送信元アドレスがを指していると仮定しpage2ます。
  4. 宛先プロセスでSRCを0x30001000にコピーするシステムコール。

この時点で、2つの別々のページが存在する必要があります。SRC0x20000000 page2 DST 0x30000000 page1 DST 0x30001000page2

手順3で、src 0x20000000に別の何かを書き込んでも、ページフォールトは生成されないことがわかりました。検査すると、実際のページマッピングは次のようになります。SRC0x20000000 page1 DST 0x30000000 page1 DST 0x30001000page1

私のコードではflush_tlb_page、送信元アドレスを呼び出して渡すと、ユーザーコードは適切なページマッピングで期待どおりに機能します。したがって、TLBを正しく維持していないと確信しています。ではcopy_page_range、カーネルはmmu_notifier_invalidate_range_start/endページテーブルを変更する前後に呼び出します。私はまったく同じことをしていて、実際に正しいstruct_mmとアドレスをに渡していることを再確認しましたmmu_notifier_invalidate_range_start/end。この関数はtlbのフラッシュを処理しませんか?

さて、文字通りこれを入力し終えたとき、私はチェックして、dup_mmapの主要な呼び出し元(kernel / fork.c)が。を呼び出すことに気づきました。カーネルコードの前後に呼び出す必要があると思います。これは正しいです?正確には何をしますか?copy_page_rangedup_mmapflush_tlb_mmflush_cache_rangeflush_tlb_rangemmu_notifier_invalidate_range_start/end

0 投票する
2 に答える
5244 参照

linux - TLB のカーネル メモリ (仮想アドレス エントリ)?

Linux は OS であり、ARM はこのコンテキストで参照されるプロセッサです。

TLB には、カーネル空間とユーザー空間の両方の仮想アドレスが含まれていますか? カーネル メモリは 、最初の 3 GB がユーザー空間に属する場所0xc000_0000から始まり、その場所に移動します。0xFFFF_FFFFプロセス間のコンテキスト切り替えの間に、TLB がフラッシュされます。

TLB には、カーネル空間とユーザー空間の両方の仮想アドレスが含まれていますか?

カーネルメモリ(仮想)は物理メモリに直接対応します(オフセットするだけで0xC000_0000物理アドレスが得られます)。TLB にカーネル メモリ (仮想) が必要ですか (TLB に存在すると言う場合)? ユーザー空間アドレスのみが存在する必要があります。

0 投票する
2 に答える
2149 参照

caching - L1ミスがL2アクセスと大きく異なる場合...TLB関連ですか?

私はいくつかのアルゴリズムでいくつかのベンチマークを実行し、それらのメモリ使用量と効率(L1 / L2 / TLBアクセスとミス)をプロファイリングしてきましたが、結果のいくつかは私にとって非常に興味深いものです。

包括的キャッシュ階層(L1およびL2キャッシュ)を考慮すると、L1キャッシュミスの数はL2キャッシュアクセス の数と一致するべきではありませんか?私が見つけた説明の1つは、TLBに関連するものです。仮想アドレスがTLBにマップされていない場合、システムは一部のキャッシュレベルでの検索を自動的にスキップします。これは合法だと思いますか?

0 投票する
1 に答える
469 参照

tlb - TLBの結合性(ウェイの数)を知る方法は?

TLBキャッシュのさまざまな方法を学ぶタスクがあります。どのアルゴリズムを使用する必要がありますか?

0 投票する
2 に答える
282 参照

linux - Linux でラージ/ヒュージ ページを使用するオープンソース アプリケーション

Linux (x86-64)でラージ/ヒュージ メモリ ページ(サイズが 4KB を超える OS メモリ ページ)を利用するオープンソース アプリケーションを探していました。今日、どのくらい大きなページが使用されているかを調べたかったのです。誰かがそのようなアプリケーションをいくつか教えてもらえますか?

ありがとう

アルカ

0 投票する
2 に答える
6361 参照

linux - LINUX で TLB ミスを測定するコマンド

LINUX で TLB ミスを測定するコマンドを教えてもらえませんか? マイナー ページ フォールトを TLB ミスと見なしても問題ありませんか?