re:newalhttp://blog.flect.co.jp/cloud/からさらに引っ越しています2018-07-14クラウドインスタンスでAndroid仮想デバイスを「ハードウェア仮想化付きで」動かすみなさんこんにちは。エンジニアの佐藤です。今回はAndroid開発について書かせていただきたいと思います。Studioについてです。筆者は業務をしばしばVDI(仮想デスクトップ)環境で行なっています。理由はネットワークの速度とリソースの柔軟性です。VDIをホストするクラウドインスタンスは、ネットワークが速く、安定しています。オフィスの回線とは比較になりません。多量のデータを出し入れする仕事では、効率が上がります。CPU、メモリ、ストレージもその時の仕事に合わせて確保し、終わったら解放できますので、経済的です。スマホ開発は別でした。これらの開発ではエミュレータを実行する必要があり、エミュレータは通常、ハードウェア仮想化機能を利用します。(仮想化オフでも動きますが、とてつもなく遅い。クラウドインスタンスはそれ自体ハードウェア仮想化の中で動作しているため、ここでさらにハードウェア仮想化を利用するアプリを動かすことは、できなかったのです。いえ、あるにはあったのですが、以下のような特別な仕掛けが必要でした。Studioと、ローカル環境のエミュレータをつないだりしていました。http://blog.flect.co.jp/cloud/2017/04/androiddocker-c3b5.html昨年ついにインスタンスで仮想化機能が提供にしかし昨年、ついにクラウドインスタンスでもハードウェア仮想化が利用可能になりました。ありがたいことに、追加コストはかかりません。AWSについては情報がありませんが、AzureとGCPでサポートが表明されました。2017https://azure.microsoft.com/en-us/blog/nested-virtualization-in-azure/今回はこの機能を使って、GCPインスタンスで実行される仮想デスクトップ上でAndroid仮想デバイス(AVD)を「ハードウェア仮想化を使って」実行してみたいと思います。結論から言うと、この試みは目論見通りに成功しました。手順GCPインスタンスでハードウェア仮想化を有効にする手順は、以下の公式ドキュメントに書かれています。https://cloud.google.com/compute/docs/instances/enable-nested-virtualization-vm-instances手順はまず、ハードウェア仮想化を有効にした起動イメージを作成することから始まり、コマンドラインで実行する必要があります。この有効化、ライセンス付与という形態を取っていますが課金はありません。"https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"次にこの起動イメージでインスタンスをスタートします。このときプロセッサアーキテクチャにHaswellまたはSkylakeを指定します。nested-vm-imageこのインスタンスにSSHでログインして以下のコマンドを打って、「1」が返ることを確認します。/proc/cpuinfo1これでハードウェア仮想化が有効になったはずです。Studioを実行してみましょう。筆者は前出の「Docker開発環境」を使いました。ハードウェア仮想化とはつまりCPUの特別命令セットの使用のことですので、コンテナを特権モード(privileged=true)で動作させれば動作するのではないかと目論んでのことです。Studioを直接インストールするのではなく、インストール済みのコンテナをスタートさせました。Studioを起動したらAVD一覧を開き、AVDを追加します。images」の中から選択します。して作成したAVDを起動すると。アクセス権が無いと言われてしまったので、このデバイスのオーナーをAVDの実行ユーザーに変えました。/dev/kvm再度AVDを起動すると。動きました!この速度、確かにハードウェア仮想化の速さです。Worldを動かしてみると、ローカル環境同様に開発アプリがAVDにロードされました。使えるの?ようやく念願の「クラウド仮想デスクトップ+AVD」が実現したのですが、その性能はいかほどのものでしょうか。「耐えられないほどではないが、かなり遅い」というのが筆者の正直な印象です。ハードウェア仮想化を有効にしてもなお遅い理由として、仮想デスクトップなのでグラフィックのハードウェア支援が一切無いことが原因として考えられます。スマホアプリはアニメーションを多用し、通常は中間フレームはハードウェア支援で描画しますので、これを全部CPUでこなして、かつ、ネットワークで転送しなければならないというハンディが動作を遅くしていることは容易に想像できます。全てのアプリケーションが常時激しいアニメーションを行うわけではないと思いますので、これは使い方次第なのではないでしょうか。一つの問題として、AVDが多量のリソースを消費することがあります。図はAVDの実行中にtopコマンドでメモリ消費を調べたものですが、3GBを超えるメモリが使われています。今時のスマホの性能を考えると仕方がないのかもしれませんが、しかし、この点についてはクラウドですし、メモリもCPUも時間買いできますので、必要なだけ確保すれば良いと思います。ローカル環境と比べてメリットもあります。StudioもAVDも、初回インストール時のダウンロード容量がとにかく多く、オフィスや家庭の回線では非常に辛いものがあります。この点クラウドインスタンスのネットワークは高速でかつ安定しているので、なんでもサクサクダウンロードできてしまいます。スタートアップまでの時間は、まちがいなくクラウドの方が速いでしょう。インストール済みコンテナやイメージを素早く展開できるという利点もあります。今回の知見は、機会があればぜひ活用したいと思います。最後までお読みいただきありがとうございました。〜黄金の風〜こんにちは。Cariot事業部の遠藤です。18コンテナイメージにmanページがインストールされなくて困ったという話エンジニアの佐藤です。GitHubで複数コンテナを利用したビルドを試し...こんにちは、Cariot事業部の遠藤です。Salesforceブログに続き...2017-06-01de:code2017に行ってきました!〜Day2〜こんにちは、なかやまです。専門知識に合格しました月別アーカイブはてなブログをはじめよう!flect_techさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。