6

物理メモリが次のようにランクに分割されていることがわかりました (メモリ インターリービング)。

   rank0: [0-512KB] [2048KB-2560KB] [4096KB-4608KB] ...
   rank1: [512KB-1024KB] [2560KB-3072KB] [4608KB-5120KB] ... 
   rank2: [1024KB-1536KB] [3072KB-3584KB] [5120KB-...
   rank3: [1536KB-2048KB] [3584KB-4096KB] ...

Linux カーネルはこれらのインターリーブ メモリを取得します。そのため、Linux カーネルから見える物理メモリは連続していません。これについて間違っている場合は修正してください。

私はコースの作業のために Linux カーネルのソース コードを見てきました。

sysfs (/sys/devices/system/memory) の作成中に、Linux カーネルは、これらの使用可能な物理メモリの特定のサイズ (私のシステムでは 128 MB) のセクション (memory0、memory1、...) を作成します。これらのディレクトリの状態ファイルを使用して、セクションをオフライン/オンラインにすることができます。(メモリーホットプラグ)

そのため、これらのセクションで表される物理メモリは分散しています。そのため、セクションのいずれかをオフラインにすると、散在するメモリが使用できなくなります。

これらのセクションが連続したメモリを参照するようにしたい。このようなもの :

   memory0 : 0-128 MB
   memory1 : 128-256 MB
   ....

そのため、一部のセクションをオフラインにすると、そのセクションに関連する連続した物理メモリが使用できなくなります。では、Linux カーネルに物理メモリをインターリーブではなく連続として認識させることはできますか?

これについて間違っている場合は修正してください。

ありがとうございました。

4

1 に答える 1

1

あなたが見ているのは、NUMA でのメモリ割り当てのインターリーブ オプションによるものだと思います。Linux での NUMA について説明している非常に優れた論文があります。

使用しているハードウェアの詳細がなければ、メモリ インターリーブ オプションを無効にする方法を推測するのは非常に困難です。また、numactlユーティリティを調べて、実行中のシステムで使用できる設定があるかどうかを確認する必要があります。メモリ インターリーブ オプションを制御するために BIOS 設定を変更することについて言及しているブログ投稿もいくつかあり、同じことをしなければならない場合があります。(現在、2 つのリンクを提供する資格はありません :\ しかし、BIOS でメモリ インターリーブを無効にすることに関する簡単な Google 検索で、何か役立つ情報が見つかるはずです)

于 2013-11-01T12:31:35.510 に答える