ツナ缶雑記

ぐうたらSEのブログです。主にマイクロソフト系技術を中心に扱います。

モバイルノートPCは.NET開発に使えるのか

f:id:masatsuna:20210606055332p:plain

本シリーズのまとめはこちらにあります。

tsuna-can.hateblo.jp

前回まで、 CPU の差異や、コア数の差異による .NET Core アプリケーションのビルド時間を計測、検証してきました。 これまでの検証結果から、 CPU を最新世代の強いものに変えること、 8 Core 以上の CPU を用意することで、ビルド時間の短縮に大きな効果が得られることがわかっています。

tsuna-can.hateblo.jp

tsuna-can.hateblo.jp

tsuna-can.hateblo.jp

ここまでは、デスクトップ PC におけるビルド時間の検証を主に行ってきました。 しかし、最近はモバイルノート PC で開発を行う機会が増えてきていると思います。 一昔前とは異なり、モバイルノート PC の性能は大きく向上しており、開発作業ができなくはないレベルになってきていると、個人的には実感しています。 ただ、その実感というのが、デスクトップ PC と比較したときにどうなのか、という点は、私自身あまり検証したことがありませんでした。 今回は、第 10 世代の Intel モバイルノート向け CPU を搭載したノート PC (Surface Laptop 3)と、同世代のデスクトップマシンで、ビルド時間の比較を行ってみようと思います。

環境

今回検証に使用するマシンは以下の通りです。

項目 Surface Laptop 3 9th Core i7 構成 Zen3 Ryzen 構成
CPU Intel Core i7 1065G7 Intel Core i7 9700K AMD Ryzen 9 5900X(PBO は自動に設定)
メモリ LPDDR4x 16GB DDR4 8GB × 2枚(2666MHz) DDR4 32GB × 2枚(3200MHz)
記憶装置 256GB SSD 1TB NVMe M.2 SSD(PCIe 3.0) 1TB NVMe M.2 SSD(PCIe 4.0)
マザーボード - ASUS TUF Z390-PLUS GAMING MSI B550 TOMAHAWK
CPUクーラー - Nocture NH-U12A Nocture NH-D15

ちなみにこれらの CPU の Cinebench R23 におけるベンチマークを以下に貼っておきます。

項目 Intel Core i7 1065G7 Intel Core i7 9700K AMD Ryzen 9 5900X
Multi Core 4,475 9,214 21,878
Single Core 1,153 1,246 1,622

Core i7 1065G7 はモバイルノート PC 向けの省電力 CPU です。 TDP も 15W と圧倒的に少なく、性能面では、比較するまでもなく大きな隔たりがあります。 この CPU はデスクトップ CPU とどの程度戦えるのか、というのが今回のメインテーマとなります。

なお Surface Laptop 3 はすでに在庫限りとなっており、各社通販サイトでも、今回使用したモデルはもう購入できないようです。 別スペックの物は 2021/6/4 現在、まだ在庫があるようですね。


なお Surface Laptop シリーズは、第 11 世代の Intel モバイルノート向け CPU または Zen2 世代の Ryzen のモバイル向け CPU を積んだ新しいモデルが登場しています(Surface Laptop 4)。 今回検証で使用する PC は、世代としては 1 つ前の物ではありますが、まだまだ現役最強クラスの性能を持つモバイルノート PC の 1 つであると思います。


検証内容

検証は .NET 5 のアプリケーションをビルドし、ビルド時間を比較する方法で行います。 対象のソースコードは、 2021 年 5 月初旬に取得したものを使用します。 各アプリケーションは、 NuGet パッケージを参照しているため、事前にパッケージをすべてローカルにダウンロードした状態でビルドを行います。 ローカルファイル内にパッケージがあれば、ダウンロードする処理は行われないため、ネットワークの影響を限りなく無視することができます。

今回検証の対象となるアプリケーションは、以下の 2 つを利用します。

eShopOnWeb

github.com

こちらはマイクロソフト社が開発している .NET Core のリファレンスとなるアプリケーションです。 リファレンスとして使用するもので、プロジェクトの数も 9 つしかありません。

Entity Framework Core

github.com

.NET Core で使用できる代表的な O/R マッパーです。 こちらはそれなりに規模が大きく、 46 プロジェクトで構成されています。

検証手順

eShopOnWeb

上述のリポジトリからソースコード一式を取得します。 取得したディレクトリをカレントディレクトリに設定し、コマンドプロンプトから以下のコマンドを実行します。

dotnet restore eShopOnWeb.sln

これで NuGet パッケージをローカルにダウンロードできます。 続いて、 CPU がアイドル状態になり、温度も一定になったことを確認してから、以下のコマンドを実行します。

dotnet build eShopOnWeb.sln

実行すると、実行時間が最後に表示されるので、その時間を記録します。 この作業を各環境で 7 回ずつ実行します。

Entity Framework Core

上述のリポジトリからソースコード一式を取得します。 取得したディレクトリをカレントディレクトリに設定し、コマンドプロンプトから以下のコマンドを実行します。

restore.cmd

これで NuGet パッケージをローカルにダウンロードできます。 続いて、 CPU がアイドル状態になり、温度も一定になったことを確認してから、以下のコマンドを実行します。

build.cmd

実行すると、実行時間が最後に表示されるので、その時間を記録します。 この作業を各環境で 7 回ずつ実行します。

検証結果

eShopOnWeb のビルド時間

f:id:masatsuna:20210605173702p:plain

Entity Framework Core のビルド時間

f:id:masatsuna:20210605173713p:plain

結果を見てみましょう。 どちらの結果をみても、明らかに Surface Laptop 3 の Core i7 1065G7 の性能が悪いことがわかります。 eShopOnWeb の方は約 5.8 秒遅く、 Entity Framework Core の方に至っては約 39 秒も遅いです。

考察

モバイルノート PC 向けの CPU とデスクトップ PC 向けの CPU では、ほぼ同じような世代の中でも大きな差がつくことがわかりました。 正直な話、こうなることは、やる前からある程度想像がついていました。 CPU のベンチマークを見てみても、圧倒的な性能差があります。 また Core i7 1065G7 は、 4 コア 8 スレッドで、コア数もスレッド数も、デスクトップ PC 向けの CPU とは差があります。 要するに、勝てる要素は何ひとつないわけです。 そうであるなら、こういった結果になるのはある意味妥当であると考えられます。

ベンチマークの結果で見比べると、最新世代のモバイルノート PC 向け CPU は、私が以前使っていた Core i7 4790K とほとんど同じようなスコアです。 どちらも 4 コア 8 スレッドで、シングルスレッドの性能は Core i7 1065G7 のほうが少し上、マルチスレッドの性能は Core i7 4790K のほうが少し上、という感じです。 当時検証したものと全く同じコードではないため、今回の比較対象からは外していますが、おおよそ同程度の時間、ビルドにかかっています。 CPU のベンチマークというのは割といい線ついているんだなーというのがわかります。 以前の検証結果はこちらから確認できます。

tsuna-can.hateblo.jp

モバイルノート PC で大規模なプロジェクトの開発は無理がある

話を今回の比較に戻します。 この結果からわかることとして、大規模なプロジェクトの場合、モバイルノート PC で開発作業にあたることが無謀である、ということがわかります。 規模の大きなプロジェクトの場合、 Entity Framework Core のプロジェクトの数倍から数十倍の規模になることはよくあると言えます。 Visual Studio 2022 が 64bit 化されるとアナウンスされたとき、割と歓迎の声が聞こえていました。 これは、それだけ規模の大きなプロジェクトを扱っている人が多いということなのだと思います。 そういったプロジェクトに触れる機会が多いのであれば、モバイルノート PC では満足いく性能を得られない可能性が高いと言わざるを得ません。

モバイルノート PC のコストパフォーマンス

コストパフォーマンスの面でも、モバイルノート PC は、あまり優れたものではありません。 今回紹介している Surface Laptop 3 のマシンは、定価で税込み約 20 万円ほどでした。 これだけの金額があれば、デスクトップ PC は余裕で超ハイスペックなものを組めてしまいます。 プログラム開発用途であれば、グラフィックボードは「映ればよい」程度のもので問題ありません。 なんなら CPU 内臓の GPU でも全く問題ないと思います。 そう考えると、モバイルノート PC のコストパフォーマンスの悪さは一層際立ちます。 Core i7 11700K を使って、 32 GBメモリ、 1TB SSD(M.2)を前提で組むと、たぶんケースとかケチれば、15 万以内(OS 込み)で組めると思います。 ゲームをしないのであれば、ほとんどの人にとって過剰スペックなマシンで、この値段です。

モバイルノート PC の良いところ

モバイルノート PC の良さは、持ち運びできる軽さと、事務作業などの軽い作業を問題なくこなせる性能を両立しているところにあります。 デザイン面もよく、多くのものが洗練された素晴らしいデザインをしています*1。 要するに、持ち運んでちょっとした仕事をすることに特化した PC であって、 IT エンジニアがガンガン開発を行うことを想定したものではないのです。 もちろんちょっとした開発なら余裕でこなせますが、規模が大きくなると問題になることが、今回の検証でも明らかと言えます。 どの部分に価値を置くかは人それぞれだと思いますが、性能を求めるのであれば、モバイルノート PC を選択することはあまり良い選択とは言えません。

しかし、処理性能に対する消費電力という意味では、モバイルノート PC の能力は桁違いに高いと言えます。 今回使用した Core i7 1065G7 の TDP はわずか 15W です。 デスクトップ用の CPU は 65W~ であり、ワットパフォーマンスではモバイルノート PC の圧勝です。 7 ~ 8 年くらい前のデスクトップ PC を持ち運んでいる、という感覚でよいのかもしれません。

まとめ

今回はモバイルノート PC を .NET 開発で使えるのか、ビルド時間の側面から検証してみました。 プロジェクトの規模が小さいうちは、問題なく .NET 開発に利用できるものの、規模の大きなプロジェクトになると、モバイルノート PC の性能では力不足となる可能性が高いことを確認できました。

私の周りには、こういった無理な環境での開発を強いられている人を割と見かけます。 2 年ほど前見かけたとある開発現場では、この SSD 全盛の時代に、 HDD 搭載の激安ノート PC 使って開発していたんですよね。 当時 5 ~ 6 万くらいで購入できるレベルのものでした。 アプリケーションのビルドに 20 分以上かかっていて、本当にどうやって開発を進めているのか疑問でした。 コストをかけたくない経営側の気持ちはよくわかりますが、これでは余裕で足が出ますよね。 即刻 SSD 搭載の最新機種に切り替えさせましたが。。。

私自身も、こういう環境を経験してきた人の 1 人です。 社会人になってすぐ支給された PC は、起動するのに30分くらいかかる PC でした。 スペックもひどく、まともに開発作業なんてできませんでした*2。 それでも大量の開発をこなさなければならず、当時は本当につらかった記憶しかありません。

経営者やマネジメントの方々、 PC は IT エンジニアにとって最も重要な仕事道具です。 おもちゃのバットで打席に立つ野球選手がいないように、プロにはそれなりのものを与えるべきだと私は思います。 この検証結果をもとに、無理な開発を強いられている人が少しでも減ることを願っています。

次回はこのシリーズの最終回として、メモリの速度に焦点を当ててみようと思います。

*1:某コーヒーショップでドヤるためにはここが重要ですね。笑

*2:当時はノート PC 2 台準備して、 1 台は開発専用、もう 1 台はメーラーと設計書確認用、という人間系のマルチスレッド処理をしていましたね。そのくらい PC の性能が足りていませんでした。