VMplayer/VMware 안에 설치한 Windows 속도 높이기

alee의 이미지

이번에 vmplayer 안에 윈도우를 새로 설치하면서 약간의 편법을 써 보았는데 생각보다 결과가
괜찮아서 소개합니다. vmplayer 또는 vmware 안에 설치한 윈도우의 속도를 높이는 방법입니다.
아이디어는 간단합니다. 요즘에는 메모리 가격이 많이 내려서 1GB 이상씩 꽂아서 사용하는 분이
많이 있는데, 남아도는 메모리를 활용해서 vmplayer 안에 설치한 윈도우의 vmem 파일과
임시 디렉토리를 tmpfs 위에 만드는 것입니다.

제 경우 ~/.vmware/winxp/ 디렉토리가 vmplayer 안에 설치한 윈도우XP가 들어 있는
디렉토리이고, 이 방법을 적용하기 전 그 안에 들어 있는 파일은 다음과 같았습니다.

$ ls -l .vmware/winxp
total 4940956
-rw------- 1 alee alee       8664 Nov 24 17:29 winxp.nvram
-rw------- 1 alee alee        598 Jan  9 12:03 winxp.vmdk
-rw------- 1 alee alee          0 Jan  9 12:03 winxp.vmsd
-rwx------ 1 alee alee       1273 Jan  9 12:06 winxp.vmx
-rw------- 1 alee alee 1646002176 Jan  9 13:58 winxp-s001.vmdk
-rw------- 1 alee alee 1099300864 Jan  9 13:58 winxp-s002.vmdk
-rw------- 1 alee alee 1774452736 Jan  9 13:58 winxp-s003.vmdk
-rw------- 1 alee alee  530907136 Jan  9 13:58 winxp-s004.vmdk
-rw------- 1 alee alee     393216 Jan  9 13:20 winxp-s005.vmdk
$ 

이제부터 tmpfs 위에 vmem 파일 및 윈도우 임시디렉토리를 위치시키는 방법을 설명합니다.
아래의 설명에서는 /tmp 디렉토리에 이미 tmpfs가 마운트되어 있다고 가정합니다.

vmplayer로 *.vmx 파일을 실행하면 *.vmx 파일이 위치한 디렉토리에 *.vmem 파일이
만들어집니다. 따라서 ~/.vmware/winxp 안의 파일들을 /tmp/vmware-winxp로 복사한
다음에 /tmp/vmware-winxp에서 실행하는 것이 목적입니다. 그런데 위 목록에서 보이듯이
가상 디스크 파일인 winxp-s???.vmdk은 너무 등치가 크기 때문에 /tmp로 복사할 수가
없습니다. 따라서 이 파일만 빼고 복사한 다음 vmplayer를 실행할 수 있도록 조치를 취해줘야
합니다.

방법은 간단합니다. 만약 디스크 타입을 2G씩 split되어 있는 형태로 만들었다면
winxp.vmdk 파일을 열어서 다음과 같이 고쳐주면 됩니다.

RW 4192256 SPARSE "/home/alee/.vmware/winxp/winxp-s001.vmdk"
RW 4192256 SPARSE "/home/alee/.vmware/winxp/winxp-s002.vmdk"
RW 4192256 SPARSE "/home/alee/.vmware/winxp/winxp-s003.vmdk"
RW 4192256 SPARSE "/home/alee/.vmware/winxp/winxp-s004.vmdk"
RW 4192256 SPARSE "/home/alee/.vmware/winxp/winxp-s005.vmdk"

그리고나서 winxp.vmx, winxp.nvram, winxp.vmdk 이 세 개의 파일만 /tmp/vmware-winxp로
복사한 다음 vmplayer /tmp/vmware-winxp/winxp.vmx 명령으로 가상머신을 실행합니다.
여기까지가 vmem 파일을 tmpfs 위에 만들어지도록 하는 방법입니다.

다음은 윈도우의 임시파일이 tmpfs 위에 만들어지도록 하는 방법입니다.
우선, 가상디스크를 하나 더 만들어야 합니다. vmware-workstation에 들어 있는
vmware-vdiskmanager 명령을 사용하여 ~/.vmware/winxp 디렉토리 안에서 다음과 같이
가상디스크를 하나 만듭니다.

vmware-vdiskmanager -c -s 850Mb -a ide -t 0 winxp.tmp.vmdk

그리고나서 새로 만든 디스크를 vmware 안의 윈도우에서 인식할 수 있도록 winxp.vmx 파일에
다음 내용을 삽입합니다.

ide0:1.present = "TRUE"
ide0:1.fileName = "winxp.tmp.vmdk"
ide0:1.deviceType = "disk"
ide0:1.redo = ""

다음으로 이 파일 역시 /tmp/vmware-winxp 로 복사한 다음 가상머신을 실행합니다.
그리고나서 가상머신 안에서 새로 추가한 디스크를 사용할 수 있도록 설정하고 포맷합니다.
이때 ntfs 대신 fat32로 포맷할 경우 비어 있는 디스크 파일의 크기가 훨씩 작아집니다.
다음으로, 새로 추가한 디스크 드라이브가 D: 라면, D:\Temp 디렉토리를 하나 만듭니다.
그 다음, 아무것도 안 들어 있는 임시디렉토리용 가상디스크 파일을 백업해 두기 위해
winxp.tmp.vmdk 파일을 ~/.vmware/winxp/로 다시 복사해옵니다.

마지막으로, 내컴퓨터-속성-고급-환경변수 에 들어가서 사용자변수 및 시스템변수의 TEMP와
TMP를 D:\Temp로 지정해 줍니다. 또, 인터넷 등록정보에서 임시 인터넷 파일이 위치할 디렉토리
역시 D:\Temp로 지정해 준 다음 재부팅하면 설정이 완료됩니다.

재부팅을 하고 나면 /tmp 디렉토리 안에 있는 파일은 모두 지워지므로 재부팅 후 vmplayer를 처음
실행할 때에는 /tmp/vmware-winxp로 필요한 파일을 복사해줘야 합니다. 이때, 필요한 파일 목록은
다음과 같습니다.

winxp.nvram
winxp.tmp.vmdk
winxp.vmdk
winxp.vmx

또는, winxp.vmx 파일을 열어서 다음과 같이 수정해 주면 다음의 winxp.vmx 및 winxp.tmp.vmdk
두 파일만 복사해줘도 됩니다. 그렇지만 제 경우 WRITELOCK 파일까지 모두 tmpfs 위에 생기도록 하기
위해서 네 파일 모두 복사하는 방법을 사용했습니다. 또, winxp.vmsd 파일은 어차피 크기가 0이고
실행시 자동으로 만들어지기 때문에 복사할 필요가 없고, 아예 지워버려도 상관 없습니다.

nvram = "/home/alee/.vmware/winxp/winxp.nvram"
ide0:0.fileName = "/home/alee/.vmware/winxp/winxp.vmdk"

매번 재부팅 후 vmplayer를 실행하기 전에 /tmp로 파일을 복사하려면 귀찮으므로 다음과 같은
스크립트를 만들어 두고 사용하면 됩니다.

#!/bin/sh
test -d /tmp/vmware-winxp || mkdir /tmp/vmware-winxp
test -x /tmp/vmware-winxp/winxp.vmx || cp ~/.vmware/winxp/winxp.* /tmp/vmware-winxp/
exec vmplayer /tmp/vmware-alee/winxp.vmx

댓글

리눅써의 이미지

메모리 할당 더 해주는 것이 낫지 않을까요?

MS를 믿으세요? 그럼 구글은요?

MS를 믿으세요? 그럼 구글은요?

익명사용자의 이미지

뭡니까 그게.

alee의 이미지

아무리 메모리가 많아도 Temp 디렉토리에 파일을 만드는 작업은 메모리로 대신하지 않습니다.
이건 윈도우나 리눅스나 마찬가지구요, 그게 바로 tmpfs나 램디스크가 존재하는 이유죠.
게다가 vmem 파일은 윈도우에서 만드는게 아니라 vmware에서 만드는 파일이기 때문에
vmware 안의 윈도우에서 무슨짓을 해줘도 디스크에 만들어집니다.

제 경우 위에 설명한 것을 적용하고 메모리 256M를 할당했을 때의 부팅/셧다운 속도가 그냥
메모리를 1G를 할당해 줬을 때 보다도 훨씬 빨라졌습니다.

익명사용자의 이미지

좋은 아이디어네요. 저도 좀 연구해서 응용해 보아야겠습니다. :)

찾아보니 .vmx 파일에 다음 내용[1]을 넣어주면 .vmem 파일을 만들지 않는다고 하더군요.

mainMem.useNamedFile = "FALSE"

이외 MemTrimRate=0 같은 옵션[2] 도 넣어서 쓰고 있습니다.
workstation 6 beta의 경우에는 lib/vmware/bin/vmware-vmx 파일을 lib/vmware/bin-debug/vmware-vmx 로 복사해서 쓰고 있습니다.

----
[1] http://www.vmware.com/community/click.jspa?searchID=-1&messageID=197399
[2] http://www.virtualization.info/2005/11/how-to-improve-disk-io-performances.html

alee의 이미지

감사합니다. mainMem.useNamedFile = "FALSE" 을 쓰면 /tmp로 옮긴 다음 실행해도
체감성능의 차이가 별로 크지 않을 수도 있겠네요. 제가 괜한 삽질을 한 것일지도 모르겠습니다.

익명사용자의 이미지

아!!! 그리고 vmware-vdiskmanager 옵션에서 -t 2 (또는 3)로 주는 것이 좋습니다. growable 과 preallocated의 차이가 상당히 상당히 컷던 걸로 기억합니다. 제 경우에는 지금은 남는 하드디스크가 있어 이걸 직접 이용하고 있습니다.

이예의 경우 D: 드라이브는 tmpfs를 사용하기 때문에 크게 영향이 없겠지만, 이미 잡아쓰고 계신 C: 의 경우는 growable virtual disk로 잡아 쓰고 계신 걸로 보입니다.

alee의 이미지

이 지적 역시 감사합니다. 그렇지만 preallocated를 쓰면 백업/복구가 너무 오래 걸리기 때문에 제 경우
그냥 growable을 쓰고 있습니다. Temp용 디스크를 따로 만들어서 tmpfs에 집어넣을 경우 성능상의
이득과 함께 얻을 수 있는 또 다른 이득은 가상디스크 파일이 쓸데없이 커지는 것을 막아준다는 점입니다.

supaflow의 이미지

안그래도 고민하던 문제였는데 속도가 상당히 빨라졌군요.

언제나 도움만 받습니다.^^
=====
http://supaflow.tistory.com

rx78gd의 이미지

Vmware를 사용하면서도 그냥 귀찮아서 튜닝쪽은 생각도 안하고 그냥 메모리나 왕창 할당하자라는 생각만 해보았는데 이 글을 보니 새삼 귀차니즘을 극복해야겠다는 생각이 듭니다.^^

지금 얼른 해봐야겠습니다.^^ 도움 감사합니다. alee님..
-------------------------------------------------------------------------------------------
나에겐 할 수 있다는 의지와
하면 된다는 신념과
해야 한다는 의무가 있다.

http://rx78gd.egloos.com

-------------------------------------------------------------------------------------------
나에겐 할 수 있다는 의지와
하면 된다는 신념과
해야 한다는 의무가 있다.

http://rx78gd.tistory.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.