Swift コンパイラーのビルド用に Linux PC を組み立ててみました。

Swift プログラミング

普段の作業で使う iMac で Swift コンパイラーをビルドすると何かと支障があったので、ビルド用のコンピューターを Linux で用意してみました。


それなりに前の話ですけど、普段の作業で使っている iMac で Swift コンパイラー をビルドしようとすると、ブラウザーとかを閉じておかないと メモリー不足 が原因でビルドに失敗したり、特にテストの段階で 処理能力をほとんど持って行かれて 作業にならない、みたいな記憶がありました。

使っている iMac の仕様は、CPU が Intel Core i5 の 2.7 GHz、メモリーが 16 GB の DDR3-1600 です。最近になって試してみると、変なところでの失敗や支障が出るほどの負荷はなさそうな気もしましたけど、ビルドを実行したまま放っておいたら何かと都合が良さそうだったので、それ用に何か PC を用意してみることにしました。

候補から Mac は外すことにしました

最初は、他の Mac を新調しようかと思ったのですけど、そもそも今のメモリー 16 GB で大いに不足だった記憶も手伝って、それ以上のメモリーが必要になってきます。そうすると、まず候補に挙がるのは Mac Pro ですけれど、控えめにメモリーを 32 GB にしただけでも 35 万円と、Swift コンパイラーのビルド用に揃えるにしては値段が高すぎる印象です。

残る候補は iMac Retina 5K ですけど、こちらもメモリー 32 GB にすると 24 万円でそれなりのお値段に、それより何より 27 インチの画面が組み込みでついてくるから Swift コンパイラーのビルドのためにおいておくには邪魔そうです。何よりもし、メモリーが 32 GB で力不足だった時には Mac Pro を買い足す以外に道がなくなるところも不安材料です。

これはちょっと安易には、手が出せそうにありません。

久々に自作 PC を組み立ててみる

そういえば Open Source の Swift は Ubuntu Linux にも対応しているし、それなら Swift コンパイラーをビルドして遊んでみるくらいなら Linux で良さそう。そう思って、今回は久しぶりに 自作 PC を組み立ててみる ことにしました。メモリーも CPU も必要なものを好きに選べるのも嬉しいですし、もし足りなくてもそれなりの出費で性能アップできるところも嬉しいですしね。

そんなわけで、いろんな構成を考えながら、最終的には次の仕様に固めてみました。

PC ケース

今回の仕様を決めるにあたって、いちばんの鍵を握ったのが PC ケース でした。

というのも今回は『部屋の隅っこにおいておく Swift コンパイラーのビルド用 PC』だったので、筐体はできるだけ小さく済ませたいところでした。 そのため、最初は Mini-ITX 用のケースを考えていたのですけど、対応するマザーボードの最大メモリーが 32 GB くらいまでしかなくて、もしそれで足りなかったとしたら厄介です。

そうなると、やっぱり microATX に落ち着くのかなって思ったんですけど、そんな中、ATX 対応ながらも 20.9 W × 30.2 D × 35.4 H という、ともすると microATX より小さくてもおかしくないくらいRM2S というケースを見つけて、これにすることに決めました。ATX 対応マザーボードであれば、選択の幅が思いっきり広がるところが嬉しいです。

マザーボード

マザーボードはけっこう迷ったんですけど、ケースを RM2S に決めてからは、けっこうすぐに決まりました。

ATX クラスであれば、普通に何を買ってもそれなりに良いものを組めると思うのですけど、 時点で普通に選ぶとメモリーは最大 64 GB で、CPU は 4 コア 8 スレッドの Intel Core i7 になる様子でした。ただ、どうやら Core i7 には 8 スレッド以上の製品もあるみたいですし、今に主流の DDR4 SDRAM メモリーは 1 枚で 16 GB くらいのものもあるようで、最大 128 GB のマザーボードもあるようでした。

そんなあたりも考えながら眺めていたら ASUSTeK X99-E が目に止まりました。

購入当時は 3 万円を下回る価格で、一般的なマザーボードよりは高価ですけど、最大メモリー 128 GB ですし、CPU スロットが LGA2011-v3 なので 8 スレッドを超える Core i7 を搭載できます。そこまで全部搭載する必要はないでしょうけど、もし 思うような速度でビルドできなかった時に、性能アップをしやすいところに魅力 を感じて、今回はこのマザーボードにすることにしました。

CPU

マザーボードを X99-E に決めたことで CPU は、欲を出せばそれこそ 10 コア 20 スレッドまで狙えはするものの、値段も大幅に跳ね上がるので、 今回は、対応する LGA2011-v3 の中ではいちばん安い Core i7-6800K を選んでみました。安いといっても 3.40 GHz で 6 コア 12 スレッド で、お値段も 5 万円と高価ですけど。

メモリー

iMac で Swift コンパイラーをビルドした時、いちばん気になったのがメモリー容量だったので、できれば 64 GB や 128 GB くらいまで載せたいところだったのですけど、マザーボードと CPU だけでも出費がかさんでいるのもあって、今回は 手持ちの iMac よりは多い 32 GB に してみることにしました。

メモリーは後からでもいちばん無駄なく増やしやすいので、1 枚あたりの容量がいちばん多い 16 GB × 2 つの CMK32GX4M2B3200C16R にしてみました。 メモリーの中では速い方の DDR4-3200 で、値段も当時 25,000 円と容量の割に安かったのが決め手です。

ビデオカード

6 コア 12 スレッドの Core i7-6800K にはビデオ出力機能が搭載されてないらしく、最近にしては珍しく ビデオカードを自分で購入する必要が ありました。

今回は Swift コンパイラーのビルドが第一目標なので、ここは大きな節約どころです。とにかくいちばん安い部類のビデオカードを検索して 4,000 円しないくらいのものを購入することにしました。ビデオカードといえば空冷ファンを使って冷却するのが一般的ですけど、派手に画像処理をするつもりはないので、なるべく静かに使えるようにヒートシンクだけのものを選んでおきます。

電源

電源は、PC ケースによっては最初からついていたりするのですけど、今回のケース RM2S にはついてなかったので、別途購入する必要がありました。

電源を買う時、どれくらいの容量を購入したら良いのかいつも迷うのですけど、普通にケースを買った時に付いてくることがある容量くらいの SST-ST60F-PS を選んでみました。600W の電源で、購入当時は 10,000 円ほどでした。今回はとても小型の PC ケースを選んだのもあって、おそらく中の配線が窮屈になりそうだったので、必要なコネクターだけを配線できる プラグイン方式 の電源です。

CPU クーラー

今回選んだ Core i7-6800K には CPU クーラーが付属していないので、こちらも別途購入しました。

今回は、狭い空間でも使える ロープロファイル対応JANUS CAC-EXAIJ-U01 です。Core i7-6800KTDP 140 対応 の CPU クーラーが推奨されているようだったので、それに対応しているものを選びました。 実は最初は、普通に大きい CPU クーラー SCKTT-1000 を買ってしまってました。何も邪魔するものさえなければ今回の PC ケースに入る大きさだったのですけど、電源と干渉してしまって入らず、改めて買い直すことになりました。

新しく買い直したクーラーは 小型ながら 2 つの空冷ファンが取り付けられる ようになっていて、そうすることで TDP 140 に対応してくれます。組み立てがちょっと分かりづらかったですけど、説明書とにらめっこを続けてなんとか組み立てられました。ファンの音も煩い感じはなくてよかったです。

ディスクドライブ

今回は Swift のソースコードを入れてビルドするくらいの用途を想定していたので、システムを入れるディスクは、手元に余っていた Intel SSD 520 Series 240GB SSDSC2CW240A310 を流用することにしました。

これくらいの容量でひとまず余裕はある感じでしたけど、実際に使ってみての感触としては、ソースコードは全部で 2 GB くらい、デバッグ情報を含む Swift のコンパイラーが 50 GB 近くの容量になる様子ですけど、デバッグ情報を含まなければ 3 GB くらいまで小さくなるので、全体的にとりあえず余裕のある容量な印象でした。

組み立てた印象

こんな感じで部品を揃えて、費用としては 13 万円くらい。Mac を購入するのと比べて、性能的にだいぶコストを抑えられたような気がします。

そんな風にして選んだパーツで PC を組み立ててみた印象を、せっかくなので記しておきます。

CPU

まず最初にときめいたのが CPU の大きさでした。

ソケット LGA2011-v3 は普段のソケットよりもひとまわり大きいサイズみたいで、珍しい心地が嬉しかったです。巨大な CPU でときめくのって、自分が初めて Windows PC を手に入れた時の DELL Dimension XPS H266 に搭載されていた Pentium II 以来かもしれません。

マザーボード

マザーボードも、なんとなくの印象ですけど、今までの 10,000 円前後のボードと違って立派に見える印象でした。

ボード自体の見た目の印象だけでなく、ビデオカードを 2 枚以上組み合わせて使える SLI (Scalable Link Interface) 用のケーブルが付属していたりとか、背面パネルも単なる薄っぺらいプレートではなくてふかふかしてたり、電源 LED などの接続がしやすいように工夫されていたり、細かいところまで丁寧に作られている様子でした。

こういう小さな品質の良さを感じられると、なんだか嬉しい気分になります。

\

ケース

ケースも小さくて良い感じでした。

\

ATX サイズのマザーボードが空間をギリギリまで占有する感じですけど、思ったよりずっと窮屈感はない印象でした。

とはいえもちろん、極限まで小さくしている都合、先ほども記したように CPU ファンがロープロファイルのサイズでないと入らなかったりするところは注意が必要です。ビデオカードも今回は小さいものを使いましたけど、派手な大きいものを使う時には苦労するかもしれません。できるだけ空間を広くとれるようにと選んだ、プラグイン方式の電源は、だいぶ功を奏した気がします。

Swift をビルドしてみる

そんな感じで揃えた PC で Swift コンパイラーをビルドしてみたので、その印象を簡単にながら記しておきます。

インストールした OS は Ubuntu 16.04 LTS で、ここに 時点で apple/swift: The Swift Programming Language から入手できる最新のコミットを使って、記載されている手順にしたがって Swift のビルドを行いました。

必要なライブラリーのインストール

今回は Ubuntu Linux 環境なので、まずは次のようにして必要なライブラリーをインストールします。

sudo apt-get install git cmake ninja-build clang python uuid-dev libicu-dev icu-devtools libbsd-dev libedit-dev libxml2-dev libsqlite3-dev swig libpython-dev libncurses5-dev pkg-config libblocksruntime-dev libcurl4-openssl-dev autoconf libtool systemtap-sdt-dev

Swift ソースコードの入手

そして、ソースコードを保存するための swift-source ディレクトリーを作成して、そこに Swift のソースコードをダウンロードすれば準備完了です。

mkdir swift-source
cd swift-source

git clone https://github.com/apple/swift.git
./swift/utils/update-checkout --clone

Swift をビルドする

そうしたら、次のようにして Swift のコードをビルドします。

./swift/utils/build-script

ビルド時のメモリー使用状況

ビルド中のメモリー使用量を top コマンドで眺めてみると、それほど使っていないように見えます。

テストの段階に入るとメモリー使用量もだいぶ増える様子でしたけど、それでも使いつぶすようなこともなさそうです。

他にも vmstat 1 コマンドを使って様子を見たりしましたけど、ごく稀にスワップメモリーを使うことはある様子でも、まずスワップすることはなくて、とりあえず PC の性能的には満足できる様子でした。

ビルド時間

Swift コンパイラーのビルドにかかる時間としては、クリーンビルドする度にだいたい 22 分ほどの時間がかかる様子でした。

それなりの時間はかかりますけど、以前に iMac で作業しながらビルドしていた頃と比べてずっと現実的にビルドが終わるようになりました。クリーンビルドでなければもちろん、もっと短い時間でビルドが終わってくれますし、これはなかなか、良い感じの部品で PC を組み立てられたかもしれません。

もっと速度が欲しければ CPU をより高速なものに変える手もありますけれど、よほどのことがない限りは、この性能で使い続けていけそうです。