Linuxで(どのように)メモリを「ホットプラグ」できますか?

Linuxで(どのように)メモリを「ホットプラグ」できますか?

私が試したことは次のとおりです。

sudo zsh -c 'echo offline >/sys/devices/system/memory/memory109/state'`

次のエラーが発生しました。

zsh:echo:1: write error: device or resource busy

オフラインにするメモリモジュールが空であることをまず確認する必要がありますか?

では、どうすればよいですか?


背景:

私はVMWareによってゲストとして仮想化されたUbuntuベースのディストリビューションを実行しています。

ゲストシステムを再起動せずにゲストシステムのメモリ使用量を減らし、ホストで使用できるようにメモリを増やしたいと思います。

これらのいずれかが重要かもしれません。


2016年9月29日に修正:

memory109理論的には、これが可能でなければならないという@Gillesのコメントやリンクに促され、削除できないいくつかのページを含めることができると思いました。それで他のモジュールにも試してみることにしました(?)。

最初は他のいくつかを自分で試してみました。しかし、これらのどれも成功しなかったので、すべて試してみるべきだと思いました。

for i in /sys/devices/system/memory/memory*/state;
  do echo -n "Trying "$i" \t";
  sudo zsh -c "echo offline > $i";
done

注:上記のスクリプトはコンピュータで成功する可能性があるため、注意して使用してください。これにより、すべてではなくてもほとんどのメモリがオフラインになり、システムが不足して停止する可能性があります。

私が最も得たものは次のとおりです。

...
Trying /sys/devices/system/memory/memory44/state        zsh:echo:1: write error: device or resource busy
Trying /sys/devices/system/memory/memory45/state        zsh:echo:1: write error: device or resource busy
Trying /sys/devices/system/memory/memory46/state        zsh:echo:1: write error: device or resource busy
...

2つの例外しかありません:

Trying /sys/devices/system/memory/memory0/state         zsh:echo:1: write error: invalid argument
...
Trying /sys/devices/system/memory/memory86/state        zsh:echo:1: write error: invalid argument
...

これがうまくいかない理由のアイデアはありますか?

ベストアンサー1

ほとんどの場合、メモリブロックには移動できないページが含まれているため、オフラインに切り替えることはできません。 「移動可能」sysfsプロパティを確認してください。

デフォルトのx86-64システム(仮想化またはベアメタル)を実行している場合、すべてのカーネル割り当ては削除できないため、削除可能なブロックがない可能性があります。カーネルをRAMの特定の部分に制限するには、 "kernelcore ="パラメータを渡します。その後、一部のリムーバブルメモリブロックを確認し、「online」属性に「0」を書き込むか、「state」属性に「offline」を書き込むことでオフラインにすることができます。

おすすめ記事