프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

개발/기타

Hypervisor의 overcommit

EVEerNew 2024. 7. 20. 21:24
반응형

 


Hypervisor의 OverCommit

가상화의 핵심인 하이퍼바이저는 자원을 극한으로 효율적으로 사용하기 위해 OverCommit 기능을 사용한다.

 

VM들이 모두 같은 자원량을 나누어 사용한다고 가정해 보자.

이 기능을 사용하면, 하이퍼바이저가 물리 호스트의 자원을 정확히 VM 개수만큼 N등분하지 않고 N개 이상의 VM을 동작시킨다. 

 

사실 모든 VM이 자원을 100% 활용하지 않기 때문에, AWS와 같은 CSP 입장에서는 자원을 1:1 크기로 예약해 두면 유휴 자원이 발생한다. 이러한 자원 낭비를 막고자 물리적인 컴퓨팅 자원보다 VM들에게 더 많은 CPU와 메모리를 프로비저닝 하게 된다. 이를 Overcommit이라고 한다.

 

 

 

 

 

 

CPU overcommit

CPU overcommit은 CPU 자원을 물리 호스트이상으로 VM에게 할당하는 것이다.

CPU는 Memory에 비해 비교적으로 비율이 높아, 1:4로 실제보다 VM에 4배에 가깝게 할당하기도 한다.

Memory처럼 실제 자리를 차지하기보다는 Hypervisor의 스케줄링으로 가상 코어를 돌아가면서 사용하기 때문인 듯하다.

심지어 Openstack의 기본 CPU overcommit ratio는 1:16으로, 실제 자원의 16배로 VM을 할당한다고 한다.

 

물론 유휴 VM이 얼마나 존재하느냐 따라 달라질 수밖에 없고, 높은 ratio에서 모든 VM에 부하가 발생하면 스케줄링이 점점 늦어지는 문제가 발생할 수 있으므로 각 Cloud 사들은 자신들의 최적의 ratio를 가지고 있다.

 

 

 

 

 

Memory overcommit 

memory overcommit은 CPU Overcommit에 비해 리스크가 크기 때문에 할당하 ratio가 훨씬 낮다.

OpenStack도 memory overcommit은 기본적으로 1:1.5로 할당한다.

 

 

메모리는 Paging 기법을 통해, 디스크의 Swap 영역에 프로세스에 필요한 데이터를 올려두고 사용할 때에만 메모리에 옮겨 사용한다.

이때 메모리에 비해 Swap 영역은 I/O가 굉장히 느리기 때문에 시스템의 병목점이 된다.

 

특히 프로세스가 많아질수록 사용해야 하는 메모리 페이지가 많아지면서, 각 프로세스가 스케줄링되어 실행될 때 자신의 데이터가 메모리에 없어 Swap 영역에서 옮겨와 사용하는 경우가 많아진다.

 

문제는 각 프로세스들의 실행 순서마다 다른 데이터를 메모리에서 쫓아내고 자신의 데이터를 옮겨오게 된다.

따라서 실행 시간보다 Swap 영역에서 데이터를 로드하는 시간이 더 오래 걸리면서 심각한 시간 지연이 발생한다.

이를 스레싱(Thrashing)이라고 한다.

 

아무래도 1:N의 비율이 높아질수록, VM들의 메모리 적재가 많아지면 스레싱이 발생할 위험이 커지기 때문에 메모리의 비율이 비교적 낮은 것으로 보인다.

 

다행히 Memory Pressure 상황에서는 각 Hypervisor 별로 대처하는 다양한 방법이 존재한다고 한다.

 

 

 

 

 

 

Hypervisor의 Overcommit 기능이 있는 것은 물리 호스트의 자원에는 필연적으로 유휴 자원이 존재하기 때문이다. 

특히 AWS EC2의 T시리즈에서는 할당된 자원보다 사용량을 높이는 Burstable인 인스턴스가 있는데, 이러한 유휴 자원을 최대한 사용하려는 목적으로 보인다.

 

 

 

 

참조

 

https://velog.io/@sjuhwan/Virtualization-101-3-1-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%A4%EB%B2%84%EC%BB%A4%EB%B0%8B%EA%B3%BC-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%97%AC%EC%9C%A0%EA%B3%B5%EA%B0%84-%ED%99%95%EB%B3%B4-%EB%B0%A9%EB%B2%95

 

Virtualization 101 - (3.1) 메모리 오버커밋과 메모리 여유공간 확보 방법

이번 포스팅에서는 직전의 메모리 가상화 파트에서 다루지 못했던 내용인 메모리 오버커밋과, 가상화 환경에서 메모리 압박(Memory pressure)를 핸들링 하는 방법을 알아본다.

velog.io

 

 

https://knight76.tistory.com/entry/openstack-%EC%98%A4%EB%B2%84-%EC%BB%A4%EB%B0%8Bovercommit-%EA%B3%B5%EB%B6%80

 

[openstack] 오버 커밋(overcommit) 공부

오픈 스택의 overcommit 정보 https://docs.openstack.org/arch-design/design-compute/design-compute-overcommit.html 오픈 스택의 가상화 서버의 overcommit 기본 값은 다음과 같이 되어 있다. 가상 서버를 사용할 때 효율을

knight76.tistory.com

 

 

https://brunch.co.kr/@leedongins/83

 

클라우드와 overcommit

About Infra. | 클라우드 시스템을 만드는 과정에서 클라우드 제공사는 컴퓨팅 노드에 CPU와 RAM을 실제 용량보다 더 크게 할당할 수 있습니다. 이렇게 클라우드 시스템에서 제공하는 프로세서를 virtu

brunch.co.kr

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함