최종 프로젝트 인프라 구축①-virtualbox 성능 문제
버추얼박스 거북이 없애기
개요
현재 다니는 부트 캠프에서 최종 프로젝트를 진행중이다.
이번 주부터 개발에 들어가게 되어 본인은 우선 로컬 개발 환경 구축을 담당하게 되었다.
인프라 구조
프로젝트는 부트캠프 측에서 AWS 요금을 지원해준다고 한다.
그렇다고 그냥 주는 건 당연히 아닌, 합당한 구조를 기획해 합당한 사유와 함께 제출해야 하는데,
썩어도 준치라고 AWS 구성 짬(?)이 있는 본인이 구성도를 담당하게 되었다.
이 구성도가 승인될지는 모르겠지만(참고로 저렇게 하니 대충 월 370달러 나온다…) 클라우드를 스테이지 서버 삼아,
본인 노트북(램 32GB!!)에 버추얼박스 가상머신을 설치해 당분간 개발서버로 플젝실에 상주시키려고 한다.
조원들이 자기것 테스트한다고 일일이 타 서비스 10개씩 켜고, 카프카 켜고,… 이럴수는 없잖니
개발서버 가상머신
가상머신은 이렇게 2대로 마련하였다.
아무리 램 32기가여도 구성도 그대로 구현하기에는 거시기하니, 쿠버 클러스터를 구성할 DEV_CHOGAK_CLUSTER(8코어, 램 16기가)와 젠킨스, 그라파나, 키바나 등등…을 컨테이너로 넣을 DEV_CHOGAK_JENKINS(4코어, 램 8기가) 이렇게 간략화했다.
둘 다 Rocky Linux 8을 사용한다. 클라스터용 서버는 GUI로 구성~
가상화 문제
문제는 이렇게 구성했는데, 속도가 너무 느렸다.
단순히 느린 게 아닌, 클라스터 서버에서 인터넷 브라우저(파이어폭스) 하나만 켜도 마우스 커서를 옮기면 5초 후에 반응한다(…)
처음에는 호스트 CPU의 쓰로틀링 문제인 줄 알았으나(그 불덩어리로 유명한 i7 12세대)..
콘솔 우측 아래의 가상화 형식이 이상해서 확인해 봤더니
VM 실행 엔진이 Native API로 되어 있었다. 이러니 느렸지!
저게 뭔데?
저 Native API는 간단히 말하자면, 하드웨어 가상화가 되지 않고 있다는 것이다.
원래는 저기에 VT-x(인텔) 또는 VMX(AMD)로 표시되어야 가상머신이 CPU 자원을 직접 사용할 수 있다.
문제는 미상의 이유로 그게 불가능해 가상머신이 CPU를 소프트웨어적으로 구현하고, 그러니 성능이 이 꼴이지…
렌더링 좀 해 본 사람들이라면 하드웨어 가속과 소프트웨어 가속의 차이 정도로 이해하면 편하다.
무엇이 원인인가?: Hyper-V 충돌
인터넷을 찾아보니, 이 문제는 Hyper-V와 Virtualbox를 같이 사용해서 일어난 문제라고 한다.
(참고로 Hyper-V는 마이크로소프트웨어에서 만든 가상머신 프로그램이다. 오라클에 버추얼박스가 있다면, MS에는 하이퍼-V인 식)
그러고 보니, 저번 미니 프로젝트에서 Docker Desktop으로 쿠버네티스를 구현했었다.
이 Docker Desktop은 WSL(윈도우용 리눅스 가상화)를 사용하는데, 이게 Hyper-V 기반으로 작동한다!
(당연하죠. WSL도 마소에서 만들었으니…)
Hyper-V가 먼저 VT-x나 VMX를 먹어버리니, 버추얼박스는 여기에 접근할 수 없게 되는 것이다.
Hyper-V를 제거하자
그러면 Hyper-V를 완전히 꺼버리자. 어차피 Docker Desktop에 있던 이미지들은 전부 Docker Hub에 넣어놨으니
우선 Windows 기능에서 Hyper-V 체크를 끄고…(다시 시작해야 한다)
위 명령어대로 입력해서 Ubuntu와 같은 앱들을 전부 제거한다. MS Store에서 우분투를 깔면 WSL 기반으로 작동하기 때문이다.
프로그램 추가 제거 항목에서 GUI적으로 제거해도 된다.
혹시 몰라서 작업 관리자-서비스 탭에 있는 HV 호스트 서비스도 중지한 다음 컴퓨터를 다시 한번 껐다 켜면…
그대로다.
왜지? Hyper-V 관련한 건 전부 제거했는데??
Hyper-V 완전 제거 방법
다행히 여기https://forums.virtualbox.org/viewtopic.php?f=25&t=99390에 해결방법이 나와 있었다.
요점은 Hyper-V를 쓸 것 같아 보이는 기능들을 전부 꺼버리라는 것이다.
여기서부터는 복잡할 수 있으니 천천히 따라오세요~
우선 로컬 그룹 정책 편집기(검색창에 gpedit.msc)→
컴퓨터 구성→
관리 템플렛→
시스템→
Device Guard
에서 가상화 기반 보안 켜기를 사용 안 함으로 설정한다.
그 다음, 검색창에 코어 격리를 입력해 해당 설정에 들어가 전부 체크 해제한다.
또, 레지스트리 편집기(검색창의 regedit)의
HKEY_LOCAL_MACHINE→
SYSTEM→
CurrentControlSet→
Control→
DeviceGuard→
Scenario→
CredentialGuard
에서 Enabled도 0으로 바꿔야 한다.
마지막으로, cmd 창을 관리자 권한으로 들어가
1
2
bcdedit /set hypervisorlaunchtype off
DISM /Online /Disable-Feature:Microsoft-Hyper-V
이 명령어도 입력해 준다.
그런 다음, 컴퓨터를 끄고 전원을 20여 초 차단한다. 왜 이렇게까지 해야 하는지는 모르겠지만… 정황상 메모리 초기화 때문일수도
노트북이라면 바이오스의 배터리 전원 비활성화 기능을 활용하면 된다. 본인 노트북 기준으로는 위 사진에 설정 있어요~
이렇게 다시 컴퓨터를 켜 보면…(말이 쉽지, 계속 안돼서 위 작업 몇 번이고 반복해 봤어요)
이렇게 CPU 가상화가 다시 켜진 것을 볼 수 있다!
너무 반가운 얼굴이었다 ㅠㅠㅠ…