Post

최종 프로젝트 인프라 구축①-virtualbox 성능 문제

최종 프로젝트 인프라 구축①-virtualbox 성능 문제

버추얼박스 거북이 없애기

개요

현재 다니는 부트 캠프에서 최종 프로젝트를 진행중이다.

이번 주부터 개발에 들어가게 되어 본인은 우선 로컬 개발 환경 구축을 담당하게 되었다.

인프라 구조

do3-img1

프로젝트는 부트캠프 측에서 AWS 요금을 지원해준다고 한다.

그렇다고 그냥 주는 건 당연히 아닌, 합당한 구조를 기획해 합당한 사유와 함께 제출해야 하는데,

썩어도 준치라고 AWS 구성 짬(?)이 있는 본인이 구성도를 담당하게 되었다.

이 구성도가 승인될지는 모르겠지만(참고로 저렇게 하니 대충 월 370달러 나온다…) 클라우드를 스테이지 서버 삼아,
본인 노트북(램 32GB!!)에 버추얼박스 가상머신을 설치해 당분간 개발서버로 플젝실에 상주시키려고 한다.

조원들이 자기것 테스트한다고 일일이 타 서비스 10개씩 켜고, 카프카 켜고,… 이럴수는 없잖니

개발서버 가상머신

do3-img2

가상머신은 이렇게 2대로 마련하였다.

아무리 램 32기가여도 구성도 그대로 구현하기에는 거시기하니, 쿠버 클러스터를 구성할 DEV_CHOGAK_CLUSTER(8코어, 램 16기가)와 젠킨스, 그라파나, 키바나 등등…을 컨테이너로 넣을 DEV_CHOGAK_JENKINS(4코어, 램 8기가) 이렇게 간략화했다.

둘 다 Rocky Linux 8을 사용한다. 클라스터용 서버는 GUI로 구성~

가상화 문제

문제는 이렇게 구성했는데, 속도가 너무 느렸다.

단순히 느린 게 아닌, 클라스터 서버에서 인터넷 브라우저(파이어폭스) 하나만 켜도 마우스 커서를 옮기면 5초 후에 반응한다(…)

처음에는 호스트 CPU의 쓰로틀링 문제인 줄 알았으나(그 불덩어리로 유명한 i7 12세대)..

do3-img3

콘솔 우측 아래의 가상화 형식이 이상해서 확인해 봤더니

do3-img4

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에 넣어놨으니

do3-img5

우선 Windows 기능에서 Hyper-V 체크를 끄고…(다시 시작해야 한다)

do3-img7

위 명령어대로 입력해서 Ubuntu와 같은 앱들을 전부 제거한다. MS Store에서 우분투를 깔면 WSL 기반으로 작동하기 때문이다.
프로그램 추가 제거 항목에서 GUI적으로 제거해도 된다.

do3-img6

혹시 몰라서 작업 관리자-서비스 탭에 있는 HV 호스트 서비스도 중지한 다음 컴퓨터를 다시 한번 껐다 켜면…

do3-img3

그대로다.

왜지? Hyper-V 관련한 건 전부 제거했는데??

Hyper-V 완전 제거 방법

다행히 여기https://forums.virtualbox.org/viewtopic.php?f=25&t=99390에 해결방법이 나와 있었다.
요점은 Hyper-V를 쓸 것 같아 보이는 기능들을 전부 꺼버리라는 것이다.

여기서부터는 복잡할 수 있으니 천천히 따라오세요~

do3-img8

우선 로컬 그룹 정책 편집기(검색창에 gpedit.msc)→
컴퓨터 구성→
관리 템플렛→
시스템→
Device Guard
에서 가상화 기반 보안 켜기사용 안 함으로 설정한다.

do3-img9

그 다음, 검색창에 코어 격리를 입력해 해당 설정에 들어가 전부 체크 해제한다.

do3-img10

또, 레지스트리 편집기(검색창의 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

이 명령어도 입력해 준다.

do3-img11

그런 다음, 컴퓨터를 끄고 전원을 20여 초 차단한다. 왜 이렇게까지 해야 하는지는 모르겠지만… 정황상 메모리 초기화 때문일수도
노트북이라면 바이오스의 배터리 전원 비활성화 기능을 활용하면 된다. 본인 노트북 기준으로는 위 사진에 설정 있어요~

이렇게 다시 컴퓨터를 켜 보면…(말이 쉽지, 계속 안돼서 위 작업 몇 번이고 반복해 봤어요)

do3-img12

이렇게 CPU 가상화가 다시 켜진 것을 볼 수 있다!
너무 반가운 얼굴이었다 ㅠㅠㅠ…

This post is licensed under CC BY 4.0 by the author.