サイトアイコン Embarcadero RAD Studio, Delphi, & C++Builder Blogs

VMwareの実行環境や仮想マシンをチューニングしてDelphi/C++Builder/RADStudioの開発環境のパフォーマンスの改善を試みる [JAPAN]

1st half is Original Japanese content. English translated content is on second half

第33回デベロッパーキャンプ・イン・大阪で、来場者の方より「VMwareで RAD Studio で開発しているけど仮想マシンが遅くて困っている」というご相談を頂きました。

最近では仮想マシンを開発で使うことは普通の作業になっていますが、VMware Workstation/Fusionの仮想マシン設定は各種リソースを控え目に使っています。このために初期設定のままでは性能がイマイチの場合があります。そこで、仮想マシンのチューニング項目を挙げてみることにします。


 

何をチューニングすべきか?

VMware の性能が思ったよりも出ない原因は基本的に以下のいずれかです。

CPUリソースを使い切っている場合は基本的にCPUのコア数またはクロック数を増やすしかありませんが、デスクトップPCの場合を除いてはこのようなチューニングは無理です。しかしおそらくはCPUリソースを使い切っているのではなく、ディスクI/Oがボトルネックとなっていることでしょう。

従って、ここでは主にディスクI/Oの改善を試みることにします。なお、このチューニングではメモリが潤沢に搭載されていることが必要です。VMware Workstation/Playerのデフォルト構成はメモリを節約気味に使うのですが、これはメモリに書くべきデータをディスク上に書いているだけにすぎず、性能の低下につながります。そこでメモリを贅沢に使うようにチューニングすることで、I/Oの頻度を減らして性能低下を防ぐことを試みるわけです。

チューニングのポイント

仮想マシンのHDDイメージを保存するフォルダを、アンチウィルスソフトウェアのスキャン対象から外す

仮想マシンのHDDイメージ保存フォルダ一式をアンチウィルスソフトウェアのスキャン対象から外すと、パフォーマンスが大幅に改善できる可能性があります。

アンチウィルスソフトウェアはファイルへの読み書きのたびに裏でウィルススキャンを実行しています。仮想マシンの場合は仮想マシン内でHDDアクセスが発生するたびにファイルの内容自体が更新されたり、あるいはファイルの最終更新時刻や最終アクセス時刻の情報が更新されます。これらはホストマシン側から見たら仮想マシンHDDイメージへのファイルI/Oということになりますので、仮想マシンがHDDアクセスを行う毎にアンチウィルスソフトウェアによるスキャンが発生する恐れがあります。

これを防止するために、仮想マシンのHDDイメージの保存先フォルダはアンチウィルスの監視対象から外しておくことが望ましいと考えられます。特に仮想マシンでWindowsを実行するような場合では OS 標準の Windows Defender が動いていることでしょう。つまりホストマシン側のアンチウィルスソフトウェアで仮想マシンのHDDイメージをスキャンするのはディスクI/OとCPUリソースの両方の浪費であり、処理の遅延に繋がることが懸念されます。

なお、蛇足ではありますが、サーバ構築案件でアンチウィルス製品をインストールするという要件が出る場合があります。このような場合にスキャン対象のフォルダの選定を行わずにデフォルトの状態でインストールを行うとサーバの性能に影響が出る場合があります。このような場合もサーバ側で動作するアプリケーションの動作要件を考慮しつつ不必要なスキャンが行われないように調整すると性能への影響を軽減できます。

ストレージがHDDならばSSDに交換する

身も蓋もない話ではありますが、HDDを利用中の場合はSSDへのリプレースを強く検討すべきです。容量単価でいえばHDDのほうが明らかに安価ですし、また今時の開発環境は多くのディスク容量を消費しますので SSD よりは HDD を使いたいこともあるかと思います。

しかし HDD のI/O速度は SSD に比べて明らかに劣るのですから、基本的には HDD を止めて SSD にすべきです。

ストレージのI/O性能の指標としてIOPSという数値があります。これは秒あたりのI/Oの実行可能数を示していますがディスクのIOPSは100〜300程度と考えるほうがよいでしょう。これは単純な計算から導き出されます。デスクトップ用のHDDは一般的にSATAが用いられますが、そのHDDの回転数は5400~7200rpmです。これを秒あたりに変換してみると、7200/60 = 120回だけ円盤が回っています。HDDにランタムアクセスをかける場合はもっとも悪い場合だと毎回異なるセクタにアクセスせねばならないかもしれません。そうすると円盤1回転につき1箇所しか読めず、120IOPSしか出ません。5000rpmのHDDはIOPSがもっと悪いわけです。あるいはサーバ用のSAS(Serial Attached SCSI)ですら15000rpm程度なのでSATAの倍と考えるのが妥当です。このようにHDDのIOPSは最も条件が悪い状況のときは大した数値が見込めません。

これに対してSSDでは数万IOPSというのが普通です。つまり単位時間あたりのI/Oの頻度がHDDに対して100倍以上大きいのですから、SSDのほうが高速なのは当然なわけです。

なお、Macbook のように SSD のストレージ単価が高い環境では大容量の SSD を選択しづらい状況もあるかと思いますが、できるかぎり購入時点で 500GB 以上の容量を確保することが好ましいでしょう。ほとんどの Macbook はストレージに汎用品を利用しておらず、アップグレードのためのサードパーティ製品が限られています。このために交換可能なSSDはWindowsPCに比べて高価です。唯一、ストレージが安価に入れ替え可能なのは Retina ではない Macbook Pro だけです。

仮想マシン設定ファイルを書き換えてメモリチューニングの挙動を変える

ホストマシン側に十分なメモリ量を搭載している場合は、メモリを贅沢に使うようにチューニングすることでディスクI/Oが減るようです。チューニングは仮想マシンの設定ファイルである *.vmx に対して行います。

*.vmx を編集する場合は、仮想マシンがシャットダウンした状態で行ってください。このファイルは仮想マシンの稼働内容に合わせてVMware側が書き換えを行っています。このため、仮想マシンが稼働中にこのファイルを書き換えても反映されません。また稼働中に書き換えたのちにシャットダウンを行うと、書き換えた内容は保持されておらず、消えてしまいます。

なお、*.vmx に対するチューニング項目として VMware KB に記載されている項目は以下の4項目でした。

[crayon-6768140455d5b659913333/]

このチューニング項目はいずれもゲストOSがメモリをケチケチせずに使うことでディスクI/Oの発生を抑制することを目的としているようです。この情報が掲載されていた KB は以下URLにあります。

https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2092664

ただし Linux 上で VMware を利用する場合は mainMem.useNamedFile の代わりに mainmem.backing を用いるそうです。mainmem.backing に関する情報は以下のURLにありました。

https://communities.vmware.com/thread/244709?start=0&tstart=0

上記から内容を引用します。

[crayon-6768140455d64281629914/]

個別の項目に関する解説は Knowledge Base の中では見当たらないのですが、GitHub Gist で本件に関する説明がなされているURLがありますので紹介いたします。

https://gist.github.com/wpivotto/3993502

また、これら以外のパラメータとして MemAllowAutoScaleDown = “FALSE” というチューニング項目があるようですが、このエントリに関する一次情報は私のほうでは未確認です。

仮想マシンに割り当てるメモリやCPUコア数を増やす

仮想マシンでメモリが足らず、メモリスワップが起きている可能性はないでしょうか? このような場合は当然ながら仮想マシンに割り当てるメモリ量を増やす必要があります。

なお、前述のような仮想マシンの設定ファイルチューニングを行うとゲストOSが消費するメモリが増えています。ここでさらにゲストOSへのリソース割り当てを増やすとホスト側のリソースが枯渇する可能性がありますから、システム全体のリソース配分に注意が必要です。

同時実行する仮想マシンの数を減らす

同時実行する仮想マシンの数が多いほど辛くなるのは自明ですから、数を減らせるなら減らすほうがよいでしょう。何かの作業の都合で Linux を動かす必要があるとしたら、その Linux は Bash on Ubuntu on Windows (Windows 10 Anniversary Update で追加された Windows Subsystem for Linux 環境)で代替できないかどうかを検討します。(VMware ではなく Hyper-V なら Linux 環境を Docier for Windows に置換するという方法もあり得ますが。。。)

仮想ディスクは可変ディスクを使用せず、なおかつ単一ファイルで構成するようにする

仮想ディスクを可変ディスクにするとディスク容量の変動に合わせてディスクが作られます。また分割ディスクはフラグメンテーションの影響が出ますので、それを回避するには単一ファイルで構成するようにします。

スナップショットを使わない

スナップショットを使うとディスクI/Oの性能低下を招きます。スナップショット時点の状態に対する差分の情報が必要となるからです。だからHDD構成の場合はスナップショットを使わないというのも選択肢の一つ……なのですが、スナップショットを使わないのは仮想環境の大きなメリットの一つを捨てることになりますから、ここまでやるくらいなら SSD へのリプレースを行うべきですね。

と、いろいろと項目を挙げてみました。全部のチューニングを施すことは難しいのですが、チューニングしても仮想マシンが遅い場合は、そもそもご利用中のハードウェアでは要件を満たさない可能性が高いので、ハードウェアの入れ替えを検討いただいたほうがよいでしょう。


Tuning VMware Workstation/Fusion environment to improve development enviroironment for Delphi/C++Builder/RADStudio

In “Developer camp 33rd in Osaka”, I got a question from some visitor, “It is not good performance when using RAD Studio on VMware.

Recently it may be a usual way to run develop environment on VirtualMachine. But VMware uses HostMachine resources as not too much occupy. If your HostMachine has enough resource , you may be got better performance with configuration tuning.

What is able to tuning?

Basicly, if your VMware has not good performance, it may be a two reason.

If your hostmachine has not enough CPU resource, it have to increase CPU cores or clocks. But it is difficult for notebook PC.

And in many case Disk I/O may be a main probrem for VirtualMachine performance.

So I’ll write how to improve Disk I/O in this document.

Attention: some part will be requires many memory resource.

Default VirtualMachine setting for VMware Workstaion/Player/Fusion uses memory resource as not too much occupy. but it means to use storage instead of memory. but it will be a reason of less performance. So if tuning to use more memory resource, it will be reduce Disk I/O.

Point of tuning.

Exclude antivirus scan target for VirtualMachine HDD image folder in HostMachine.

If you change antivirus configuration on HostMachine to avoid to scan VirtualMachine HDD image, it may be raise up performance.

Antivirus software will watch file reading and writing, and doing virus scan. If writing any file in VirtualMachine, For example, if make a new file in VirtualMachine, it has a two meaning as “Create file in VirtualMachine”, “Update VM HDD image in HostMachine”. In this case, if VirusScan will enabled both in VirtualMachine and HostMachine,
it may be waste DiskI/O and CPU resource.

So it may be better to exclude antivirus target for Virtualmachine HDD image folder.

Replace to SSD if using HDD. (it is not memory performance tuning)

If your main storage is HDD, it should be replace SSD.

For example, IOPS (I/O per Second) is a one of indicators of the performance for storage (HDD and SSD).
Common IOPS for Desktop HDD will be around 150. Many Desktop HDD rotation speed is 5400 – 7200 rpm. rpm is “Rotation per Minute”, and 7200 rpm is equals to 120 rotation per second. It means if all the disk access read full random, it can read 120 files per second. But common SSD has over 40000IOPS.

So SSD has 100 times greater IOPS performance than HDD. When doing compile, compiler will be access many source code, header file, library. IOPS performance is very important.

Modify VirutalMachine configutation file to change memory using.

If Your computer has a enough memory, you can modify VirtualMachine configutation. In this section, it requires to modify *.vmx file.

When edit *.vmx file, it must to do after shutdown VirtualMachine. DON’T EDIT WITH RUNNING OR SLEEPING. When running VirtualMachine, this file is updated by VirtualMachine. If edit this file when virtualmachine is running, any edited information is lost when virtualmachine is shutdown.

In VMware Knowledge base, 4 tuning parameters are shown as follows.

[crayon-6768140455d66549840567/]

This information is shown in below URL.
https://kb.vmware.com/selfservice/search.do?cmd=displayKC&docType=kc&docTypeID=DT_KB_1_1&externalId=1008885

And also below parameter may be effective. (This parameter is written on some webpage, but I cannot find original source in VMware website about this parameter…)

[crayon-6768140455d6a036012373/]

Raise up more memory to assign VirtualMachine

Is it may be less memory resource and causes memory swap? It have to raise up to assign more memory.

But if you have already tuning *.vmx file, memory usage requirement is already increased. so also you have to check HostMachine memory resource is enough or not.

Reduce parallel executing VirtualMachines.

It is a basic fact it becomes stricter to allocate resources on hostmachine, if many VirtualMachine is running.

If you are executing Linux VirtualMachine for some task, You can consider it will replace to “Bash on Ubuntu on Windows” or not. It is added at “Windows10 Anniversary Update”. Bash on Ubuntu on Windows is not VirtualMashine, so it requires less resource.

(If you are using Hyper-V, not VMware, you can choice “Docker for Windows” to configure Linux environment instead of “Bash on Ubuntu on Windows”)

Use preallocated and monolithic disk.

If using HDD, split disk may be affected by fragmentation. it may be better to make preallocated and monolithic disk for virtual machine. and also it is better to make it after defrag on HostMachine.

To avoid using snapshot.

Snapshot requires to read snapshot image and use update data after snapshot. So it has a impact to increase Disk I/O.

If you using HDD, it is better to avoid using snapshot. But is is bad choice. You have to choice to replace SSD.

モバイルバージョンを終了