こんにちは。NUTMEGでNUTMEGクラウドの開発・運用を行っている大浦です。
今回は2021年3月に参加させていただいた、サイバーエージェントさんの「3days インフラエンジニア向け クラウド技術体験型インターンシップ ~仮想マシン編~」についてお話させていただきます!
クラウド技術体験型インターンシップは、インフラエンジニアを志望する学生向けに、座学とハンズオンを通してクラウドを構成する要素技術について体験できるインターンシップです。
インターンでは、まず、CPUやメモリの仮想化についての座学を行い、その後QEMU/KVM
、libvirt
、virtio
の技術を用いて仮想マシンを構成するハンズオンを行いました。
ハンズオンでは現場のエンジニアの方がメンターについてくださりました!
当日はオンラインでしたが、Gatherというゲーム感覚でミーティングを行えるツールを使用していたため、わからないことを聞きやすい環境が整っていました!
私は大学の学祭実行委員会に所属しており、学祭を円滑に進めるためのアプリケーション開発や、そのインフラ運用を行うNUTMEGというチームで活動をしています。
特に私はインフラ担当で、WEBアプリケーション用にサーバーを構築・運用しています。NUTMEGではVMの運用経験がなく、WEBアプリの数だけサーバーを用意し手間やお金がかかっていました。
インターンを通して、VMの構築・運用技術を学び、NUTMEGのインフラをより良いものにしたいと言う思いから本インターンへの参加を決意しました。
座学ではCPUとメモリの仮想化について学びました。仮想化支援機構を使った仮想化とそうでない仮想化の仕組みを知ることで、パフォーマンスに差が出る理由が学べました!
仮想化支援機構を使わず、ソフトウェア的にCPUを仮想化するためには、CPUをエミュレートする必要がありパフォーマンスがかなり悪くなります。
仮想化支援機構には、VMX non-Root Mode
(ゲストマシンモード)があり,仮想マシンが非特権センシティブ命令を実行しようとすると VMX non-Root Mode
から VMX Root Mode
(ハイパーバイザモード) へ切り替えて実行します。
そのため,ゲストOSはハイパーバイザのレイヤを意識せず,より実機に近い性能を得られます。
仮想マシンは仮想メモリアドレスを物理メモリアドレスとして認識するためアドレスの仲介が必要です。
仮想化支援を使わない方法では、シャドーページテーブルを用います。ホストカーネルでページテーブルを複製することで、ゲストOSが仮想メモリにアクセスするとき,パイパーバイザーが物理メモリのアドレスを参照してCPUに伝えます。この方式では、同期回数が多くパフォーマンスが悪いのが欠点です。
仮想化支援を使う方法では、EPT等のメモリ仮想化をCPUで支援する機能を用います。これにより、ゲストOSから仮想メモリへアクセスしたとき,EPTテーブルを参照し,ゲスト物理アドレスから物理メモリアドレスへ変換を行うことができ、効率がよくパフォーマンスが高くなります。
インターン課題ではlibvert
、virtio
を使用した、仮想マシン作成を行いました!
普段は絶対にさわれないプライベートクラウドのテスト環境を使って仮想マシン作成を行いました。
課題は3人チームで行いました!分からないことがあれば相談でき、それでもわからないときはメンターに聞けたので終始安心でした!
成果発表では、3日間で学んだことをついて発表を行いました!
座学で学んだ、仮想化支援機構を使ったものと使わなかったもののパフォーマンスを比較するスライド発表を行い、ありがたいことに最優秀賞をいただくことができました!
こちらは頂いた景品
3日間という短い期間ですが、メンター、運営の方々ありがとうございました。
メンターの方々には、技術的な質問以外にも、趣味の話や、これからやっておいたほうがいいこと、サイバーエージェントのいいところ悪いところなど、インターンではないと聞くことのできないことを色々とお聞き出来ました。
本当にありがとうございます!
これから、このインターンで学んだ技術をNUTMEGで応用しより良いインフラを構築・運用していきたいと思います!