Windows Server 2012 가상화 관련 영업멘트 유감

얼마 전에 Windows Server 2012 설명(=영업)을 들을 기회가 있었는데, 차마 그 자리에서 뭐라 그러진 못하고 (…) 여기에 간단히 적어두기.

1. Windows Server 2012의 가상화 기능은 가장 최신의 linux kernel에 추가되었고 그런 건 hyper-v (MS의 가상화 기술) 뿐이다.

고갱님 여기서 구라치다 걸리면 피곤합니다 (…). 가상화가 VM에서 돌아가는 OS가 뭔지 모르면 매우 좋을 것 같지만 실제로는 성능 때문에 (syscall 할 때마다 가상 머신 OS – 가상 머신 device emulation – 물리 머신 OS – 물리 머신 device를 다 거치면 오래 걸린다) para-virtualization(=반가상화라고 번역하기도)을 하거나 일부 성능에 민감한 장치(block IO, network IO, graphic card …)에는 가상 머신 device emulation을 건너뛸 방법을 찾는다.

Hyper-v가 kernel mainline에 올라간 건 3.3 때 얘기고, 저 설명회(?)할 당시에 3.7 릴리즈 사이클이 진행 중이었다. (그리고 어제, 2012-12-12에 3.7 stable이 릴리즈 되었다) 게다가 mainline 말고 드라이버만 따지면 훨씬 오래된(=서버 2008시절; 2.6.xx 시절) 얘기기도 하다.

근데 Xen과 VMware가 linux kernel의 반가상화 드라이버들을 이용한 건 2.6 후반 (2.6 개발 사이클이 너무 길다;; ) 얘기다. 상대적으로 역사가 짧은 KVM도 포함된 지 오래되었음. (이것 역시 2.6.xx 시절의 얘기)

반대로 Windows에서 linux의 반가상화 드라이버인 virtio 나 VMware의 반가상화 드라이버를 쓸 수 있었던 게 이미 수년이 지난 얘기인걸 생각하면 (…).

2. Windows Server 2012의 반가상화 드라이버의 block device IO 성능이 좋아서 데이터베이스 인스턴스를 운영할 수 있다.

많은 기술들이 그렇듯이 상황에 따라 다르다. 지난 달 말에 모 게임 서버팀장을 만났는데 (서비스 중인 게임이 DB 서버에 들어간 돈이 좀 많다) 이 얘길 했더니 코웃음 치더라. IOPS가 모자란다고 (…).

그래도 M$ 내부의 빌드팜에서도 쓸 수 있을 정도라 하니 성능은 좋은 편이겠지만 영업 멘트만 읽으면 좀 곤란하지.

3. MS가 만든 네트워크 가상화 솔루션은 훌륭하다.

…뭐라고! NVGRE를 니네가 만들었냐!![1]

여하튼 영업멘트에서 이거 기반으로 가상 네트워크를 구축할 수 있고 반가상화 드라이버 때문에 성능도 좋다라는 거였는데. 일단 네트워크 가상화의 성능 문제는 간단하지 않다.
원래 하드웨어에서 할 부분을 CPU가 대신하는 부분이 많기 때문에 CPU 로드가 꽤 높다.

아마 이쪽 엔지니어링 경력이 없는 에반젤리스트라 그럴 수도 있겠지만, 상대한테 매우 중요할 수도 있는 부분에서 이렇게 말하면 곤란하다. TechNet의 blog 포스팅에서도 고성능 네트워크가 필요하면 (이러면 사용자간 네트워크가 분리되어 있지 않기 때문에 사실 상 가상화가 아닌) IP rewrite를 쓰라고 되어있다.

저 글에서도 말하고 있지만 LSO 같은 기능을 이용하게 구성된 stateless transport tunneling (=STT) 같은 걸 써야 한다. 아니면 CPU 오버로드를 버틸 생각을 하고 GRE를 그냥 쓰거나.

 

간단히 정리하자면,

  • 영업은 영업
  • 에반젤리스트도 해당 회사에 맞는 영역으로 보내주시면 좋겠습니다(…)
  • (환경에 따라 다르겠지만) VMware 솔루션(vCenter?)을 대체하는 게 아니면 큰 임팩트는 없을 것 같다.
  1. 그럴 리가 없지. 흔히 그렇듯이 CISCO에서 나옴 []

가상화 서버 체험기

지난 주에 가상화 서버를 설치하기 시작한지도 거의 일주일이 지났다. 실제로 사용된 가상화 기술이 뭔진 모르겠지만(…), 일단 하나의 물리 서버(OS는 불명) 위에 3개의 가상화 서버(Windows 2003 x64/86 혼성)가 올라갔다.

일단 간략히 정리하자면, 현재 소감(?)은,

  • 기술 자체가 의미하는 거지만 실제 서버와 거의 차이가 없다.  DNS 주소와 IP 도 각각 할당받아 잘 쓰고 있다
  • 약간의 성능 문제가 있다. 빌드 서버로 쓰던 녀석에서 만족스럽지 못한 성능을 보였다. intel xeon x5560 코어 2개(실제로 물리 CPU는 1개일듯)일 때 Core2duo 6600 정도의 성능 밖에 안나왔다. 물론 이건 코어 수를 늘리면서 어느 정도 해결
  • 병목지점은 내가 분석할 방법이 없으니 불명. 이건 전산팀이랑 얘기해야할 문제
  • 자원 할당이 상당히 자유로운듯하다. 성능 문제를 얘기 했더니 바로 할당된 코어 수를 1개 늘려줬다. 성능도 향상 (다만 가상 서버의 재부팅이 필요하긴 하다)
  • 물리 자원은 exclusive 하게 할당된다.  CPU를 3개에서 4개로 올리려고 하니 다른 서버 중 부하 적을 서버에 할당된 CPU를 하나 빼다가 준다더라(초기 상태에선 각각 2개의 코어가 할당)

정도.

한 줄 요약: 성능은 좀 떨어짐 / 유연성은 물리서버랑 비교도 안되게 좋다

성능 테스트 수준까지 않은 일반적인 개발환경에서는 꽤 괜찮은 기술인듯 싶다. 서버 운영 부담도 적어지고, 하드웨어 활용률도 괜찮아지는 듯 하고. 사실 저렇게 옮겨간 서버 3대는 대부분 유휴 상태로 버티고 있었으니 -_-;; (물론 빌드 서버같은건 한창 작업 중일 땐 죽어라 뭔가 하고 있다 )

서버 설치 기록 post-mortem

밑 포스팅에 정리해보면서 생각한거지만 참 문제가 많다.

1. DB 이전할 때 인코딩 문제

Linux 쪽에서 쓸 때는 금방 눈치 챘는데, table 문자집합이 latin1이다. 아니 왜 이게 기본값이야 Orz.

그래서 mysqldump 한 값이 엉망이길래, 구글링을 좀 하고 이런걸 찾았다 – mantis upgrade

이걸 참조해서

mysqldump -u root -p --default-character-set=latin1 -–skip-set-charset bitnami_redmine

로 백업했는데, skip-set-charset 이 MySQL이 기본적으로 삽입하는 SET NAMES 문자집합 구문을 빼버리기 때문에 문자열을 해석안하고 그대로 덤프해서 latin1인양 들어가있던 UTF-8 문자열들이 살아서(?) 나온 듯 싶다.

2. 빌드 서버 설정 문제

CC.net 띄우는것 까진 문제가 없었는데, 이게 빌드하고 테스트 케이스 실행하는 과정에서 발생한 문제가 한 두 개가 아니었다.

일단 바로 해결할 수 있는건 그다지 없어서 문서화 잘 해놓는걸로 끝내긴했는데, 이거 참 귀찮은 일이로세.

빌드하는 수준에서는 어떻게 될 것 같은데, 테스트 케이스를 실행하는 단계가 되면 문제가 좀 복잡한듯 Orz

3. 가상화 서버 성능 문제

intel xeon x5560이라는 상당히 훌륭한(…) CPU가 할당되서 좋아했는데 성능은 생각만큼이 아니다. 가상화 오버헤드도 있긴하겠지만, 그 보단 충분한 수의 코어가 할당이 안된듯? 아마 코어가 하나 할당되고, 이게 HT라서 두 개의 CPU 가 잡히는 것 같지만 이걸로는 부족하다(?).

이전 빌드 서버가 intel core2duo (conroe) 6600이었는데 (메모리는 이쪽이 4G이긴 했지만), 여기서 대략 20분 정도 걸리던 빌드가 21 분 수준으로 걸린다. 반면에 실행 속도는 거의 1.5~2.2배 정도씩 빨라졌더라.

뭐가 문젠가 하고 /MP 옵션이 없는 것만 빌드해봤는데[1] 1.7배씩 빠른 정도로 나오더라. 아무래도 물리 코어가 2개가 아니라 HT 코어 2개로 빌드해서 생기는 문제인듯? 밑단에서 어떤 가상화를 쓰는지 모르지만 코어 2개가 할당이 안되면(xeon x5560은 물리코어가 4, 각각에서 HT해서 총 8개 코어다) 좀 괴로울듯. 아니 기왕 딴 서버들 성능도 그닥 안 중요한데(???) 물리 코어 3개 할당 좀 해주시면 (도망간다).

일단 요청은 했는데 금요일 밤에야 한거라 월요일에나 응답을 받을듯. 잘 되었으면 좋겠는데;

아마 CPU 부하 최대로 걸릴 녀석은 이 놈인듯하니(빌드서버가 좀…) 얘만 성능 잘 나와주면 다른 부하 적게 걸리는 공용 써버들도 다 가상화 서버 위로 옮겨도 될 것 같은데.

  1. VS에서 빌드할 때 모든 코어를 최대한 써서 빌드하는 옵션 []