這是我嘗試過的:
sudo zsh -c 'echo offline >/sys/devices/system/memory/memory109/state'`
並得到以下錯誤:
zsh:echo:1: write error: device or resource busy
我是否需要先確保要脫機的記憶體模組是空的?
如果是這樣,我該怎麼做?
背景:
我正在運行一個基於 Ubuntu 的發行版,由 VMWare 作為來賓虛擬化。
我希望減少來賓系統的記憶體使用量,釋放更多記憶體供主機使用,而無需重新啟動來賓系統。
如果其中任何一個可能很重要。
2016年9月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 屬性。
如果您運行的是普通的 x86-64 系統(虛擬化或裸機),很可能沒有可移動的區塊,因為所有核心分配都是不可移動的。若要將核心限制為 ram 的某些部分,請向其傳遞「kernelcore=」參數。之後您應該會看到一些可移動記憶體區塊,並且可以透過將「0」寫入「online」屬性或將「offline」寫入「state」屬性來使它們離線。
答案2
我認為內核不可能預設特徵。核心只支援熱插拔,不支援拔插。可能有一種奇怪的方法可以做到這一點,但從技術上講,這聽起來很糟糕......至少沒有什麼問題。