Android studioでAVDエミュレータを動かす。KVMのCPU仮想化はBIOS設定が必要だった!

2019年7月2日プログラミング

 

 

こんにちは!しずかなかずしです。

 

本日は唐突に、コンピュータの仮想化技術のKVM (Kernel-based virtual machine)のお話です。

 

仮想化を使いたいケースは色々あると思います。

  • 複数のサーバーシステムを物理的に一台のマシンで運用したい
  • 新しいLinuxのディストリビューションを手軽に試したい
  • 普段はLinuxを使ってるけどWindowsも同時に使いたい

などなど。

 

しかし、今回私がKVMを使い始めたのは別の理由でした。

それが、タイトルにある、Android studioのAVDのスマホのエミュレータです。

Android studioでスマホアプリの開発

ちょっとした理由で、スマホアプリの開発を始めたくなりました。

 

そこで取り出したのは、Android studioという開発環境です。

こちらからダウンロード可能でタダでスマホアプリの開発を始められます。

 

私のパソコンはLinux。Ubuntu 18.04.1 LTSが動いています。これにAndroid studioをセットアップ。

Androidのアプリを開発した事が過去にもありました。現在2019年7月。私がアプリ開発をやっていたのは、多分5,6年以上も前のことだと思います。その当時からすると開発環境のセットアップがかなり楽になった物だと感じます。

 

せっかくなのでエミュレータの設定

もちろん自分のスマホを使ってアプリ開発も可能ですが、エミュレータを使えばパソコンだけで開発ができて便利です。

 

エミュレータとはパソコンの中で、スマホを仮想的に動かすものです。従って、物理的にスマホを持っていなくてもOK。パソコンの中のスマホ(エミュレータ)を使えば大抵の事はできてしまいます。

 

普段使っているスマホの中身が開発で汚れる(!)ような気がしていやだなー、なって心配もありません。

 

という訳で、Android studioで、エミュレータの起動を試みました。

 

ただし、Ubuntuで、Android studioとエミュレータを使うには、色々おまじないが必要のようなのです。

 

ここで登場!仮想化技術KVM

そこで登場したのが仮想化技術のKVMです。

 

最近の仮想化技術は、初めに書いたケース以外に、このようなスマホの開発環境にも使われているのですね。ちょっとした感動を覚えつつ、セットアップをします。

 

幸いなことに、UbuntuのKVMのセットアップ方法は、丁寧な手順書が用意されいます↓(英語)

 

 

必要なソフトウェア・パッケージはapt-getなど、通常のインストール作業です。

しかし、注意しなければいけないのは、BIOSです。

BIOSでCPU(Intel VT-x)の設定

KVMは、CPUの仮想化技術を使います。それが、Intel VT-xです。

 

私の使っているパソコンのCPUはインテルですが、AMDのCPUでも同じような仕組みがあるそうです。

そして、Intel VT-xを有効にする為にはBIOSで有効化する必要があります。場合によってはデフォルトで有効の場合もあるようですが、少なくとも私のマシンでは必要でした。

 

と、言う訳で、BIOSの設定です。

私のPCは数年前に自作したものでマザーボードはASUSのB85M-Eというモデルです。

 

 

CPUはIntel製で、以下のようなシロモノです(cat /proc/cpuinfoの一部)。

 

processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 60
model name	: Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
stepping	: 3
microcode	: 0x27
cpu MHz		: 1177.312
cache size	: 8192 KB
physical id	: 0
siblings	: 8
core id		: 0
cpu cores	: 4
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds
bogomips	: 7183.48
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

 

 

 

さて、BIOSに入るには、パソコンの電源を入れて、すかさずF2キーを押します。

ASUSのBIOS設定画面はマウスも使えてかなりいい感じの画面になっています。

しかしながら、仮想化の設定は、Advanced modeで行う必要があります。

 

Intel VT-x BIOS設定Advanced modeを選ぼう!
Intel VT-x BIOS設定: Advanced modeを選ぼう!

Advanced mode の詳細ページの中に、

Intel(R) Virtualization Technology

という設定があるので、「有効」に設定。

Intel VT-x 仮想化のBIOS設定はこちらから
Intel VT-x 仮想化のBIOS設定はこちらから

再起動すると、KVMが使えるようになります。

 

Android スマホのエミュレータが起動!

KVMの設定がうまく行くと、Android studioでHello worldアプリがエミュレータで動きます。

 

エミュレータの種類もデフォルトでいくつか選べます。せっかくなので、自分が持っているGoogleスマホ、Pixel3のエミュレータを選んで見ました。

Ubuntu-Android-Studio-Emulator-AVD-Pixel3
Ubuntu 18.04.1 LTSでPixel3のエミュレータを起動したところ(感動!)

一昔前のエミュレータは何かもっさりしていて使い物にならない印象でした。でも、KVMのCPUの仮想化技術のおかげか、思ったよりスムーズに動きます。Chromeブラウザもエミュレータ上で実用的に使えそうです。

 

それにしても、CPUの仮想化とはいえ、パソコンのCPUはIntelで、AndroidスマホはARM CPU。アーキテクチャが異なります。

 

なにやらもうひと工夫入ってそうな感じです。どなたか、どうやって動いてるのか、教えて下さい!