Вот что я попробовал:
sudo zsh -c 'echo offline >/sys/devices/system/memory/memory109/state'`
и получил следующую ошибку:
zsh:echo:1: write error: device or resource busy
Может быть, мне нужно сначала убедиться, что модуль памяти, который я собираюсь отключить, пуст?
И если да, то как я могу это сделать?
Фон:
Я использую дистрибутив на базе Ubuntu, виртуализированный в качестве гостя с помощью VMWare.
Я надеюсь сократить использование памяти гостевой системой, освободив больше памяти для хоста без необходимости перезапускать гостевую систему.
На случай, если это имеет значение.
Редактировать 2016-09-29:
Воодушевленный комментариями и ссылкой @Gilles, что в теории это должно быть возможно, я подумал, что, возможно, memory109
содержались некоторые неперемещаемые страницы. Поэтому я решил попробовать это и на других модулях(?).
Сначала я попробовал несколько других вручную. Но поскольку они не увенчались успехом, я решил попробовать все:
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
...
За двумя исключениями:
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 "removable".
Если вы используете обычную систему x86-64 (виртуализированную или bare metal), весьма вероятно, что нет никаких сменных блоков, поскольку все выделения ядра неперемещаемы. Чтобы ограничить ядро некоторой частью оперативной памяти, передайте ему параметр "kernelcore=". После этого вы должны увидеть несколько сменных блоков памяти, и вы можете перевести их в автономный режим, записав "0" в атрибут "online" или записав "offline" в атрибут "state".
решение2
Я не думаю, что это возможно с точки зрения ядра.по умолчаниюособенности. Ядро поддерживает только горячее подключение, но отключение. Может быть, есть странный способ сделать это, но технически это звучит плохо... по крайней мере, с этим мало проблем.