開発用仮想マシンはオンプレミスで

開発:クラウドの世紀だなんて思ってました。開発用の環境もクラウドのVMにしちゃおうかって。でもこのHyper/VでUbuntuやってみて、今思えば、あれは何の世迷いごとだったろうとつくづく思いますね。

社長:まあ、五年後どうかはわからないですけど。時期尚早でした。

基盤:それで、FirefoxとThunderbirdの77をサラからビルドしてるんですが、面白いので並列にやってます。コアは6つのうちの5つをあげました。ホストの負荷のCPU100%ベタが気持ちいいですね。能力を余す事なく使い切っている。なのに、ホストもゲストも操作にサクサク反応するし、RemoteDesktopも何の問題も無いです。スケジューリング技術のたまものですかね。

開発:「オンプレミス」とかふざけんなって感じですよ。当たり前だろうって。あと、リソースをクラウドとローカルに置いて強調させるっていう解も考えて来ましたが、まあ用途は狭いですね。ローカルなリソース間でマイクロ秒で完璧セキュアに交信出来るのに比べて、お話にならない。何のままごとだったろうって。やはりローカリティ命です。神様が決めた光の速度は30万km/s、30 * 10000 * 1000 m/s、300Mm/s、つまり1マイクロ秒に300m、1ミリ秒に300kmしか進まないのです。計算間違ってませんよね。これは双方向の通信にとっては致命的です。

基盤:クラウドの仮想マシンのコスト削減にはずいぶん労力を投入してしまいましたが。ディスクをつけたり外したりするのにずいぶん苦労しました。

社長:実際、クラウドで運用するのが良いサービスはありますから。あの苦労は無駄ではなかったです。何をどこにどう配置するのが良いか、実体験に基づく判断基準ができたと思います。

開発:そもそもクラウドも仮想マシン技術の勝利ですよね。以前長くVMwareを使ってましたが、少なくとも当時のVMwareに比べてこのHyper/Vはもう全くハイパーです。まあ最近のVMwareがどう進化しているのかは知らないですけど。

基盤:Hyper/Vの場合OSと統合されてるので、VMware的なお手軽感は無いですが、一回設定するだけの手間です。そしてその分、OSの能力をフルに活用できてますね。macOS用Hyper/Vとか出さないんですかね?箱入りなのかな。

社長:ちょっとこれ、気になる記事なんですが。2020年1月3日付け。なんですかねこれ。「How to Use Hyper-V Virtualization on Mac Computers」ttps://www.parallels.com/blogs/hyper-v-mac/

開発:Parallels!超ナツカシス!私最初に使ったVMがそれでした。Macで動くバカチョンVM。あれ、結構好きでした。その後VMwareに乗り換えましたが。まだあったんですね。自社サイトで言いたい事吹いてるパターンですか?

基盤:¥9,818/年、と出てますね。Free Trialあり。「Use Mac to Run Any Windows Program for Your Business」。あ、日本語ページあり。「Mac を使用して業務向けのあらゆる Windows プログラムを実行できます」。

社長:気になる気になる。すごーく気になる。

経理:10%引きのクーポンがあるみたいですよ。でも先月までかな?

開発:Hyper/V+RemoteDesktopが動くんで、当社では今週、Win10Pro入りレノボ君の人気が沸騰したわけですが、実は全部Macでやれるという話ですかね。まあコストの問題ですが。でも、全部Macにできるなら多少余計に費用がかかっても許容ですかね。

社長:気分の良さが最重要です。

基盤:そういえばレノボ君、ただいま黙々とビルドしております。

開発:だいぶ進みましたね。ビルド完了まであと30分くらいかな?

基盤:今月下旬には8コアで16GBのiMacが来ます。ちょうど良いタイミングかもですね。

社長:そういえばパックンの相方のマックンて、私とおなじ出身県なんです。てか今Wikiでみたら同じ市ですね(!)。今はどうしてるんでしょう。思えばパックンのピンしかみた記憶ないけど。県の観光特使だそうですが。

開発:夢でキッスキッスキッスってやつですか。

基盤:いや、それはかなり違いますね。むしろパペマペのほうが近い。おっと、ハイパークンの動きに変化が。並列性が落ちてきたということは、終段に向かってますね。

開発:あれ、これ並列にやっていると、最終段の巨大rustcとldがぶつかって死んだりしないかな?

基盤:あ。。。まあでも開始時刻が数分ずれてますから、助かるかも。それにしてもldとかが何で4GBもメモリ食うんですかね。まあmmapしてるんでしょうけど。複数のオブジェクトに並列にランダムアクセスなんて、しないんじゃないかと思うんですが。あ、両者単一rustプロセスフェーズに入りました。ドキドキ。

開発:スワップを8GBに増やしといたので助かってますね。4GBのママだったら既に死んでます。

基盤:やばい、このまま同時に成長すると1GBくらい足りなくなります!control-Z!

基盤:だめだ足りなそう。止める決断が遅かた。。systemctl stop mysqlなんとかって何だっけ。。ああー 。 。 。

開発:死にましたね。

基盤:スワップ10GBにしときましょうかね。しゃーない。fg。make。

開発:またぶつかるんでは?

基盤:いや、こっちはCPU時間7分過ぎまで来てるんでもうすぐ終わるはずですから。。。 8分。。9分。。終わらない。そういやこれってシステム時間も含んでるのかな。そりゃパラでやれば長くなる。再びメモリ枯渇不可避かな。止めときゃよかった。

開発:あ、でもRESが縮み始めましたね。助かりそう。

基盤:助かった!

開発:と思ったら今度はldとrustcの鬩ぎ合いですね。

基盤:だから何でldのくせにそんなにメモリを食うんだよお前は!ファイルcloseし忘れてんのか?

開発:残り260MB。

基盤:通過しました。

開発:というわけで後から始めたThunderbird号が先にゴールインしましたね。

基盤:Firefox号も無事ゴールインです。

開発:スワップをあと2メガ増やせばパラでも行けそうですね。

基盤:そうですね。まあ実際は、逐次にやっても構わないですが。

開発:それでは、実行してみましょうか。わくわく。

基盤:まずは Thunderbird号より発進。mach run !

開発:あら?Firefoxが立ち上がりましたね。

基盤:ありゃ、mozconfigをコピーした時に、Thunderbird作成指示の行を変更するのを忘れてました。

開発:Firefoxを2つ並列にビルドしたという実験でした(笑)

基盤:終了時のメッセージが違うのが不思議なんですが・・・

社長:良いです良いです。それもまた貴重な経験。当社の資産です。

--
2020-0606 SatoxITS

公式Facebookはじめました

社長:我が社もいわゆる公式Facebookを持ちたいと思います。

開発:VMをzipするのに時間かかりそうですから、やっておきますか。

社長:特に認証用にFacebookのアカウントがあると便利ですよね。インスタに入る時とか。

基盤:facebook.comを開くといきなりSign Upと来ました。これ、社長の実名で良いですか?

社長:ええ、公式ですから。私≒会社です。

基盤:どうもこの、2回電子メールアドレスを入れさせられる流儀がしっくり来ないですね。。。Birthdayの選択肢、ずいぶん下のほうです(笑)GenderのCustomってなかなか良いですね。Sign Upぽちっと。

社長:あー、メール来ました。結構かかりますね。GmailをMac Mailで読んでるせいですかね?30秒くらい?Confirm Your Accountをポチッと。

社長:でもやっぱり、Mac Mail気持ち良いですね。さてそれでは問題のインスタに入って、検索して開く。そうそう、表示すると数秒でログイン求められちゃって、まともに読めないんですよ。では、Facebook でログイン。あれ?Sign upしろって、また。

基盤:Facebookでログインした状態からインスタにいったらどうですかね?

社長:いや、ブラウザ的にはFacebookにログイン状態なんですが・・・一旦ログアウトしてみますか。で再度ログイン・・・あれ?「Sorry, something went wrong.」だって。はて。あー、Facebookから来たメールのGet Startedリンクからは入れますね。このサイドバーのアイコンがクラシカルで味がありますね。友達を検索。ああファンクラブがあるんですね。本人のは無いのか。月末のモンダミンが今年の初戦なんだよね。

基盤:zip終わりました。

社長:そうですか、ではこっちははまたあとで。

--
2020-0606 SatoxITS

私どものスワップ不足でした orz...

開発:さてそれで、どのプロセスがメモリを食ってるかなんですが。

基盤:top。

基盤:まずは、Gnomeそのものですね(笑)

開発:そもそもプログラム開発環境なので、audio だの evolutionほにゃららとか全部いらないよね。

基盤:どうやって黙らせますかね。

開発:うーん、昔流なら /etc/rc とか /etc/init とか。今流だと systemctl とかみたいですね。ウェブインタフェースでチキチキできる webmin というのがあったみたいだけど、今は apt search しても出てこないね。とりあえずは、単に Gnome 立ち上がらせずにテキストコンソールにしちゃうのが簡単だとも思うけど。

基盤:でもこの、/etc/default/grub というの、どうも思ったようになりませんねー。。。

* * *

社長:どうなりました?

開発:ようやく通りました。

社長:何が問題だったんでしょう?

開発:まあ、貧乏性と無知、ですかね。

社長:およよ。

基盤:技術的には、Mozilla がビルドに使う rustc が非常にメモリ食いで、1プロセスで4GB以上食う、枯渇して死ぬ、という問題です。貧乏根性でVMに4GBしかあげてません。あとOSが1.5GBのswapfileを用意しています。ですので、全プロセスの使用メモリを足して5.5GBに収まらないと、メモリ枯渇でプロセスが死にます。デフォルトの環境で、立ち上げ直後のメモリ使用状況がこうでした。

基盤:この時点で既に、残り4GBちょっとしかありません。ということで、大盤振舞いに4GBばかりswapon してやって、こうなりました。

基盤:見かけ上はとってもお大尽になりまして、あとはもうスルスルと、だと思ったのですが、実は、rustc の最終章で残り1GBを切ってヒヤヒヤだったんです。

開発:それであらためてゼロからビルドして負荷状況を眺めてたんですが、とてもうまく並列化されてるなと思いました。このVMに3コアあげているのですが、それぞれ100%近く使い切っている時が結構あります。こんなのとか。

基盤:一方でVMホストの物理ディスクへのアクセスは1MB/秒以下が続いてますから、遅いHDDでも全然問題ないかなって感じです。コアを6つあげれば、ビルド時間が半分近くになるんじゃないかと。まあ、ゼロからビルドすることは滅多にないので、実際にそこを追求するかどうかは別ですが。一時的にでも多数コアをあげるのも良いですし、Hyper/Vでいろいろ遊べそうです。

開発:それで基本的には一気通貫だったんですが、実は、最終章の幕切れ寸前、92分地点の ld でまたもやディスクフルやってしまいましてアボート。それに ld も4GB近くメモリを食うので、その点でも危険人物でした。ということで、ディスクを空けて make。

基盤:で、これが修了証書です。タイムスタンプは make 再開からの経過時間です。

基盤:で、促された通り mach run。

えんたー! ↓

苦節2日間。Thunderbirdのビルド完了。

基盤:めでたし。

開発:昨日、Firefox の mach run で XPCOM ガー!って怒られたのは、メモリかディスクの不足で、必要なファイルの配置作業が不完全だったのでは無いかと思います。一通り終えたので、この環境で Firefox と Thunderbird のクリーンインストールをもう一度流しておこうと思います。

社長:いやいや、大変でしたね。ですが、このビルド作業のおかげで、最近の事情を色々学んだり、忘れてた技を思い出したりできたんだと思います。いやー、よかったよかった。

開発:そうですね。結果的には、ごく普通にリソースがある環境でなら、Firefox も Thunderbird も、tarball をもらってきて make 一発なのだ、ということがわかりました。なんだかほっとしますね。

--
2020-0606 SatoxITS