0

私は、あるマシンから別のマシンにメモリ (DRAM) の一部を共有することを目的としたプロジェクトに取り組んでいます。私は 2 台のマシン (M1 と M2、x86 Linux) を持っています。M1 は、M1 と M2 を接続する PCIe アドレス変換デバイスである NTB (Non-transparent Bridge) によって M2 のメモリにアクセスできます。具体的には、M1 がその MMIO アドレス 0x400000000 を読み書きすると、M2 のシステム RAM である M2 の物理アドレス 0x0 にリダイレクトされます。この翻訳をもとに、M2の記憶の一部をM1に譲りたい。

私は最初に Linux メモリ ホットプラグを使用して M2 のメモリ セクション (128MB) を「オフライン」にし、M2 がそれを使用しないようにしました。M1 で、このリモート メモリを M1 のメモリ アロケータに追加しました。/proc/meminfo を確認すると、追加の 128MB が存在します。さらに、M1 CPU の MTRR を構成して、この 128MB をキャッシュ不可にします。これは、リモート メモリがローカル メモリ バスに配置されておらず、キャッシュ コヒーレンスの範囲外であるためです。たとえば、ディスクがこのリモート メモリとの間の DMA である場合、読み取り/書き込みが M1 のメモリ バスを経由しないため、M1 の CPU のキャッシュは認識されません。

ただし、いくらかの作業負荷をかけた後、私の M1 は理由もなくハングします (dmesg にエラーは表示されません)。誰か私にいくつかの提案をしてもらえますか? 感謝!

メモリのホットプラグについて: https://www.kernel.org/doc/Documentation/memory-hotplug.txt

私のM1とM2

4

0 に答える 0