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
...

단 두 가지 예외가 있습니다:

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

커널에서는 불가능하다고 생각합니다기본특징. 커널은 연결 해제가 아닌 핫 스와핑만 지원합니다. 이를 수행하는 이상한 방법이 있을 수 있지만 기술적으로는 좋지 않은 것 같습니다. 적어도 문제는 없습니다.

관련 정보