VirtualBox速度チューニングや仮想化関連のGUI設定手引き

virtualbox-tuning-settings

ホストOSはWindows10、ゲストOSはワードプレスのVVVです。Virtualbox上のVVVもVCCWも遅くてデフォルトでは仕事にならない。VVVやVCCWが悪いわけではなく、ホストOSやVirtualBoxの設定と物理スペック次第だと思いたい、それで改善されて欲しい・・・。でも、プラグイン使い過ぎで、DBクエリが増えているだけの様な気もしています。そこはDebug barあたりで検証ですね。とりあえずVirtualBox Command Lineも使い、VirtualboxのGUIで出来る事を順番に見ていきます。

永続の2次開発環境までクラウド使うと毎月の固定費が超高い

世の中、何でもクラウドですが、2次開発環境までクラウド使うと毎月の固定費が超高い。クラウドは沈黙のITヤクザ何も言わずに金をとっていく。ボリューム層には、2次開発の環境維持費用まで予算計画を立てられる顧客は少ない。2次開発環境の維持費説明に理解を得る事も難しい(無料セミナーって大切だな)。だから仮想環境を自社で作る。それでも手間が増えるので人件費は必要、クラウドもしくは物理のコストを削減できるという事。

セキュリティインシデントを経験している経営者

2016年から2017年にかけて、セキュリティインシデントのマスコミニュースが多いという事も有り、可用性確保向けにクラウドでDR環境を冗長化して持つことについて、非IT系の零細中小企業でも少~しずつ提案しやすくなってきている。危機管理意識が高い、アンテナが高い(セキュリティインシデント経験済)経営者には、たとえ年配であっても会話が刺さる。2次開発向けの環境構築についても相談出来る良客。逃した(笑)。良客ということで盲目になり、初期価格設定を甘やかしすぎて早期に利益限界がきた。

ホストOSとゲストOSのスクリーン/ウィンドウの切替コントロール

ゲストOSのフルスクリーン化やウィンドウ操作をホストOSから切り替えて利用する場合、ゲストOSからの離脱コマンド(特に「右」+「Ctrl」)を絶対に紙にメモして、操作迷子になってもゲストOSからホストOSへの離脱コマンドがわかる状態で作業を行う事を強くお勧めします。ホストOSのコントロールに戻る場合、Windowsでは『矢印キー「右」+「Ctrl」』です。フルスクリーンからウインドウモードに切り替える場合は「Host(右Alt)+Fキー」です。フルスクリーン時に下部に隠れてしまうメニューバーにアクセスするには、「Host(右Alt)+Homeキー」です。フルスクリーン時に下部に隠れてしまうメニューバーは、マウスで引き上げる事も出来ます。

一般

VirtualBoxのGUI(VirtualBoxマネージャー)で仮想マシンノードの選択肢の真上で右クリック⇒『設定(S)』に進み、小ウィンドウで仮想マシンごとに様々な設定を行う事ができます。『高度(A)』タブに進むと、クリップボードの共有やドラッグ&ドロップの設定が出てきます。

vagrant up時の注意

vagrant upの時、Virtualboxで仮想マシンノードの選択肢の真上で右クリック⇒『設定(S)』の小ウィンドウを開きっぱなしだとコケる。設定の小ウィンドウはvagrant upする前に必ず閉じておく必要が有る。VirtualBoxのGUIが非同期じゃないほうでvagrant upと繋がっているからじゃなかろうか。尚、vagrant upコマンドは後述の必須vagrantプラグインを入れた後に行う事を強く推奨します。

システム

マザーボード(M)

メインメモリー(M)を4MBから8192MBまで調整出来ます。20個以上のプラグインを使ってDBも100MB~500MB超えている様なワードプレスを動かす事を考えると4GBくらいは欲しい。VirtualBoxでは、ホストOSと複数のゲストOSでメモリバルーニングでメモリは共有されるので、ゲストかホストで空きメモリがある限り、ハードディスクへのスワップは起きないと考えられます。VirtualboxのGUIで設定するメモリだけでなく、Vagrantfile側のメモリを4096などに変えてください。Vagrantfile側の数字が優先されます。Windowsであれば『Ctrl+F』で『1024』や『memory』などを検索して書き換えてください。

ホストOSのメモリが少ない場合はどうしようもないので、16GB、32GBなど、ある程度、物理メモリを増やしておくことも大切。いざ、スワップを考えるとSSDなども用意しておくとベストかも。頑張ればメルカリで安く手に入る。ただ、ホストOSのCPUがボトルネックとなる場合も考えられ、さらに元をたどるとマザーボードに起因する拡張性、電源、ファンなど根深くて、新マシン購入以外にどうしようもない問題が出てくることもある。ホストマシンについては、よく調べてマザーボードレベルで拡張性の高いものを選ぶといいです。

チップセット

CPUをヒトの頭脳とすると、チップセットは各種の機能を動かす手足の様な位置づけで、デフォルトでは『Legacy』となっており、『PⅡX3』か『ICH9』を選択できる。『PⅡX3』もレガシーらしく、新しいものを選ぶ意味では『ICH9』しか選択肢がないです。

EFI(Extensible Firmware Interface)を有効化

OSとファームウェアのインターフェース仕様。UEFI(Unified Extensible Firmware Interface)とも言われる。Firmware/HardwareとOSloaderの間で動くらしい。当たり前っぽい。有効にしとくか。

プロセッサー数

CPUの数を1~4まで変えられる。使用するコア数。ホストマシンが搭載しているコア数以上に設定可能ですが、当然ながらパフォーマンス悪化の可能性もある。ちなみにGPUもプロセッサ。数量変更する際、仮想マシンはOFFにしておく必要が有る。BIOSのIntel Virtualization Technology(仮想化支援技術 : 通称 Intel VT)がDisabledの場合、数を増やせない事があり、ホストOSと密接に関係している。

PAE/NXを有効化

PAEは Physical Address Extension(物理アドレス拡張)で、32ビットCPUで4Gバイトを超えるメモリーを扱うための機能。NXはNo-eXecute page protection。NXビットでセキュリティを強化する為に一応チェック(らしい)。必要なさそう。

アクセラレーション(L)における準仮想化インターフェイス(P)

BIOSのVT-x/AMD-Vハードウェアアクセレーション(仮想化支援機能)はおそらく問題無い。準仮想化は、仮想環境で動かすことを目的に、ゲストOSの一部を修正してから利用する方式。VirtualBox 5.0の設定では、ゲストOSがWindows系なら「Hyper-V」、Linux系なら「KVM」、OS Xなら「Minimal」を選ぶことがお決まりの様子。Ubuntu「Legacy」とUbuntu「KVM」で比較しても残念なことに大した違いは感じられない。

ディスプレイ

スクリーン(S)のビデオメモリー(M)について。割り当てを増やし(デフォルト12MBから128MB)、「3Dアクセラレーションを有効化(3)」を行う、最後にゲストOSのubuntuへ次のコマンドを行う。「3Dアクセラレーションを有効化(3)」はやらなくてもいい様な気がする。

sudo bash -c 'echo vboxvideo >> /etc/modules'

ディスプレイ数について、バーチャルモニターの数の事でVirtualBoxは最大で8ついける。

ストレージ

光学ドライブやハードディスクの追加が出来る。ストレージの割当て、新規ストレージコントローラの追加も可能。ubuntuを使ってい容量が不足する問題に直面する人が多い様子・・・。容量追加はやや面倒でリスキーな作業なのでクローンを作ってから行う事を推奨します。ホストマシンHDDの健康チェックはCrystalDiskInfoなどを使います。

vagrant初期設定時からインストールしておくべき必須vagrantプラグイン

  • vagrant-hostsupdater
  • vagrant-share
  • vagrant-triggers
  • vagrant-vbguest

VVVでこれらのどれかが欠けた状態だと、vagrant ssh後にプロンプトが表示されない問題が起きた(プロヴィジョニング時のエラーかもしれないけど・・・)。

※vagrant upの後にVirtualBox Command Lineのメニューバーで、「仮想マシン」⇒「セッション情報」⇒「ランタイム情報(R)」⇒「ランタイム属性」⇒「Guest Additions」でGuest Additionsバージョン確認が出来ます。Guest Additionsがインストールされていない場合は「未検出」と表示されるようです。

ネットワーク

ホストOSやゲストOSなどのネットワークに対するアダプターの割り当て種類(モード)を理解しておく必要が有る。がっつり見ていく場合、NetAdapter RepairやWiresharkを使って調査などもある様だ。

NAT(Network Address Translation)

デフォルトで設定されているNAT(Network Address Translation)は、ホストOSが使っているネットワークとは別でVitualBoxの内部に用意されたネットワークがゲストOSのネットワークとして割り当てられる。VirtualBoxがホストOSとゲストOSの間に立ち、ルーターの役割を果たす。ポートフォワーディングの設定ができる。

ホストオンリーアダプター

ホストオンリーアダプターは、ゲストOSとホストOS間のみ通信ができる閉じたネットワーク、外部との通信はできない。ホストとゲスト間のVPNやAWS Direct ConnectやAzure Express Routeといった感じに近いと思われる。

仮想マシンイメージのデフォルトでは、上記の2つのネットワークアダプターが設定されている事が多い。最大4つまでネットワークアダプターを設定できる。

シリアルポート

COMポートとも言われる。Dサブコネクタ9ピンや25ピンなど、ヒロセ電機のHDシリーズと言ったところ。PCと周辺機器、あるいはPC同士を接続するためのシリアル通信インタフェース。データを逐次(順次)送り出す方式。RS-232C等の通信規格も絡んでくる。この記事を書いているPCのデイスプレイ接続は、未だにDサブ9芯(笑)。映像系の通信が関連しやすそう。昔ながら安定のベストセラー9芯と言えよう。VirtualBoxの場合は仮想シリアルポートやホストOS側のポートなどで、ポートの設置やポートの番号決めなど、なかなかややこしい。シリアルポートの出番は、物理環境と仮想環境でネットワークを作るとか、仮想環境に対してレアな使い方をする場合に限られると思われる。

USB

ゲストOSにUSB接続でデバイス認識させたい、デバイスマウントしたい場合など。仮想マシンでプリンタ接続などもある。普通に業務で使うPCを仮想化で立ち上げている場合、USB接続したい機器は多い。VirtualBoxにExtension Packをインストールしたり、VirtualBoxを起動する際の作業のユーザーをvboxuserグループに入れたり、USBポートを専有するOSを変更したり、VirtualBoxの起動/終了をしたり、ゲストOSの仮想マシンの起動/終了をしたり、USB機器を抜き差ししたりします。抜き差しのタイミングがかなり重要らしく、ハマる様です。USBメモリからOSブートも出来るらしい。

共有フォルダー

ホストOSとゲストOSでフォルダーを共有する。ちなみに、vagrant ssh後、vagrantフォルダが実は既にデフォルトで共有されています。ゲストOSのvagrantフォルダにドキュメントルートのシンボリックリンクを張るのもいいと思います。他にもホストOSとゲストOSであなた好みの設定で共有する方法もある。vagrantのプラグインにも似たような機能のやつがあった気がする・・・。

ユーザーインターフェイス

仮想マシン・ウィンドウのメニューを設定する。VM VirtualBox Guest Additionsを入れてから、フルスクリーン表示などの設定が出来る。

スナップショット

その時点の仮想マシンのイメージを作る。復元する時には過去の時点のもの。

クローン

スナップショットや仮想マシンからクローンして仮想マシンを立ち上げる。オリジナルに対するコピー。

  • すべてをクローン⇒設定ファイルからディスクドライブファイルまで全てをコピー。
  • リンクしたクローン⇒クローン元の現在のディスクドライブファイルを基にして、その差分のみでクローン先 (コピー先) のディスクドライブファイルを構成。

ホストOSのウィルス対策ソフト

仮想マシンの中までウイルススキャンされると遅くなる可能性がある。仮想マシンディレクトリをウイルス対策ソフトの除外リストに加える設定も試したが効果無し。Windows Defenderという話もあるが、さすがにOFFにはできない。AdwCleanerやMalwareBytes Anti-Malware (MBAM)を使うというのもあるが、おそらく違う、的がずれている。

ホストOSマシンのデフラグ、HDD回転数

デフラグは週1でwindowsが勝手にやってくれていた。手動でも数時間できちんとデフラグ終わる。HDDは7200rpm。たぶん問題無い。

まだ、めちゃくちゃ遅い

本格的にボトルネック調査するしかない。マジで仕事が進まねぇ。F〇ck!!どうやら仮想マシンのプロビジョニング時にディスクのサイズを30GBとかにする方法があるらしい。でも、一度、プロビジョニングを行った仮想マシンは、スナップショットに形を一旦変えてディスクを大きくして立ち上げる必要が有る。phpソースコードとかMySQLスロークエリログとかの検証か・・・。CPU使用率、メモリ不足、ディスクI/O、TCPコネクション数、ネットワークI/O、NFS(Network File System)、などのボトルネック調査か・・・。いまどき、こんなことする人、いるのだろうか?と、収益性の遠さから思ってしまいましたが、Go back to Basicsです。アプリケーションを最後に支えるのは人間なんだと改めて反省させられました。時間をみつけてトライしたい、予算と時間の問題って難しい。そろそろ選択と集中しないと。

他、VirtualBoxではなく、VMware、Hyper-V(Windows10 home 64bitは不可Windows10 ProならHyper-V使える)、Xenなどを使えという話もあります。

海外の英語のVirtualboxのGUIチューニング記事も読んで、総なめして書きました(つもり・・・)

この記事見て頂いている方、うちのブログの割にちょっとだけ多いです(笑)。VCCWやVVVなどWordpress系の方による閲覧が多いのでしょうか?フレームワークや他のCMS開発の方もいるのでしょうか?ブログを通してエンジニアの方と対話できるのはとても嬉しいです。Wordpressに関しては、Windows10 homeのVirtualboxでは、ちょっとヘビーな開発をしようとすると、SQLクエリなどが多かったり、プラグインのphpコード品質などの影響で、パフォーマンスを出しにくくなってきているのかもしれませんね、知らんけど(笑)。プラグインのパフォーマンスなど品質見極めの重要性が増しますね。一般顧客から理解を得にくい開発コストが上がるので、開発受託脱却して内製開発オンリーで勝負だ!という流れがますます正しい気がしてきました。うちはローカルの仮想化環境でWordpress開発はやらなくなりました。開発環境の費用もきちんと顧客に請求します。KUSANAGIは偉大ですね。おそらく、Go Back to Basicsに基づいて細かいボトルネック調査もしながら、ディストリビューション開発、マーケティングを行って来られたのでしょう。ごいす~です。

他人があまり手を出さないけど、実はニーズが高く難しい分野で攻める!みたいな感じですね。非常に勉強になりました。

コメントを残す