Intel x86-64
マザーボードに2枚のDIMMを挿入したとします。すべてのメモリインターリーブ(バンクおよびチャネル)が無効になります。DIMMへのダイレクトメモリマッピング
Linux kernel
(バージョン4.11.11
)のDIMMの1つの物理メモリスペースを予約し、その物理的(予約済み)メモリスペースをアプリケーションに公開することを試みています。 DIMMはメモリチャネルででなく、になります。これをどうやってやりますか?どのようなプロセスですか?私はカーネル開発の初心者であり、ガイダンスを使用することができます。
をあなたは
memmap=nn[KMG]$ss[KMG]
ブートパラメータを指定することができ、Linuxカーネルからメモリを確保するために:私はこれまでに発見した何。このパラメータは、特定のメモリをssからss + nnまでのメモリの予約領域としてマークします。
mmapは、ファイル記述子によって表されるメモリ・オブジェクトにLENバイトのアドレスPAでfildesがをプロセスのアドレス空間との間のマッピングを確立するために使用することができるでオフオフセットlenバイトです。
メモリが予約された後、予約されたメモリをユーザースペースアプリケーションに公開するために、一部の文字デバイスドライバが必要であると仮定していますか?思考?
アップデートは
また、予約する必要DIMMは、それ自身の専用のメモリチャネルと全く銀行またはチャネルインターリーブが有効にされませんになりますことに留意すべきです。
DIMM部分が画像全体にどのようにフィットするかわかりません。とにかく、 '/ dev/mem'のようなものはありませんか?予約されたメモリがそのようなデバイスによってマッピングされるかどうかはわかりません。 –
@MargaretBloom DIMMについては何が分かりませんか?私は、いずれかのDIMM上のすべてのメモリをカーネルの使用から予約しようとしています。それは明確ですか? '/ dev/mem'はカーネルが使用できるすべてのメモリを表しますので、必要なものを必ずしも代表するものではありません。 – Jonathan
フラグargに未使用のビットがある場合は、 'mmap'の新しいフラグ、つまり' MAP_RESERVED_DIMM'を定義して公開することができます。 HugeTLBFSは別のモデルです。ファイルをマップして、バッキングメモリに関する特別なものを使ってマッピングを得ることができる特別なファイルシステムです。私はLinux内部の専門家ではありませんが、興味のあるアマチュアですが、チャーやブロックデバイスの考えもうまくいくかもしれません。特に、一度に1つのユーザー空間プロセスを使用する予定がある場合は、それ以外の場合は、どの部分が既にマップされているか把握させてください。 –