%20%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC%20%22%ED%95%AB%20%ED%94%8C%EB%9F%AC%EA%B7%B8%22%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
내가 시도한 것은 다음과 같습니다.
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
...
단 두 가지 예외가 있습니다:
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
커널에서는 불가능하다고 생각합니다기본특징. 커널은 연결 해제가 아닌 핫 스와핑만 지원합니다. 이를 수행하는 이상한 방법이 있을 수 있지만 기술적으로는 좋지 않은 것 같습니다. 적어도 문제는 없습니다.