2008/06/13

Solaris의 버추얼 머신 : 버추얼박스(virtualbox)의 성능

썬에서는 얼마전에 독일계의 이노텍(innotek)이란 회사를 인수한 적이 있다. 이노텍이란 회사는 가상머쉰의 일종인 '버추얼박스(virtualbox)'라는 오픈 소스 소프트웨어를 제작 공급하던 업체이다.

썬은 버추얼 박스를 인수한 이후 솔라리스에서도 아주 잘 동작하도록 꽤 수고를 드린 것 같다. 최신 버젼으로 제공된 1.62 버젼은 솔라리스상에서 설치되어서 오픈솔라리스, 솔라리스10(u5+)은 물론 윈도우즈 계열과 리눅스 계열의 게스트 운영체제를 지원할 뿐 아니라 해당 게스트 운영체제들의 성능을 향상시켜주는 게스크 에디션을 제공하면서 게스트로 솔라리스, 윈도우즈,리눅스, FreeBSD, OS/2를 가장 퍼펙트하게 제공하는 최초의 솔라리스용 버추얼 버신이라고 할 수 있겠다.

버추얼 벅스는 Type2 (Hosted VM)기반의 버추얼 머신으로 다른 운영체제위에서 동작하며 호스트 운영체제도 가장 많은 운영체제를 지원한다.(솔라리스, 리눅스, MacOSX, 윈도우즈)

위키에 있는 버추얼 머신 비교를 보면 쉽게 이해가 간다.
이노텍의 버추얼박스는 흥미로운 탄생 역사를 가지고 있는데, 버추얼박스 소스의 초기 코드(오픈소스가 되기 이전)가 마이크로소프사에 라이센스되었는데, 이로 인해서 마이크로소프트의 Virtual PC 2007과 거의 흡사하다고 할 수 있겠다. 유일하게 다르다면 VirtualPC 2007은 호스트운영체제로 윈도우즈만 지원하는 반면 VirtualBox는 주요 데스크탑운영체제 대부분을 지원한다는 것이 다르다면 다르겠다.


버추얼 박스 1.62에서 WindowsXP를 돌리는 모습니다. vbox guest edition을 설치한 이후에 화면 크기의 조절이라던가 마우스 모드의 자동전환, 성능등이 획기적으로 개선되어 있다.



vbox 1.62/Solaris 상에서 PC Wizard 2008을 다운받아서 시스템 정보를 확인하는 스샷이다. 흥미로운 것은 CPU를 부정확하게 잡아내고 있는데 이유는 확실하지 않다. 감지하는 코어의 개수(운영체제 입장에서 CPU)는 한개만 나온다. 이것은 버추얼 박스가 한 CPU만 지원하기 때문에 그런 것으로 보인다. (맨 끝 PC Wizard 결과 화면 참고)

솔라리스에서는

vaio-solaris:~ 499

$kstat cpu_info:1:cpu_info1:brand
module: cpu_info instance: 1
name: cpu_info1 class: misc
brand Intel(r) Core(tm)2 Duo CPU T7500 @ 2.20GHz


로 나오는 반면

버추얼 박스내의 PC Wizard에서는 Core2 Duo E4500@2200Mhz CPU로 감지했다. Core2 Duo면 두개의 코어인데 하나만 나오는 것도 다소 흥미롭다.

그렇다면 성능은 어떨까 ?


정말 흥미로운 성능 결과가 아닐 수 없다. 위 결과화면에서 보이는 두개의 선중 노란선이 버추얼박스의 성능 결과인 반면 파란색 선은 참고용 시스템의 결과이다. 참고용 시스템이라는 것이 보이는 데로, Core2 Duo E6600@2.4Ghz 시스템인데, 이 시스템과 비교해서 프로세서 스피드가 훨씬 뛰어나다.
메모리는 훨씬 성능이 좋다. 메모리 캐쉬는 같은 것으로 나오고. 믿을 만한 데이타인가 ? 살짝 호기심이 발동한다. Core2 Duo T7500의 native 성능 결과를 추후 올리겠다.

비디오는 당연히 느릴 것으로 예상했었고 상당히 느린 것으로 나왔다.
우측 위 태스크 관리자의 부분 이미지가 보인다. CPU가 하나만 보이는 것이 인상적이다. Core2 Duo인데, 반코어만 보인다는 얘기다. 웃긴다.

PC wizard를 수행하게 되면, 버추얼박스는 최대의 부하를 사용하게 되는데, 이와중의 솔라리스 상황을 살펴보았다.


VirtualBox가 거의 하나의 코어를 다 쓰는 것을 볼 수 있다. 49% 정도로 나오는 것은 CPU 두개짜리 박스에서 하나를 다 쓰게 되어서 나타나는 평균값이다. 그 다음에 나오는 프로세스는 Xorg인데, 3D 데스크탑을 쓰면서 버추얼 박스에서 Video Test를 하는 와중에 캡쳐한 것이라 다소 높게 나왔다. 비데오 테스트가 아닌 경우에는 이렇게 높게 나오지는 않았다. Direct3D 테스트는 실패한 것으로 보인다.

버추얼 박스는 흥미롭게 하나의 코어만을 게스트 운영체제에 보여주면서, 자신은 여러개의 스레드를 통하여 시스템의 모든 프로세스를 나름 공평하게 사용하는 것을 볼 수 있다.그렇지만, 전용 스레드 하나가 주로 사용되는 것은 어쩔 수 없다.

솔라리스에서 버추얼박스를 사용하면서 게스트 운영체제에 과부하를 걸게 되면 호스트 운영체제인 솔라리스가 뛰엄 뛰엄 실행되는 모습이 일부 보이는데, 이런 현상을 없애기 위해서 윈도우즈에서는 할 수 없는
프로세서 전용 할당과 같은 자원 분배기능을 할 수가 있다.

Core 2 Duo T7500 은 두개으 코어를 가지고 있는데 하나의 코어에서만 VirtualBox관련 프로세스들이 실행되게 하면, 나머지 프로세스에서 솔라리스가 실행되므로 매우 안정적으로 운영할 수 있다.


이렇게 하기 위해서는 프로세서 셋을 다음과 같이 구성한다.
#psrset -c 1 1
; 1번 프로세서 셋을 구성하면서 해당 셋에 1번 코어를 할당한다. 기본적으로 0번, 1번 두개의 코어가 있다.

vaio-solaris:~ 503
$psrinfo -v
Status of virtual processor 0 as of: 06/12/2008 18:03:09
온라인(06/11/2008 09:05:27 이후).
The i386 processor operates at 2200 MHz,
and has an i387 compatible floating point processor.
Status of virtual processor 1 as of: 06/12/2008 18:03:09
온라인(06/11/2008 09:05:33 이후).
The i386 processor operates at 2200 MHz,
and has an i387 compatible floating point processor.
vaio-solaris:~ 504
$psrinfo
0 온라인 06/11/2008 09:05:27 이후
1 온라인 06/11/2008 09:05:33 이후

다음은 버추얼박스가 실행하고 있는 중의 mpstat 결과이다.
$mpstat 1
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 16 0 2 466 190 709 79 36 24 0 13563 19 2 0 79
1 13 0 5 249 194 567 73 36 27 0 12633 18 4 0 78
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 1 563 210 1388 317 118 163 0 58609 30 18 0 52
1 7 1 0 573 154 1326 354 107 159 0 71542 27 26 0 48
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 2 0 0 557 200 1530 387 141 71 0 62210 27 17 0 56
1 0 0 14 583 181 1579 365 153 95 0 85893 32 22 0 45
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 0 608 206 1969 487 159 28 0 55857 25 15 0 60
1 2 0 0 625 214 1394 305 151 35 0 83667 28 21 0 51
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 4 0 555 214 1378 307 176 74 0 73979 25 18 0 57
1 1 1 0 572 198 1381 313 177 66 0 70269 24 18 0 58
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 13 0 663 303 1376 241 160 59 0 36496 20 14 0 66
1 0 6 8 550 168 1366 357 150 53 0 90470 27 30 0 44

두개의 CPU(core)가 나름 골고루 사용되고 있음을 볼 수 있다.

앞서 만든 processor set을 이용해서 1번 코어에 버추얼 박스를 바인딩 시킨 결과이다.

#psrset -b 1 `pgrep -d" " VirtualBox`
process id 4565: was not bound, now 1
process id 4560: was not bound, now 1


$mpstat 1
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 16 0 2 466 190 710 80 36 24 0 13761 19 2 0 79
1 13 0 5 250 194 568 73 36 27 0 13141 18 4 0 78
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 7 0 0 427 204 874 22 0 5 0 2141 4 1 0 95
1 0 0 14 371 108 324 65 0 6 0 165138 35 24 0 40
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 0 402 198 800 21 0 0 0 2220 6 2 0 92
1 0 0 0 367 102 321 71 0 0 0 162599 36 25 0 40
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 0 425 212 987 131 0 0 0 19995 8 2 0 90
1 0 0 0 370 99 313 74 0 1 0 160760 35 27 0 38
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 1 416 200 843 18 0 4 0 1895 4 2 0 94
1 0 0 14 382 112 313 71 0 6 0 167351 36 25 0 38
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 0 404 204 770 20 0 0 0 2015 6 3 0 91
1 0 0 0 362 101 318 67 0 0 0 161251 36 24 0 41
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 0 409 204 910 20 0 0 0 2333 5 1 0 94
1 0 0 0 379 106 320 76 0 0 0 165813 36 25 0 39



psrset으로 프로세서 관리를 한 이후에는 CPU 하나만 주로 쓰이고 있음을 알 수 있다. 이때에 버추얼 박스에서는 부하가 거의 걸려있지 않은 상태이고 아래 상태는 인터넷 익스플로러 하나에서 네이버 초기 화면을 열었을 때의 현상이다. 1번 코어가 거의 모두 사용되고 있음을 알 수 있다. 네이버는 '플래쉬'로 상당한 부하를 끊임없이 만들어 내고 있기 때문에 위와 같은 결과가 보임을 알 수 있다. 이때 0번 코어도 상당한 사용율 보이는 데 이 이유는 인터넷을 접근할때 발생하는 네트웍 트래픽의 처리를 0번 코아에서만 하기 때문에 접속 초기시 0번 코어를 상당히 사용하는 모습을 보여준다. psrset으로 cpu를 운영체제 기본 풀에서 분리해내면 그 프로세서서는 운영체제가 사용하지 않기 때문이다.


$mpstat 1
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 16 0 2 466 190 711 80 36 24 0 13753 19 2 0 79
1 13 0 5 251 193 567 73 36 27 0 13322 18 4 0 78
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 7 0 4 480 238 2132 540 0 153 0 7480 31 9 0 60
1 0 7 5 746 241 1065 497 0 219 0 55495 26 63 0 11
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 4 637 310 2125 544 0 196 0 7388 31 10 0 59
1 1 26 8 827 339 1149 529 0 245 0 31525 18 74 0 8
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 1 526 248 2628 736 0 382 0 8992 40 13 0 46
1 0 9 14 866 300 1186 576 0 491 0 18527 18 82 0 0
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 27 24 4 616 329 2632 699 0 261 0 8153 36 13 0 51
1 0 6 0 786 182 1078 522 0 376 0 42941 25 75 0 0
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 0 501 234 2258 695 0 390 0 8409 35 12 0 53
1 0 4 0 691 142 1052 497 0 508 0 44347 23 74 0 3
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 1 1 0 477 226 2151 554 0 287 0 7807 28 9 0 63
1 0 2 14 632 152 955 419 0 424 0 62805 27 63 0 10

댓글 없음: