여러 시스템 간의 디스크 공간을 절약하고 동일한 스왑 파티션을 재사용하려고 합니다(괜찮아 보입니다).
저는 현재 여러 가상 머신으로 작업하고 있으며 Linux 스왑으로 사용하기 위해 파일 시스템을 다른 드라이브로 전달하는 것을 고려하고 있습니다.
동일한 스왑 파티션에 두 시스템을 모두 설치하는 것이 가능하지만 이로 인해 문제가 발생할 수 있습니다. 응용 프로그램이 매핑되고 충돌하지 않으므로 운영 체제 식별자도 매핑됩니까, 아니면 응용 프로그램 매핑의 일부입니까?
더 스트레스가 많은 시나리오는 여러 가상 머신이 실행 중인 경우입니다(일시 중지되어 동시에 활발하게 실행되지 않을 수 있음).
확실하게:
- 가상 머신 1 시작
- 가상 머신 1 일시 중지
- 가상 머신 2 시작
둘 다 동일한 스왑 파일을 공유합니다. 최대 절전 모드 없이 다음을 본 경우:FreeBSD 및 Linux 공유 파티션그러나 대답은 이것이 입증되지 않았다는 것을 암시합니다. 또한 다른 OS/커널 버전과 충돌하는지 알아야 합니다.
답변1
나는 그것이 가능하다는 것을 알게 될 것이라고 생각하지만 아마도 권장되지는 않을 것입니다. 3가지 가상화 기술 검토:
- 가상 상자
- 가상 머신 소프트웨어
- 키보드 가상 머신
처음 두 개(VirtualBox 및 VMWare)에서는 가능해 보입니다.
- 가상 상자
- 가상 머신 소프트웨어
이는 KVM에서도 가능해 보이지만 몇 가지 주의 사항이 있습니다. 최신 버전의 RHEL을 사용하는 경우 새로운 기술이 호출됩니다.KSM - 커널 동일 페이지 병합배포되어 동일한 페이지를 VM 게스트 간에 공유할 수 있지만 메모리에 "고정"되어 교체할 수 없습니다.
KSM 공유 메모리 페이지는 고정되어 있으므로 시스템에서 교환할 수 없습니다.
따라서 VM에 자체 스왑이 있고 이러한 게스트 페이지 중 하나를 VM에서 스왑해야 하는 경우 어떤 일이 발생하는지 불분명해집니다. 따라서 이 작업을 수행하지만 실제 메모리는 해제되지 않으므로(내 추측임) 이제 VM의 스왑 영역에 있는 디스크가 낭비되고 실제 RAM은 계속해서 사용됩니다.
또한 모든 VM이 동일한 스왑 영역을 사용하는 것은 이러한 이유로 위험해 보입니다. 스왑 영역이 가득 차면 리소스가 본질적으로 고갈되기 때문에 모든 VM이 위험에 처하게 됩니다.
발췌KVM의 남용
KVM 가상 머신은 Linux 프로세스이므로 가상 머신이 유휴 상태이거나 사용량이 많지 않은 경우 가상 머신에서 사용하는 메모리를 스왑 영역에 배치할 수 있습니다. 메모리는 스왑 메모리와 물리적 RAM의 전체 크기에 커밋될 수 있습니다. 가상 게스트가 전체 RAM을 사용하는 경우 문제가 발생할 수 있습니다. pdflush 프로세스로 교체할 가상 머신 프로세스에 대한 스왑 공간이 충분하지 않으면 정리 프로세스가 시작됩니다. pdflush는 시스템이 충돌하지 않도록 메모리를 확보하기 위해 프로세스를 종료합니다. pdflush는 가상 게스트 또는 기타 시스템 프로세스를 손상시켜 파일 시스템 오류를 일으키고 가상 게스트가 시작되지 못하게 할 수 있습니다.
KVM 스왑아웃 프로파일링
하나 있다VM에서 메모리를 구성하는 방법을 설명하는 KVM 웹 사이트의 훌륭한 기사그리고 그것이 결국 어떻게 교환을 활용할 것인가. qemu-kvm v0.12용으로 작성되었기 때문에 해당 버전 이후로 얼마나 변경되었는지는 알 수 없습니다.
위 페이지에서 발췌
스왑 아웃 경로
이제 호스트가 메모리 부족 상태에 있다고 가정합니다. 위 페이지는 Linux LRU를 통과하여 비활성 목록에 있는 것으로 나타났습니다. 커널은 다음 페이지를 반환하기로 결정합니다.
호스트 커널은 rmap 구조를 사용하여 페이지가 매핑된 VMA(vm_area_struct)를 찾습니다.
호스트 커널은 VMA와 연관된 mm_struct를 조회하고 Linux 페이지 테이블을 따라 페이지에 대한 호스트 하드웨어 페이지 테이블 항목(pte_t)을 찾습니다.
호스트 커널은 페이지를 교환하고 pte_t를 지웁니다(페이지가 한 곳에서만 사용된다고 가정). 그러나 페이지를 공개하기 전에.
호스트 커널은 mmu_notifier informate_page()를 호출합니다. NPT/EPT 구조에서 페이지 항목을 찾아 삭제합니다.
이제 페이지에 대한 모든 후속 액세스는 호스트로 대체됩니다(위 오류 경로의 (2)).
따라서 위에서 말한 내용은 게스트 VM의 메모리 페이지를 교체해야 할 때 호스트에서 이를 수행한다는 것입니다. 그러나 이는 게스트 가상 머신이 RAM을 모두 소모하는 것이 아니라 전체 호스트가 RAM을 모두 소모하는 경우입니다.
KVM으로 스와핑을 사용해야 합니까?
그렇습니다. 시스템에 VM이 많고 초과 프로비저닝된 경우 모두 디스크에 액세스할 수 있으므로 디스크에 많은 I/O가 생성된다는 점을 이해하는 한 그렇습니다. . 이것 좀 봐자세한 내용은 ServerFault 문제.
답변2
공유 스왑 파티션이 있는 가상 머신에서 운영 체제가 동시에 실행되는 경우 큰 혼란을 초래할 수 있습니다.
거기에 가서 추가 디스크를 구입하지 마십시오.