私が試したことは次のとおりです。
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」を書き込むことでオフラインにすることができます。
答え2
カーネルでは不可能だと思います基本特徴。カーネルは、リンク解除ではなくホットスワップのみをサポートします。これを行うには奇妙な方法があるかもしれませんが、技術的には悪いようです。少なくとも問題はありません。