記念写真

開発:それではさっそく、なんかいじってみますか!

社長:ちょっとその前に記念写真を撮っておきましょう。我が社のMonzillo計画最初の一歩の手前です。ビルドは通ってますね?

基盤:一応、browser/app/nsBrowserAPp.cpp のmainの先頭に当市のシンボルキャラクタAAを入れました。

広報:ロゴはまだ考え中で・・・

社長:よいですよいです。こういう時はためらわずに。

基盤:ではいきます。rustc さんもOKかな。ではハイ、ヒール。パシャ。

Mac > RemoteDesktop > Windows > Hyper/V > Ubuntu > Monzillo

基盤:ところでこれは本当にMonzilloていう名前にするんですか?

社長:社内開発コードですからノリで。私の辞書にも登録っと。あ、でも一応ドメイン名とっとこうかな。monzillo.work 1円也と。プチ。

経理:社長、.inc にチェック入ってますよ。

社長:ギョ。なぜだ・・・プツ。 指差し確認、Go!

経理:当社70〜72番目のドメイン名となりました。自動更新お断りも忘れずにしときます。ペチっと。

基盤:これ全部他社に移管するんですか?XSOの嫌がらせ半端ないですが。

社長:来年も継続する分は移管して、移管先で更新します。でも生き残るのは10件くらいかなぁ・・・

--
2020-0607 SatoxITS

Monzilloブラウザの開発

社長:あっしニャー関わり合いのねえこって。の木枯し紋次郎って上州生まれって設定なんですよね。

基盤:3分間待つのだぞ、ってやつですね。じっと我慢の子であった、ってコマーシャル覚えてます。

開発:さーて、なんかいじってみましょうかー!

基盤:それが今、復活したVMを圧縮してアーカイブ中でして。30MB/s くらいでしか進まないので、100GBのバックアップに数十分かかってしまうという。まあ、月曜にディスクが来たら、まずコピーだけして、圧縮・アーカイブは後ほどゆっくりで出来るんですが。

社長:思うに、ファイルの複製なんていちいちアプリ層まで上げないでOS内でやってくれれば、かなり高速化すると思うんですけどね。それとか、片方で読んでて片方で書き換えて使うなら、copy on write 的なカーネル機能を活かすとか。

社長:この波形、故郷の上州で見る山並みに似てます。三山的な。

開発:まあ、zipの処理に律速されてるんでしょうけど、CPUを使い切ってないのは、うまく読み書きとインターリーブされてないんですかね?

基盤:この場合ZIPは全6コアを並列に使ってやってるみたいですね。並列化してるってことは、結構でかい単位でブロック化してるってことですかね。書き込みの波形がキートップの並びのようで面白いです。もしや、マルチフェーズの圧縮でパイプラインとか?

開発:そうですか。確かに圧縮でサイズが1/4になるのは魅力なんだけど、圧縮って重いよね。ただの転送より10倍以上遅い。特に高速化したネットワーク上の転送なら、圧縮しないで送ったほうが速かったり。回線が100MB/sの能力があるのに、PCで必死に25MB/秒に圧縮するのって意味ないよね。

社長:それはちょうど今のプロッサ能力と広域ネットの幅とが鬩ぎ合ってる感じで、どっちにも転びますよね。ネットの性能をモニターして、臨機に最適な圧縮方法・圧縮率を選択できると良いのでしょうけど。可逆圧縮の場合、そういう事ってやられているんでしょうかね?

基盤:まあディスクにしても、4倍というのは同価格のSSDとHDDの容量差に近いですから。HDDには圧縮しないでアーカイブしても良い。すると回復も高速にできる。どうするかは他の条件次第ですね。

開発:まあHyper/Vのチェックポイントを使う場合の賢いアーカイブの方法というのもあるのでしょうね、きっと。

基盤:OneDriveで何かしないですかね。同じ会社の製品なんだし。全般的に、インテリジェントなドライブを目指している感じだし。

社長:まああそこは、横の連携無さそうですしねえ。ネットワークさえつながってなかったりして。

基盤:あ、アーカイブ終わりました。

開発:では、いよいよ。

--
2020-0607 SatoxITS

Hyper/V最高!

開発:それではさっそく、なんかいじってみますかね。

社長:当社で独自変更したのには、なんかFirefoxじゃないモジリを入れたいんだけど。Monzillo とか。ダメなのかな?

基盤:・・・悲しいお知らせです。さっき仮想マシンを一旦落としてチェックポイントを潰そうとした時に、なにかガチャガチャやったせいか、壊れました。

開発:あら。

基盤:残念ながら、HVはフールプルーフには出来てないようです。

開発:何が起きたんですか?

基盤:それがこの、チェックポイントをマージする時のディスクアクセスが面白くてですね。さっき潰した時にピークではSSDに300MB/秒を超えてアクセスしてました。なので、HDDにした時にこれを律速されないかというところに興味。

開発:なるほど。その時が一番高速アクセスしそうですね。普通の使い方では頻繁にやらないとは思うけど。差分ディスクというのはとても面白いと思う。今気になってるのは仮想ディスクのバックアップにかかる時間だけど、それも差分だけなら高速化できそうだし。rsyncと組ませたら完璧かな。まあお金持ちなら全部RAMでやっちゃたりするんでしょうけど。FeRAMのディスクとか無いのかな?

基盤:おっと今気づいたんですが、ホストのSSDが満杯になってます。このせいですかね?

基盤:で、さらに今みると、C:ドライブが完全に満杯になってました。

基盤:つまり、バックグラウンドで何かやってます。HVのメッセージに「ディスク結合が保留中です」とありますから、ひょっとしてディスクを空ければ再開してくれるの?と期待しました。それでいらないファイルを見つけてなんとか11GB空けまして(まだゴミがあったのでした)、Hyper/Vをつついてみたところ、なーんと、復活してしまったんです!

基盤:偶然ですが、その感動の一部始終が録画されてました↓

蘇るHyper/V仮想マシンの一部始終

基盤:結論。Hyper/Vはフールプルーフでもありました。

開発:うーむ。それはよかった。でも、ちょっと寡黙過ぎるよね。もうちょっと、何やっているのか主張してくれたほうが良いのではあるまいか?

社長:すばらしい。Hyper/V最高ですね。当社認定CC候補確定。

基盤:それはそうと、Macでラクラクスクリーンショット撮りまくってるとすぐにデスクトップがいっぱいになっちゃいますよね。

基盤:確かにスタックにすれば片付くんですが。

基盤:スタックをやめるとぶちまけるのって、バグでしょうか?

開発:まあデスクトップじゃないとこに撮ったのを入れてもらればいいっていう話ですけどね。

社長:昔から不思議なんですが、なぜ全てのフォルダがデスクトップと同じように表示するモードを持たないんでしょうね?逆についてもですけど。

--
2020-0607 SatoxITS

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

開発:クラウドの世紀だなんて思ってました。開発用の環境もクラウドの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

クリエイティブコモデティノミニー++

基盤:どっかで切らないと読みにくいですね。

社長:覚えていらっしゃるかもしれませんがー、当社はこの5月、IT社会をもっと気持ちよくする製品を絶賛しその普及を応援するITS more「CC認証制度」を設立し、担当するCC認証事業部を立ち上げたところです。認証の審査基準は、実物に触れるみなさんの主観、気分、気持ち良さ加減ですが、最近その認証候補に大きな動きがあり、みなさんと認識を共有したいと思います。詳細はCC認証事業担当にお願いします。

CC:はい。えー、現状における当社クリエイティブコモディティ認証候補につきましては、当社ブログにてこれまで絶賛されて来たグッズを中心としまして、みなさんの間で既に暗黙のコンセンサスが形成されていると思っています。特に、CC最高!賞候補としてMacOSおよびその関連するApp群は目にも明らかになっているところです。また、この数日も株がウナギ登りのWindows Pro誘引機能群。加えまして最近、急激に、特に社長方面からの強い支持を受けて、有力な候補としてお迎えするべきかと考えているグッズがあります。それは、Appleの「Note」です。

基盤:iCloudに金もらってるのかー?

経理:毎月250円払ってますから、一つでも良いところを見つけないと。

社長:なにしろサクッとかけてiPhoneでもMacでもイケイケで・・・

基盤:あれがバカチョンで使い易いのは確かですが、Appleの、Note である必要はありますかね。似たようなものはいくらでもありそうですけど。基本、iCloudがクソなのが気に障りますね。

開発:印刷・電子署名・保管というフローに載るのかですね。それ次第です。Mailとかカレンダーと連携するのかとか。SMS版Mailみたいな。

--
2020-0605 SatoxITS

Thunderbirdのコンパイル

社長:それで、Thunderbird にも手を突っ込みたいのですが。

開発:今コンパイル中です。41分経過。

基盤:Mozillla用にビルド環境は整備されたので、スルスル進んでますね。例の、.mozconfig に ac_add_options --disable-av1 というおまじないをいれただけです。これも何とかしたいですが。

開発:それにしてもこの、Mozillaファミリーのソースの配布っていったいどういうことになってるんですかね。https://archive.mozilla.org が大元かなと思っているのですが。もうこういう寂しさ満点の景色でして。

基盤: Mozillaのソースはここにアップロードするのやめちゃったみたいですね。1999年1月が最後のよう。

基盤:一方Thunderbirdのほうは、今も生きてるようです。この5月19日版があります。77ってのは最新Firefixと同じだから、Mozillaとしての共通番号なんですかね。

開発:それでこの、「thunderbird-77.0b3.source.tar.xz」というのを落としてきて、ビルドしてるところです。

基盤:ビルド60分経過。Firefoxと大差無いようですね。

社長:いったいその2つはどういう関係にあるんでしょうかね?私はこの2つをくっつけたいというか、密に連携させたいんですが。FirefoxのタブでThunderbirdが動いたら楽ちんですよね。あるいはThunderbirdにタブの概念を持ち込むとか。個別メールのタブとか。というか、タブじゃなくて、タグというメタファをブラウザに持ち込みたいなと思ってるんですが。

開発:少なくともThunderbirdの中で動画再生とかHTMLのレンダリングはやりたいですよね。

基盤:このMozillaの「Downloading Source Archive」なんですが、一応「Last modified: Mar 23, 2019, by MDN contributors」とはありますね。でも、例にあげてるのが「Firefox53.0.3」だったり。

開発:まあ、膨大な数の人が参加して開発してるんで、バージョン管理システム無しではできないと思いますが、アーカイブくらい tarball であげといてくれれば良いのにね。

基盤:てか、ページの冒頭にこう書いてあります。Firefox は Mercurial だけど、Thunderbird は別のやつみたいですね。

The Mozilla source code can be obtained either by downloading a source archive or by using a Mercurial (source control) client. If you are just starting out or you want to build a particular Mozilla product release, downloading a source archive is recommended. Otherwise, get the Mozilla Source Code using Mercurial (for Firefox) or Getting Comm-central Source Code (for Thunderbird, SeaMonkey and Firefox). If you want to browse the source instead of downloading it, read Viewing and searching Mozilla source code online.

基盤:あ、コンパイル、エラーで止まりました。ノースペース。

71:38.54 /usr/bin/ar: libjs_static.a: No space left on device
% df
/dev/sda1       61795116 58690284    236536 100% /

基盤:それでは Hyper/Vでディスクをもうちょいデカくして、Ubuntuでpartedしてresize2fs っと。

/dev/sda1       82437528 58694464  20035968  75% /

基盤:で再度 make。

開発:なんでしょう、この天国感。これはもう、もう一台レノボ機を導入してHyper/Vの編隊飛行させたいですねー。

基盤:ホストレノボのほうのSSDがもうマジ満杯です。月曜に4TBのHDDが来るのが待ち遠しいですね。

開発:それはそうと、まずこのページから読むべきだったのかもですね。なんせ最近は検索して直にGitHubとかにいっちゃって、公式サイト的な所も読まないですからねえ。

基盤:ただもう、MDNてオワコン感ハンパ無いですけどね。あれ、ビルドが固まっているような。。何が起きてるんでしょう?

% ps ax
5526 pts/1    Sl+    4:56 /usr/bin/rustc --crate-name style servo/components/style/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifa ...

開発:でかい塊ですね。もうちょっとこまめに進捗報告してくれると良いのですが。

基盤:あ、これが出た。とりあえずコメントアウトして進行・・・

 9:10.15 /home/ysato/thunderbird-77.0/config/makefiles/rust.mk:293: recipe for target 'force-cargo-library-build' failed
 9:10.15 make[5]: *** [force-cargo-library-build] Error 101
 9:10.17 /home/ysato/thunderbird-77.0/config/recurse.mk:74: recipe for target 'toolkit/library/rust/target' failed

基盤:おっと、これはThunderbirdでは必須のもののようですね。ビルドがエラーで終わってしまいます。

 0:03.64 FileNotFoundError: [Errno 2] No such file or directory: '/home/ysato/thunderbird-77.0/obj-x86_64-pc-linux-gnu/x86_64-unknown-linux-gnu/release/libgkrust.a'

基盤:てか、そもそも obj の下に dist/bin/firefox もできてるから、Thunderbirdの tarball のはずですが、Firefox をビルドしてたんですかね。

開発:そもそものエラーが Python系なので、Pythonをアップグレードしてみたらどうですかね?

基盤:やってみました・・・が、変わらないですね。そもそも、Firefoxが作られるけど、Thunderbirdはできてないってどういうことですかね?

開発:Thunderbirdのビルド… ああ、なんかそのものズバリのページがありました。

開発:Thunderbird作りたかったら mozconfig に一行そう書けと。デフォではFirefoxを作っちゃうみたいです。

基盤:すげーわかりやすいインストラクション(笑)。にししてもです、thunderbird-77.0b3.source.tar.xz ってのでビルドしてFirefoxができちゃうってのは不可解ですよねえ。

基盤:まあ、やり直しましょう。・・・んー、最後のところすげー重いですね。top で見ると・・・load average 4。めっちゃスワップしてます。

開発:あー、Thunderbirdのビルドのページの先頭にこう書いてありました。4ギガではギリかもですね。

基盤:そうですか。。メモリ4096MBに制約したのが敗着でしたね。なんせVMのRAMデカくなりすぎると立ち上がらないわ殺せないわになるので制約はしときたいです。では6GBにして。再起動。

開発:お、まともな負荷になりましたね。メモリ消費拡大が5GB寸前で止まってます。

基盤:ともかく、rust が物凄いメモリ食いなことはわかりました。

開発:Rustのmkでエラーが出てるのって、ひょっとしてこれが原因だったりしませんかね?もいっぺんゼロからbuildしてみませんか?

基盤:そうしましょう。そもそも101って終了コードが何かって事ですけどね。なんで一言、シンボリックに表示しないですかねえ。

基盤:あれ、また rust でこけてますね。なんなんでしょう?

開発:行き詰まったら物理層に立ち返るという・・・

基盤:そうですねえ。dmesg ・・・え?なんだコリア。

[   50.078044] hv_balloon: Max. dynamic memory size: 8192 MB
・・・
[ 1816.851449] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/,task=rustc,pid=7061,uid=1000
[ 1816.851499] Out of memory: Killed process 7061 (rustc) total-vm:6400040kB, anon-rss:5184104kB, file-rss:0kB, shmem-rss:0kB
[ 1817.053827] oom_reaper: reaped process 7061 (rustc), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

開発:out-of-memoryで死んでました。ちゃんちゃん。メモリを6GB食うプロセスって、なんかゴージャス 。

基盤:意味がわからないですねー。仮想メモリじゃなくて、物理メモリを要求してるってことでしょうか?

開発:仮想メモリとしても割り当て上限があるのかも。

基盤:fork してって親の使ってた遺産でふくれちゃったとかじゃ無いでしょうね?

dmesg「メモリが足りなくて死にました」
[   50.023718] hv_balloon: Max. dynamic memory size: 16384 MB
[   68.780991] TCP: eth0: Driver has suspect GRO implementation, TCP performance may be compromised.
[  108.020229] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.
[  221.017618] hv_balloon: Balloon request will be partially fulfilled. Not enough memory.
[  284.015897] hv_balloon: Balloon request will be partially fulfilled. Not enough memory.
[  314.016842] hv_balloon: Balloon request will be partially fulfilled. Not enough memory.
[  351.018234] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.
[  381.026580] hv_balloon: Balloon request will be partially fulfilled. Not enough memory.
[  393.523863] rustc invoked oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
[  393.523865] CPU: 2 PID: 1951 Comm: rustc Not tainted 5.3.0-53-generic #47~18.04.1-Ubuntu
[  393.523866] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090008  12/07/2018
[  393.523866] Call Trace:
[  393.523871]  dump_stack+0x6d/0x95
[  393.523873]  dump_header+0x4f/0x200
[  393.523874]  oom_kill_process+0xe6/0x120
[  393.523875]  out_of_memory+0x109/0x510
[  393.523877]  __alloc_pages_slowpath+0xad1/0xe10
[  393.523878]  __alloc_pages_nodemask+0x2cd/0x320
[  393.523880]  alloc_pages_current+0x6a/0xe0
[  393.523882]  __page_cache_alloc+0x6a/0xa0
[  393.523882]  pagecache_get_page+0x9c/0x2b0
[  393.523883]  filemap_fault+0x66d/0xb60
[  393.523885]  ? unlock_page_memcg+0x12/0x20
[  393.523886]  ? page_add_file_rmap+0x5e/0x150
[  393.523887]  ? filemap_map_pages+0x18f/0x380
[  393.523888]  ext4_filemap_fault+0x31/0x44
[  393.523890]  __do_fault+0x57/0x110
[  393.523891]  __handle_mm_fault+0xdd8/0x1260
[  393.523892]  handle_mm_fault+0xcb/0x210
[  393.523894]  __do_page_fault+0x2a1/0x4d0
[  393.523895]  do_page_fault+0x2c/0xe0
[  393.523897]  page_fault+0x34/0x40
[  393.523898] RIP: 0033:0x7f2982105130
[  393.523901] Code: Bad RIP value.
[  393.523902] RSP: 002b:00007f2937456e48 EFLAGS: 00010246
[  393.523903] RAX: 000000000000000f RBX: 00007f2898babe90 RCX: 00007f2806d5f740
[  393.523903] RDX: 0000000000000000 RSI: 00007f27b3cc28b8 RDI: 00007f2937456e78
[  393.523904] RBP: 0000000000000004 R08: 0000000000000010 R09: 00000000ffffffff
[  393.523904] R10: 00007f2806d5f750 R11: 0000000000000000 R12: 00007f2896ef4d40
[  393.523905] R13: 00007f2937456e80 R14: 00007f2898bac038 R15: 000000000000000f
[  393.523906] Mem-Info:
[  393.523908] active_anon:1121207 inactive_anon:186904 isolated_anon:0
                active_file:44 inactive_file:46 isolated_file:0
                unevictable:8 dirty:0 writeback:0 unstable:0
                slab_reclaimable:6473 slab_unreclaimable:9092
                mapped:1795 shmem:4091 pagetables:11466 bounce:0
                free:7661 free_pcp:975 free_cma:0
[  393.523910] Node 0 active_anon:4484828kB inactive_anon:747616kB active_file:176kB inactive_file:184kB unevictable:32kB isolated(anon):0kB isolated(file):0kB mapped:7180kB dirty:0kB writeback:0kB shmem:16364kB shmem_thp: 0kB shmem_pmdmapped: 0kB anon_thp: 0kB writeback_tmp:0kB unstable:0kB all_unreclaimable? yes
[  393.523910] Node 0 DMA free:15868kB min:24kB low:36kB high:48kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15908kB mlocked:0kB kernel_stack:0kB pagetables:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
[  393.523912] lowmem_reserve[]: 0 3863 5314 5314 5314
[  393.523913] Node 0 DMA32 free:12540kB min:6756kB low:10712kB high:14668kB active_anon:3140036kB inactive_anon:682116kB active_file:16kB inactive_file:268kB unevictable:32kB writepending:0kB present:4046784kB managed:3956652kB mlocked:32kB kernel_stack:5996kB pagetables:37488kB bounce:0kB free_pcp:2036kB local_pcp:248kB free_cma:0kB
[  393.523915] lowmem_reserve[]: 0 0 1450 1450 1450
[  393.523916] Node 0 Normal free:2236kB min:2536kB low:4020kB high:5504kB active_anon:1344792kB inactive_anon:65500kB active_file:204kB inactive_file:224kB unevictable:0kB writepending:0kB present:1572864kB managed:1485392kB mlocked:0kB kernel_stack:1732kB pagetables:8376kB bounce:0kB free_pcp:1864kB local_pcp:256kB free_cma:0kB
[  393.523917] lowmem_reserve[]: 0 0 0 0 0
[  393.523918] Node 0 DMA: 1*4kB (U) 1*8kB (U) 1*16kB (U) 1*32kB (U) 1*64kB (U) 1*128kB (U) 1*256kB (U) 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15868kB
[  393.523922] Node 0 DMA32: 159*4kB (UME) 148*8kB (UME) 118*16kB (UME) 42*32kB (UME) 7*64kB (UE) 1*128kB (M) 1*256kB (M) 1*512kB (M) 0*1024kB 3*2048kB (UM) 0*4096kB = 12540kB
[  393.523926] Node 0 Normal: 60*4kB (UE) 44*8kB (UME) 23*16kB (UME) 4*32kB (UME) 4*64kB (UM) 3*128kB (UM) 1*256kB (M) 1*512kB (M) 0*1024kB 0*2048kB 0*4096kB = 2496kB
[  393.523930] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=1048576kB
[  393.523930] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
[  393.523931] 4754 total pagecache pages
[  393.523932] 514 pages in swap cache
[  393.523933] Swap cache stats: add 446601, delete 446088, find 13695/33209
[  393.523933] Free swap  = 0kB
[  393.523933] Total swap = 1557568kB
[  393.523934] 1408910 pages RAM
[  393.523934] 0 pages HighMem/MovableOnly
[  393.523934] 44422 pages reserved
[  393.523935] 0 pages cma reserved
[  393.523935] 0 pages hwpoisoned
[  393.523935] Tasks state (memory values in pages):
[  393.523935] [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name
[  393.523938] [    311]     0   311    45640       89   385024      142             0 systemd-journal
[  393.523939] [    333]     0   333    11700       84   122880      380         -1000 systemd-udevd
[  393.523941] [    529] 62583   529    36528       14   188416      143             0 systemd-timesyn
[  393.523942] [    531]   101   531    17659       47   180224      123             0 systemd-resolve
[  393.523942] [    573]   102   573    65758       57   163840      225             0 rsyslogd
[  393.523944] [    588]     0   588    73983       33   212992      262             0 accounts-daemon
[  393.523944] [    591]     0   591   108582        0   352256      381             0 ModemManager
[  393.523945] [    592]   103   592    12881      304   139264      171          -900 dbus-daemon
[  393.523946] [    675]   116   675    11813       45   135168       61             0 avahi-daemon
[  393.523947] [    677]     0   677    11307        6   126976      129             0 wpa_supplicant
[  393.523948] [    681]     0   681   125853        1   348160      624             0 udisksd
[  393.523949] [    682]   116   682    11768        5   131072       81             0 avahi-daemon
[  393.523949] [    683]     0   683    17649       18   172032      178             0 systemd-logind
[  393.523950] [    685]     0   685    44666        1   237568     1983             0 networkd-dispat
[  393.523951] [    689]     0   689   160118      376   442368      371             0 NetworkManager
[  393.523952] [    691]     0   691   400753     3169   356352     2126          -900 snapd
[  393.523953] [    694]     0   694     9862       26   114688       46             0 cron
[  393.523954] [    695]     0   695    27178       29   233472      291             0 cupsd
[  393.523955] [    696]     0   696     1137        0    57344       41             0 acpid
[  393.523956] [    704]     0   704    27603       27   118784       56             0 irqbalance
[  393.523957] [    746]     0   746    75882        9   352256      373             0 cups-browsed
[  393.523957] [    747]     0   747    73229      100   229376      585             0 polkitd
[  393.523958] [    762]     0   762    48841        0   270336     2002             0 unattended-upgr
[  393.523959] [    795]     0   795    77302        1   225280      439             0 gdm3
[  393.523960] [    796]     0   796    18074        0   184320      188         -1000 sshd
[  393.523961] [    825]     0   825     6495        1    98304      315             0 dhclient
[  393.523962] [    827]     0   827    68223        1   299008      468             0 gdm-session-wor
[  393.523962] [    840]   123   840   339675        0   696320    41050             0 mysqld
[  393.523963] [    841]     0   841    94434       19   475136     1149             0 apache2
[  393.523964] [    855]   112   855   115546        1   389120      440             0 whoopsie
[  393.523965] [    856]   113   856    14235       26   143360       86             0 kerneloops
[  393.523966] [    861]   113   861    14235        6   139264      106             0 kerneloops
[  393.523967] [    879]  1000   879    19289      139   192512      268             0 systemd
[  393.523967] [    880]    33   880    95070      163   466944     1064             0 apache2
[  393.523968] [    881]    33   881    95018       27   462848     1148             0 apache2
[  393.523969] [    882]    33   882    95014        2   462848     1171             0 apache2
[  393.523970] [    883]    33   883    95014        2   462848     1171             0 apache2
[  393.523971] [    884]  1000   884    28548        0   258048      674             0 (sd-pam)
[  393.523971] [    885]    33   885    95014        2   462848     1171             0 apache2
[  393.523972] [    956]  1000   956    72356       95   180224      169             0 gnome-keyring-d
[  393.523973] [    971]  1000   971    53289        1   176128      169             0 gdm-x-session
[  393.523974] [    973]  1000   973   155168     6259   626688     3497             0 Xorg
[  393.523975] [   1019]  1000  1019    12842      251   147456      254             0 dbus-daemon
[  393.523975] [   1023]  1000  1023   140058      233   425984      433             0 gnome-session-b
[  393.523976] [   1149]  1000  1149     2825        9    61440       70             0 ssh-agent
[  393.523977] [   1154]  1000  1154    87322        1   180224      199             0 at-spi-bus-laun
[  393.523978] [   1159]  1000  1159    12481       66   131072       71             0 dbus-daemon
[  393.523979] [   1161]  1000  1161    55195       13   188416      178             0 at-spi2-registr
[  393.523979] [   1185]  1000  1185   932129    15439  1732608    26389             0 gnome-shell
[  393.523980] [   1191]     0  1191    78759        0   237568      289             0 upowerd
[  393.523981] [   1198]  1000  1198    73249      122   196608      119             0 gvfsd
[  393.523982] [   1203]  1000  1203   104028        0   172032      224             0 gvfsd-fuse
[  393.523983] [   1216]  1000  1216   299048        0   512000      570             0 pulseaudio
[  393.523983] [   1217]   109  1217    45876        0   122880       74             0 rtkit-daemon
[  393.523984] [   1230]  1000  1230    90599      238   200704      126             0 ibus-daemon
[  393.523985] [   1234]  1000  1234    70442        0   172032      200             0 ibus-dconf
[  393.523986] [   1236]  1000  1236    86252      166   417792      992             0 ibus-x11
[  393.523987] [   1240]  1000  1240    69895       29   163840      100             0 ibus-portal
[  393.523987] [   1246]  1000  1246    68146        0   159744      154             0 xdg-permission-
[  393.523988] [   1258]  1000  1258   172409        0   536576      869             0 gnome-shell-cal
[  393.523989] [   1262]  1000  1262   173312        2   741376     1086             0 evolution-sourc
[  393.523990] [   1270]  1000  1270   196193        2   700416     1513             0 goa-daemon
[  393.523991] [   1274]     0  1274    74474       36   204800      174             0 boltd
[  393.523991] [   1281]  1000  1281    76866      209   229376      184             0 gvfs-udisks2-vo
[  393.523992] [   1290]  1000  1290    76096        0   221184      298             0 goa-identity-se
[  393.523993] [   1295]  1000  1295    69216       48   172032       75             0 gvfs-mtp-volume
[  393.523994] [   1299]  1000  1299    94961       51   221184      165             0 gvfs-afc-volume
[  393.523994] [   1304]  1000  1304    72413       47   184320      106             0 gvfs-gphoto2-vo
[  393.523995] [   1308]  1000  1308    68767       56   159744       87             0 gvfs-goa-volume
[  393.523996] [   1312]     0  1312   114452      765   352256      347             0 packagekitd
[  393.523997] [   1313]  1000  1313   129549      314   503808      963             0 gsd-power
[  393.523998] [   1314]  1000  1314    87588        1   307200      360             0 gsd-print-notif
[  393.523998] [   1316]  1000  1316   106092        0   180224      195             0 gsd-rfkill
[  393.523999] [   1318]  1000  1318    69189        1   163840      164             0 gsd-screensaver
[  393.524000] [   1324]  1000  1324   113465      116   241664      267             0 gsd-sharing
[  393.524001] [   1331]  1000  1331    94738        1   233472      262             0 gsd-smartcard
[  393.524001] [   1335]  1000  1335   123889      168   454656     1140             0 gsd-xsettings
[  393.524002] [   1339]  1000  1339    83470        0   266240      291             0 gsd-sound
[  393.524003] [   1350]  1000  1350   125803      193   479232     1041             0 gsd-wacom
[  393.524004] [   1353]  1000  1353    86157      162   421888      994             0 gsd-clipboard
[  393.524005] [   1355]  1000  1355    69794        0   172032      182             0 gsd-a11y-settin
[  393.524005] [   1359]  1000  1359   117691        0   450560      520             0 gsd-datetime
[  393.524006] [   1364]  1000  1364   164959      228   487424      994             0 gsd-color
[  393.524007] [   1367]  1000  1367   126882      365   483328     1015             0 gsd-keyboard
[  393.524008] [   1370]  1000  1370    91367       85   204800      113             0 gsd-housekeepin
[  393.524009] [   1371]  1000  1371    69797        0   167936      189             0 gsd-mouse
[  393.524009] [   1375]  1000  1375   198469      208   520192     1057             0 gsd-media-keys
[  393.524010] [   1409]  1000  1409   127449        0   434176      481             0 gsd-printer
[  393.524011] [   1410]   117  1410    81499        1   270336     1195             0 colord
[  393.524012] [   1423]  1000  1423    67983        0   167936      351             0 gsd-disk-utilit
[  393.524013] [   1424]  1000  1424   198413     1879   790528     1345             0 nautilus-deskto
[  393.524014] [   1451]  1000  1451    92283        0   217088      330             0 gvfsd-trash
[  393.524014] [   1462]  1000  1462   223301        0   909312    10023             0 evolution-calen
[  393.524015] [   1472]  1000  1472    46976      106   131072       63             0 dconf-service
[  393.524016] [   1481]  1000  1481   284205        0   720896     9923             0 evolution-calen
[  393.524017] [   1483]  1000  1483    51478       67   163840      118             0 ibus-engine-sim
[  393.524017] [   1499]  1000  1499   183428        0   581632      897             0 evolution-addre
[  393.524018] [   1507]  1000  1507   254558        0   614400      994             0 evolution-addre
[  393.524019] [   1524]     0  1524    27518        1   262144      256             0 sshd
[  393.524020] [   1611]  1000  1611    27518        0   253952      259             0 sshd
[  393.524021] [   1612]  1000  1612     7673        1   102400      374             0 bash
[  393.524022] [   1639]  1000  1639     4500        0    81920       80             0 make
[  393.524023] [   1640]  1000  1640    64950      294   266240     5627             0 python3
[  393.524023] [   1678]  1000  1678    28138      812   229376     5118             0 python3
[  393.524024] [   1680]  1000  1680     4500        1    77824       85             0 make
[  393.524025] [   1686]  1000  1686     4740        1    69632      310             0 make
[  393.524026] [   1818]  1000  1818     4720       15    77824      292             0 make
[  393.524027] [   1821]  1000  1821     4720       15    77824      294             0 make
[  393.524027] [   1840]  1000  1840     4545        8    73728      109             0 make
[  393.524028] [   1842]  1000  1842   111069       56   667648    45517             0 cargo
[  393.524029] [   1862]  1000  1862  1563767  1236224 12185600   202803             0 rustc
[  393.524030] [   1868]  1000  1868   166884     1161   520192        9             0 update-notifier
[  393.524031] [   1870]  1000  1870   328958    28223  1089536     1981             0 gnome-software
[  393.524032] [   1895]     0  1895   142888      734   520192       21             0 fwupd
[  393.524032] [   1952]  1000  1952   199530     1499   720896        0             0 deja-dup-monito
[  393.524033] [   1961]    33  1961    95014      184   462848      989             0 apache2
[  393.524034] [   1973]  1000  1973   199986     2233   577536        0             0 gnome-terminal-
[  393.524035] [   1981]  1000  1981     7678      372    90112        0             0 bash
[  393.524036] [   1993]  1000  1993    13078      183   139264        0             0 top
[  393.524036] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/,task=rustc,pid=1862,uid=1000
[  393.524079] Out of memory: Killed process 1862 (rustc) total-vm:6255068kB, anon-rss:4944896kB, file-rss:0kB, shmem-rss:0kB
[  393.681287] oom_reaper: reaped process 1862 (rustc), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
u18$ 

基盤:まあ、今日びのプロセスはギガ食ってるのもよくありますけどね。

u18$ ps axl|sort -r -n +6|head
0  1000  1185  1023  20   0 3722396 112096 poll_s Sl+ tty1      0:06 /usr/bin/gnome-shell
4     0   691     1  20   0 1603012 7528 -      Ssl  ?          0:01 /usr/lib/snapd/snapd
1   123   840     1  20   0 1358700    0 -      Sl   ?          0:01 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
0  1000  1870  1023  20   0 1315832 33592 poll_s SLl+ tty1      0:02 /usr/bin/gnome-software --gapplication-service
1  1000  1216     1   9 -11 1196192 1916 poll_s S<l  ?          0:00 /usr/bin/pulseaudio --start --log-target=syslog
0  1000  1481  1462  20   0 1136820 2080 poll_s Sl   ?          0:00 /usr/lib/evolution/evolution-calendar-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.Calendarx1462x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/Calendar/1462/2
0  1000  1507  1499  20   0 1018232 2568 poll_s Sl   ?          0:00 /usr/lib/evolution/evolution-addressbook-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.AddressBookx1499x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/AddressBook/1499/2
0  1000  1462   879  20   0 893204     0 poll_s Ssl  ?          0:00 /usr/lib/evolution/evolution-calendar-factory
0  1000  1973   879  20   0 800104 15600 poll_s Ssl  ?          0:00 /usr/lib/gnome-terminal/gnome-terminal-server
0  1000  1952  1023  20   0 798120  1844 poll_s Sl+  tty1       0:00 /usr/lib/deja-dup/deja-dup-monitor

開発:プロセスのリソースに変なリミットがかかってるんじゃないでしょうね?

基盤:さあ。ulimit -a っと。

基盤:泣けてきましたね。あ、でもやっぱり死ぬか。まさか rustcのバグとかじゃないでしょうね?

開発:ともかく、これは mozilla のビルドという本質とは全く関係ない話ではありますね。そのためにもう何時間ロスしたことか。まあ、昔に帰ったようで面白い経験してますが。

基盤:VMの最大メモリは32GBにしましたし、プロセスの仮想メモリはunlimit、スタックは十分にあげたのに死んじゃうって、なんなんですかね?あとはOSレベルでの上限か、はたまたHyper/Vの動的メモリとのなんかの齟齬か。

[  499.483045] CPU: 1 PID: 2092 Comm: rustc Not tainted 5.3.0-53-generic #47~18.04.1-Ubuntu
[  499.483046] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090008  12/07/2018
[  499.483047] Call Trace:
[  499.483064]  dump_stack+0x6d/0x95
[  499.483068]  dump_header+0x4f/0x200
[  499.483069]  oom_kill_process+0xe6/0x120
[  499.483071]  out_of_memory+0x109/0x510
[  499.483075]  __alloc_pages_slowpath+0xad1/0xe10
[  499.483076]  __alloc_pages_nodemask+0x2cd/0x320
[  499.483081]  alloc_pages_vma+0x13b/0x190
[  499.483085]  __handle_mm_fault+0x8a8/0x1260
[  499.483086]  handle_mm_fault+0xcb/0x210
[  499.483091]  __do_page_fault+0x2a1/0x4d0
[  499.483092]  do_page_fault+0x2c/0xe0
[  499.483097]  page_fault+0x34/0x40

開発:rustcのコアダンプがないので、この根っこがどこにあるかわからないですね。たぶん、malloc から brk という流れじゃないかと思いますが。あ。core file size が 0 になってるからですか。うーん、スタックサイズにしてもコアダンプサイズにしても、よくわからないデフォルト値です。

基盤:まー、6GBのコアダンプされたら、みんな道連れでアウトですけどね(笑)というか、いらなそうなメモリ食いのプロセスにとりあえず死んでてもらって、make し直してるんですが、rustc の実行時間が6分代に突入してます。最長不倒距離ですね。これ、いけるんじゃないんですか?

基盤:おおー。しかしまー、ほとんど裏方プロセスがシャカリキ状態ですね。あ、死んだ。

[ 2754.568821] Out of memory: Killed process 2748 (rustc) total-vm:6005212kB, anon-rss:4435804kB, file-rss:0kB, shmem-rss:0kB
[ 2754.712397] oom_reaper: reaped process 2748 (rustc), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

開発:でもまー、不要デーモンに死んでてもらう作戦は明らかに効果があったんで、その線で進めてみましょう。ちょっとブレークしますか。

--
2020-0606 SatoxITS

本社移転

社長:さっき食事にちょっと北まで行ったんですが・・・

基盤:ルビコン川を渡って。

社長:いや、今日はちゃんと横断歩道を渡りまして。タイのおばちゃんがやってる店でグリーンカレー&アサヒ。で帰りにふと昔よく行ってた店の脇を通ったら、上の階が空室になってるのを見かけまして。ここに本社を置いたらいいかなってひらめいたんです。

開発:あそこだとここから徒歩90秒くらいですね。

社長:オーナーさんが店番してたんで少しお話したんですが、管理は不動産屋さんに任せてますからって。で不動産屋のウェブページ見ながら電話したんです。

基盤:これか。57平米で月12万+共益費3万円って出てますね。リーズナブルっちゃリーズナブルなのかな。

開発:この真ん中にカーペット敷いてコタツみたいのを置いて仕事したら気分が良いでしょうね。

経理:気分のためだけですか?

社長:それが一番重要です。

経理:それにしてもうちの会社には広すぎますよね。

社長:それで間仕切りでもして切り売りしてくれませんかね、って一応聞いたんだけど。

経理:この3分の1くらいで十分かと。

社長:まあ、大家さんに聞いてみないとなんともですが、今のところそういう形は想定してませんでってことで。まあそりゃそうでしょうけどね。

基盤:いつかこういうのをまるっと借りられると良いですね。

社長:「本社移転」とか沿革に書きたいよね 。支店でもいいけど。

営業:(本社ビルという発想は無いのか)

--
2020-0605 SatoxITS

まだまだHDD

開発:やはり少なくとも仮想マシンのホスト機には直付けのディスクが必要ですね。主にアーカイブ用ですけど、比較用の複数の動態保存版をそこで直接動かせればベター。仮想マシン1台あたり100GB程度必要なので、1TBでは心許なく、2ないし4TB。

基盤:テラバイトだと今でもSSDは1TBでも1万円以上はしますよね。HDDなら4TBで1万円くらい。4倍〜5倍の価格差です。

社長:クラウドのドライブはダメですかね・・・1TBで一年1万円、1Gbps回線でつながってれば原理的には100MB/秒。

基盤:性能的に、すごく運が良くても40MB/秒が限界ですかね。すごく調子が悪いと2MB/秒とか。あと、GoogleDrive以外は、ドライブとしてOSでマウントすると、ローカルディスクにキャッシュを作るようなので、ローカルディスクを圧迫します。まず実用的では無いと思います。実際4月に、VMwareの仮想ディスクをクラウドに置いてみましたが、ちょっと実用にはならないかなと。起動が遅くて。

開発:まあスループットじゃなくてマイクロ秒のレスポンスを考えたらどのみち、原理的にローカルキャッシュとのI/Oは必須ですしね。というか、VMwareからHyper/V、VNCからRemoteDesktopに乗り換えて本当に良かったです。もう一台この消耗品でWindows Pro入りのレノボ機欲しいくらいです。

社長:クラウドドライブ上に仮想ディスク構想、意味なかったかー。rsyncと組ませたら面白いかなとも思うんですけどねえ。まあ、やってみるまでもなかったかとは思いますが、はっきり確認はできました。

開発:そういうことで、4TBのHDD一択かなと思います。100MB/秒では書けますから、まず問題ないかなと。

基盤:ヨドバシで人気は、エレコムのこれが1万3千円、バッファローのこれが1万2千円。

経理:そのエレコムの、アマゾンで税込み9,600円で売ってますね。プライム対象。これ発注しておきます。カチャカチャ。プチッ。月曜に来ます。

広報:ところでSSDって、どういうディスクなんですかね?

開発:世が世ならディスクじゃなくてドラムだったかもよ。

社長:いわゆる再現フィルムのようですね。

基盤:それでは、VTRスタート!

--
2020-0605 SatoxITS