Chienomi

コンピュータパフォーマンスとエクスペリエンス(2020)

ニュース::hardware

まえがき

この記事は2019年12月24日に “CPU/メモリとパフォーマンスと必要性 (2019)” と題して書いたものであるが、公開し忘れていたため、改稿して改めて公開している。

執筆に時間が経ちすぎてしまった記事なので、完成度が低いが、一応公開できるくらいの品質にはなったかと思うので、寛大な心で読んでいただけると幸いである。

コンピュータのハードウェア性能に関する議論については、色んなところで色んな方向の考えを目にするが、実際のところあまり適切でないものが多い。

その問題は、現代のコンピュータハードウェアは非常に性能が高く、対話的操作においてその性能を引き出すことは至難の業であり、なおかつ単独で極めて計算資源を必要とするようなソフトウェアはどのような計算を行っているのかユーザーレベルでは非常に把握しづらいということが根源的だろう。

つまり、「計算資源の実際の必要性」がよくわからないのである。 そのため、コンピュータ分野に限らずよくある、「ある状況で観測されたものが『常識』として語り継がれ、実情に関係なくそれが真実であるとされる」という問題が発生する。 結果、実際のユーザーであるかどうか、また必要性についても関係なく実のない議論がなされることとなる。

これ自体は、必要性に関係なく高級で高性能な部品が売れることととなり、経済活動の面でも、技術的発展の面でも悪いことではないのだが、 どちらかといえばヒエラルキーとマウンティングにより、特に知識のない人を貶めることにつながっているという面では非常に問題がある。

そこで、非常に限られたリソースでのコンピューティングも、一般的ではない計算資源を用いた計算も行っている私が軽く解説しよう。

ただし、多くのハードウェアに関しては(これはほとんどの人が同じではあるが)計測結果を基づいてコメントしているのであり、実際にどうであるかは多くの場合わからない。 このことは、いくつかの情報を包括的に示唆している:

  • ほとんどの場合、ベンチマークを基にした議論が行われる
  • 単一のベンチマークや仕様表上の値を基に議論される場合も多い
  • 実際の評価は対象となるケースにおいて実際に使ってみないとわからない
  • ベンチマークを参考にするためには、実際にベンチマークがどのようなテストを行っているかを把握した上で、ベンチマークの複合からどのような計算においてどのような性能を発揮するかという点から考えなければならない
  • この話において、私はできるだけ実際に試すようにしてはいるが、ベンチマークの複合からの推測によるところが大きい

パフォーマンスとエクスペリエンス

ベンチマークの点数において、特に重要となるのがCPUのコア数である。

そもそもの話として、「ハードウェア性能が上がるとサクサクヌルヌル動いて快適になる」という認識が一般にあるようだが、これは事実ではない。 このような「快適さ」において最も重要なのは、対話的応答性である。自覚的かどうかはおいといて、操作に対してラグがないほうが快適に思えるし、モニターのリフレッシュレートが高いなど、時間軸であれ空間軸であれ解像度が上がったほうが快適に思える。

これは、CPUのスコアが向上することによる影響はかなり小さい。 大きな要素としては

  • CPUのキャッシュが大きいほうが、なおかつ近いほうが有利
  • メモリの 速度 は非常に重要
  • CPUのIPCが高いほうがやや有利
  • CPUのクロック数が高いほうが有利
  • ストレージのランダムアクセス速度が高速であり、なおかつ距離的に近いほうが有利

といったことが挙げられる。ようは処理量の問題ではなく、レスポンスが速ければいいので、「時間的距離」が重要になる。 このため、サーバーで使用するような低処理性能・低クロックのメニーコアCPUはあまりエクスペリエンスがよくない。

基本的にはこうした観点から実際に選択可能なのは

  • 速いストレージを速い方法で接続する(例えばNVMe接続で高速なSSDを使う)
  • メモリはそのCPUにおいて許される最大速度のものを使用する
  • 効率の良いコアでクロック数の高いCPUを選択する

くらいである。

だが、実際にエクスペリエンスを上げるにはハードウェア面よりもカーネルなどソフトウェア面のほうが大きい。 だから、

  • 応答性を優先したカーネルを使う、もしくは応答性優先のコンフィグをする
  • フォントを厳選する
  • 画面のピクセル数を減らし、なおかつディスプレイがネイティブに対応する解像度を選択する

などのほうがずっと有効である。 また、ハードウェア的には、マウスやディスプレイに応答性の良いものを使うと良い。

コンピュータを構成するハードウェアとしては、ビデオカードは高性能なものはクロック数が上がり、メモリも高速化するため、グレードがエクスペリエンスにつながりやすい。

これらは常に「足りないことがない」という前提に基づいている。 計算リソースだろうが、メモリ量だろうが、接続帯域だろうが、とにかく足りなければ遅くなる。 これは処理時間的にも長くなってしまうので、常にこれがない前提である。

本当に少し前であれば「メモリは足りなくなければ良い」みたいな言い方をしていたのだが、現在においては全てにおいてコンピュータハードウェアは「足りなくなければ良い」ものになった。 これは、要は「仕様上不満を生じる余地がない」という状態がCPUにおいても達成可能になったということである。

CPUパフォーマンスの影響とコア数

要は「性能が上がってもあまり反映されない」状況というのは応答いとうミリ秒オーダーのものであり、秒オーダーになるものはコンピュータの性能の影響が大きくなる。

それでもまず、最も遠いのがストレージであるため、ストレージが速いことが効果が大きい。 というよりも、この場合単純に速いのではなく、「IO waitを短くしたほうが速い」のである。 どういうことかというと、例えばシステムディスクとデータディスクを分ければ高速化する可能性が高い。

そして、メモリが速くなれば速くなるのだが、この場合はCPUとマザーボードを併せて世代が新しくなれば新しいメモリがサポートされ、それに合わせたメモリを選択することが高速化する。 ただし、低グレードなCPUにおいて高速なメモリがサポートされないといった場合もある。

そして秒オーダーになるようなものであれば性能が上がれば改善される。 これはIO waitが大部分を占めるようなケースかどうかが問題だ。 単純なコマンドであれば、BashやZshの場合、timeを使ってIO waitの割合が高いかどうかを知ることができる。

なお、IO waitというのはプログラムがIOの完了を待っている時間であり、IOブロッキングされている時間とは異なる。

例えばアプリケーションの起動はIOが占める割合が高い。 だが、FirefoxやChromiumなどは起動時にかなりの計算を伴うため、CPUの高速化が起動時間短縮につながる。 これは、システムモニターを使用して(Windowsであれば「タスクマネージャー」)CPUの使用量が高い状態で張り付いているかどうかで確認することができる。

一般的な使用で大きいのは「ブラウザが速くなる」ということだろう。 システムモニターを眺めていればわかるかと思うが、Firefoxであれ、Chromiumであれ、現代のブラウザはパースからレンダリングまで、非常に複雑な計算をしており、そのためにかなり計算量が大きい。スマートフォンでも高性能な端末はブラウザの表示が速いと感じるかと思うが、PCにおいてもある程度これが通用する。

ただし、ブラウザは基本的に1ページをシングルスレッドでレンダリングする。厳密には完全にシングルスレッドで動作するわけではなく、2〜4コア程度であれば高速化に寄与する。しかし、これが10コア、20コアになるとさらに速くなるかというと、そんなことはまったくない。 近年のFirefox及びChromiumはバックグラウンドタブの処理を遅延するため、大量にタブを開いた場合でもこれは変わらない。

分散させる

エクスペリエンスに貢献する、というよりも「エクスペリエンスの悪化を防ぐ」方法として「分散させる」というのがある。

CPUコア数が多い場合の有効性という意味ではこの点が大きい。 私が今メインで使っている3700Xは8コア16スレッドであるが、これでもCPUの応答性が低下するようなことはあまりない。 だが、4コアのCPUなどだとよくなにか重い処理をしているとあからさまに応答性が低下する。 また、複数のlibvpxを走らせている場合などは処理性能は低くても20コア40スレッドのXeon 4114のほうが安定している。

また、極めて高速な(3500MB/sクラスの)SSDを使用していたとしても、システムSSDに対して大きなデータの書き込みを行う場合はフリーズが発生する。 わかりやすいところではpacmanによる更新処理をしながらYouTubeを再生していると、YouTubeの再生がちょいちょい飛んだりする。 また、特にファイルマネージャを使った非常に大きなファイル(数十GBとかの)のコピーは細かなフリーズが発生しやすい。 だから、システムは1500MB/sクラスのSSDでもいいから、データは別のSSDに分けたほうが快適だ(さすがにデータ書き込み対象がHDDだとSSDにまとめたほうがまだ快適に思えるし、500MB/sクラスのSSDと3500MB/sクラスのSSDだとちょっと微妙な差になる)。

システムディスクにあまり余計な書き込みを発生させたくないので、(性能が大容量モデルのほうが良い傾向ではあるが)システムディスクは(Linuxなら)256GBでもいいから、別途1TBの普及帯SSDをデータ用に用意するとしたほうが快適だ。それに、1TBの高速SSDを用意するより安上がりでもある。

「数を増やすことで安定したエクスペリエンスを確保しつつ省電力を保つ」というのがとても現代的スタイルだ。

エクスペリエンス至上主義マシン

様々なマシンを実際に使ってみてテストしてみてした結論としては、「エクスペリエンス的にはディスクが速いこととビデオカードの容量に余裕があり高速なのが大事」である。 ビデオカードはハードウェアアクセラレーションが効くCinnamon, GNOME, Plasma Workspaceなどではデスクトップ全般が高速化するし、ウェブブラウザの高速化という点も大きい。 ディスプレイスペースを小さくすることで高速化できる、というのと同じ話として、ビデオカードを高性能化することで非常に快適な動作が得られる。

ビデオカードに余力がないなら、別にディスプレイをダウングレードする必要はなく、解像度を下げれば良い。 私は仕事でThinkPad X1 Carbon Gen8 4kを使っているが、4kだと動きはかなりもっさりしているが、FHDに落とせば見違えるように速くなる。

だから、エクスペリエンスだけを考えるなら、RTX3080やRX6800XTというのも良い選択だし(さすがに4k程度であればRTX3090やRX6900XTはやりすぎ感がある。もっとも、8kデスクトップを求めるなら別である)、高速SSDを搭載したいとも思う。 一方、CPUはあまり高性能が要求される場面はない。コア性能が十分高ければ普段のエクスペリエンスは問題ないし、コア数が増えればlibx265とかxzとかが速くなる、重い処理をしながらでも安定するというメリットはあるものの、エクスペリエンス上の優先度は低い。

だから、エクスペリエンス至上主義のマシンを組むとして、ビデオ性能も含めてRTX3080と7000MB/sクラスのSSD、それにデータ用に7000MB/sクラスのSSDをもうひとつ、という極端なマシンを作るとして(現実的性能であれば、データ用SSDはもっと遅くても構わない)、それを接続する十分な帯域とPCIe Gen4をサポートするために570Xマザーボードを選択した上で、CPUはRyzen5をチョイスする、メモリは高速なものにするが容量にはこだわらない、という世間一般からすれば「ありえない」ようなアンバランスなマシンだって、結構ありだったりするかもしれない。

別の見方をすると、これらのパーツ選択から

  • 高性能なビデオカード
  • 高速なSSD
  • システムとデータを分離したSSD
  • 高速なメモリ

はハードウェアとして体感としてわかりやすいものである、高性能なものを選ぶことで「高性能なマシンである」ことを感じられるものだと言える。 だから、これらの点においては「良いものを選んだから快適」はおよそ正しい。

一方、CPUの性能や大容量なメモリは、その性能を引き出すにはかなりのテクニックを要する。 このレベルでコンピュータを使いこなすことができる人はそうはいない(そもそも、計算量が問われるプログラムを書いたり、メモリ空間を意識して使える必要があり、ハードルが高すぎる)ため、CPUマウンティングなどは割とバカバカしい。

なお、注意点として、フォントを大量に入れたときのパフォーマンス低下はマシンの処理性能によらず発生するので、どのみち厳選したほうが良いことには変わりない。

使い方と要求性能

単純に組む、購入するという意味では「好きなのにすればいい」の一言で住むのだが、そういう観点ではなくコンピュータのパフォーマンスやパーツについて講釈しようというのであれば、前提として「コンピュータはトレードオフであり、要求ありきである」という点を抜きにしては語れない。

先に挙げた「エクスペリエンス至上マシン」というのは、コンピュータ操作に慣れており、HIDの性能を活用でき、コンピュータの応答性に敏感である、という条件を満たし、かつ計算力を活用したり余剰リソースを成果に変える方法を持たない人が最も快適なコンピュータを目指す話である。 この話は、前提として自身がコンピュータを使い慣れており、応答性が上がれば体感できるという認識が必要で、また計算力を求める使い方をしておらず、計算力を求めようともしていないということも前提として必要になる。 これは計測によって比較的容易に出せる部分ではあるが、それでもどのような使い方をするからこういう要求である、ということを理解していなければできない部分である。

昔は全面的にコンピュータリソースは足りなかったので、とにかく性能はあればあるだけ良いという面があった。 私の最初のWindowsマシンであるAptiva 510(486DX2 66MHz)やWindows 98SEのVAIO MX2(Pentium III 800MHz)はもちろん、Pentium4, PentiumD, Core, Core2となってもまだ性能はまだ常に不足していた。特に、Pentium IIIくらいの世代までは「誰が使っても常に不足している」というレベルだった。 Pentium 4になると使い方によるようになってきたから、ウェブブラウザとメーラーくらいしか使わない人にはCPU使用率が低いままになるようになった(当時はまだウェブブラウザは軽いソフトウェアだった)。   しかし現代においてはコンピュータの性能を持て余すのなんて簡単なので、ただ高性能なパーツを選ぶだけというのは単に「考えなし」という印象でしかない。 実際、「どのように使うか」ということの詳細なしに、性能の良し悪しなど言いようがないのだ。

考えてもみてほしい。

プロセッサはCore i3とかその程度だが、軽くてバッテリーもちがよく、何より打ちやすいキーボードを備えたラップトップを持ち歩き、ふらりと行った先でインスピレーションを得て素晴らしい物語を書き上げる作家。かっこいい。

何の変哲もないPCだが、クラウドコンピューティングを活用し、強力なGPUを使ってディープラーニングで成果を積み上げるAI研究者。かっこいい。

ミドルクラスのCPUとビデオカードではあるものの、しっかりゲームが動くPCでゲームを軽量設定にして、プロを目指して駆け上がるeスポーツプレイヤー。かっこいい。

Ryzen Threadripper 3970Xプロセッサに、「店で一番安かった」ビデオカードを搭載し、カーネルをビルドしまくるLinux開発者。かっこいい。

じゃあ、Core i7なりRyzen 9なりにRTX3080とかを積んだPCを用意して、やることはコメント欄を荒らしたり、SNSで人のPCにケチをつけるだけという人。かっこいいだろうか?

自分の使い方を理解し、何が必要かを理解し、「だからこれを選んだ」と言えるコンピュータは輝いて見えるだろうし、単にマウントをとるために使いこなせもしないのにスペックだけで選んだPCは魅力的には映らないだろう。

最近は「これが最低限」というものも特にない。

実際、私の環境を見ても、妥協を重ねて購入したA10マシンは、長くメインマシンとして他の人がまず踏まないような状況にトライして経験を積むとともに、非常に厳しい使い方もした。24時間CPUが100%に張り付くなどというのは日常茶飯事だった。 このPCはその役目を終えたあと引越し先で寝室用PCになり、多忙な日々の中で、動画を見たりゲームをしたりといったリラックスタイムを実現してくれた。 さらに寝室PCがより高性能なものに置き換わってからは今度はリビング用PCになった。出番は少ないが、特別な休日に動画を流したり、ときにはドキュメントスキャンなどにも活躍している。 処理性能は低いが、メモリ量が多いこと、良いマザーボードを使っており音声出力が高機能であることなどが功を奏し、様々なポジションで活躍しつづけている。 これは最初選ぶ時点では要件を満たすことができなかったものだが、将来のことを見据えて幅広く活用できるようにしておいたということと、「あるものを最大限に使う」という人間側でがんばる方法で「できること」を形にしている。

コンピュータも結局は道具だから、できることなどというのは使い手次第だ。 なんでもない事務用鉛筆1本あったとして、「こんなのあっても何もできない」という人もいれば、美しい絵画を生み出す人も、感動的な物語を生み出す人もいるようにだ。

まぁでも、新聞やチラシに入っている、本当にひどい性能の(中途半端な)旧型モデルを(官公庁や企業の払い下げ品と称して)結構高めで販売しているのを買うのは、バカバカしいと言われても仕方ないかもしれない。これは性能がひどいものでもあるが、コンディションの悪さも含めて相場を無視した価格設定になっている「無知につけ込む販売」に乗せられたからだ。 まぁ、「かわいそう」という言い方もあるかもしれないが、理解する努力を怠った結果であるとも言える。