Chienomi

4GBの人権

ハードウェア

ことの起こり

最近「会社の支給PCのメモリが4GBであることが悪行である程度」が話題になっている。 もちろん、これが意味するのは「会社の支給PCのメモリが4GBであることは許されざる罪である」という点に関しては異論を差し挟む者は基本的にいない。

この手のことは何度か話題になっているのだけど、今回特段話題になっているのは論点が広がったためであると思う。 今までは「エンジニアのPCがメモリ4GB」という話題だったのだが、ここにきてそれ以外にも

  • バックオフィスのメモリは4GBでいいのか
  • エンジニアとオフィスワーカーのスペックに差があって良いのか
  • 16GBのマシンを支給しているところは名乗り出てみろ、の煽り → タイミングよくサイボウズがバックオフィスにも32GBを支給していると公表

おおまかにはNTTがGAFAに引き抜かれてて処遇改善を考えているよ、という話と、NTTをやめてGoogleに行った人のブログがバズったから…というところにあると思う。

なお、今回の記事の基本的なところはLinuxのメモリの本当の必要量を考える(メモ)を読んでほしい。

自己紹介

私が使っているマシンは今かなり幅広い。普段から使っているものだけに限定しても

  • 40コア IntelスケーラブルXeon (Skylake) / 128GB RAM
  • 4コア Xeon (Bloomfield) / 20GB RAM
  • 4コア APU (Godavari) / 32GB RAM
  • (サーバー) 2コア Turion II Neo (Geneva) / 2GB RAM
  • (ラップトップ) 4コア Core i5 (Kabylake) / 8GB RAM
  • (ラップトップ) 2コア Celeron (Haswell) / 16GB RAM
  • (タブレットPC) 4コア Atom (Bay Trail) / 2GB RAM
  • (ラップトップ, ルーター使用) 1コア Celeron(Netburst) / 1GB RAM

とかなり様々だ。

メモリ4GBのマシンがタブレット(実体はPavilion x2 10-j000)とサーバーしかないが、実際のところマシンラインナップとしてはもっと色々あって2GB/4GBのマシンも何台かあるし、そもそも先代主力機だったBloomfield Xeonワークステーションは結構な間4GB RAMでがんばっていた。

そもそも、Turionのサーバーはメインマシンの不調やシステムの組み直しで結構な期間(トータルで3ヶ月くらい)メインマシンを担ったことがある。しかも最近の話である。

なお、OSはタブレットだけがWindows 10で、他は全てManjaro Linuxなのであまり参考にならないだろう。

使用マシンの経験も幅広い。最初に使ったのはIBM JX3だし、RAMはわずか128kB(単位に注意)でしかなかった。さのあとのSunワークステーションはなにするにもパワー不足だったし、AptivaはOSの起動すら危うかった。 ようやくひと心地つけたのは当時ハイエンドクラスだったVAIOだけれど、メモリは64MBにすぎず、やはりなにをするにも足りなかった。

そして今でも192MBに拡張したもののVAIOは現役だし、練習機のメモリは1GBである。

一方で今の40コアXeonに代表されるように一般的なPCの次元からは逸脱したマシンの利用歴もある。 さすがに現役でEPYCを使っている人にはかなわないが、それでも有り余る性能を使い切るような経験もある。

普通の人が経験するよりもずっと幅広いマシンで、そのマシンでできる限界の作業をするという経験 をたくさん積んでいる、と言えるだろう。

また、私はメモリの利用状態を常にConkyで監視しているし、一定以上に高まったときにはメモリの利用状況をダンプする(自動で行われるものと、ワンクリックで実行できるものの2種類。実行内容は/proc/meminfopmap -xによるもの)という運用をしている。 つまり、メモリの使用量というのは一般に感覚やメーターで把握するよりはかなり厳密に把握している。

「メモリの使い方」の話

適切さの話は置いておいて、「エンジニアが4GBでまともに仕事ができない」というのは、特に個人的なコンピュータが4GBで使えないというのは、私としては無能な印象を受ける。

実際、Manjaro Linuxは結構「全部盛り」方向の環境なのだが、それでもブート時はそれほど重くない。 XFce4, Cinnamon, KDE Plasmaいずれでもだいたい1GB前後、せいぜい1.3GBといったところである。そして、このまま普通に(タスク切り替えで)利用していても4GBを突破することはあまりない。

私にしてみれば、制限的環境としては4GBというのはものすごく余裕がある。 普通にAtomやVSCodeも使えるし、Chromiumでウェブブラウジングもできる。 これが2GBになるといきなりきつい。実用的なデスクトップ環境だと1GB近くメモリを使ってしまうので、Chromiumでブラウジングするともたない。「Chromiumを諦める」でも「デスクトップを制限する」でも使い勝手に非常に大きな影響を感じる。

だが、4GBあれば普通に使える。 といっても、「4GBを前提としていれば」だ。 「あまりメモリを使わない使い方をする」ことによって「4GBで不足することは稀である」という状況を作り出せるという話なので、ある程度のスキルがいる。 つまり、一般エンドユーザーにとっては4GBというのは難しい。だから、事務職に4GBのPCを与えるのは率直に言って罪な無知である。

だが、エンジニアだと話は違う。4GBで作業に支障をきたす、というのは修練が足りない。 4GBという枠を与えられてその枠内に抑えた進め方ができないということは、開発しているものが許容されるパフォーマンスの制限やリソースの制限に収めた最善を尽くすことができないということなので、その意味でも能力の欠如を晒すことになる。

前提が変わる要素は多い

言うまでもなくこれにはいくつかの観点がある。

まず、4GBで「十分でない」ことは明らかなのである。

そもそもメモリの性質を考えてみよう。メモリというのは余っていることによってなにか嬉しい効果があるわけではない。もちろん、使っていて余剰があればそれをさらに使うことはできるが、つかっていないのであれば余っているものは余っているだけなのだ。 だから、「足りなければ工夫する、余っていれば使い方を増やす」というのが基本になる。 そして、「工夫しなければ足りなくなる」4GBというメモリ量は「足りない」ということは揺らがない。

そして、使用するメモリというのは「何を」するかで話が大きく変わってくる。 まずChromiumやChromeを使っている時点で使い方としては重いわけだから、「ウェブブラウジングをする」というのを前提に話は進められない。 そもそも「これが当たり前」に言っている人は想像力も経験も足りないし、可能性を追求したり工夫したり想像したりしない人はエンジニアに向いてすらいない。

私がやっている中ではメモリを軽くするのが難しいのはホスト間接続テストである。 かなり多くのVMを接続する必要があることから、極限まで軽くしてもかなりのメモリが必要になる。 だが、少ないホスト数でテストする、ホストそのものを極限まで軽くする、という手段はとれるので20ホスト4GBとかで動作しているが。

もっと厳しいのは利用方法がそもそも制限されている場合である。

もっとも致命的な制限は「Windows 10を使う」だと思う。 最近のWindowsのリソースマネジメントは私には理解しがたい。 いくら性能を積んでもエクスペリエンスが改善しないのだ。Windows 7の頃は「リソースが有り余っているのに全然活用しない」という問題だったが、今はWindowsシステム側でリソースを食いつぶしてしまう。 40コア128GBのシステム(ディスクはサムスン製NVMe SSD)を以てしても「フォアグラウンドプロセスがバックグラウンドプロセスに邪魔されてスリップする」という不毛極まりない事態を起こす。 「馬鹿じゃないの!?」と大声で叫びたくなる。

なにをしてもとにかく無駄な処理が多いのだ。単純なプログラム起動時間も、かなり遅い部類に入るLinuxと比べても果てしなく遅い。

Windowsで重い作業をすることがなく、Windowsで8GBを使い切るのをみたことは一度もないが(少なくともシステムモニター上では)、Windowsの挙動なら必要のないメモリを食いつぶしてもおかしくはない、と思う。 もっとも、このマシン(40コアXeon)でもメモリを使い切る以前に「プロセスの起動待ち、その間他の作業は阻害される」みたいなことが頻繁にあるので、叩き壊したくなるほどエクスペリエンスが悪いし、メモリが増えたところで作業効率が上がるとは到底思えなかった。 それが気にならずメモリの容量を問題にしている人は、スマホを平気で使っているんだろうな、と思う。1

もちろん、Windowsはエクスペリエンスが悪すぎるから開きっぱなしにしている、という可能性もあるが。ただ、Windows10はウィンドウスイッチングも結構遅い。 (ビデオカードももちろん良いものを使っているのだが)

また、メモリを食いつぶすことで有名なアプリケーションと言えばEclipseである。 Eclipseを使うと一気にメモリ8GBでは怪しい、という事態になる。 これは今どき使わなければいいとか、果てはそもそもJavaを使わなければいいとかいう話にもなるのだが、Eclipseを強要されるケースは普通にあるようなので、こういう場合はやはり状況が変わってくる。

ただ、例えばGitの操作でメモリが128GBもあれば押し切ることのできる通常はできない操作というのもあったりするのだが、「メモリ8GBじゃ力押しできないから」というのはさすがに頭が悪い。 それは方法を考えるべきだ。実際、メモリ8GBだと重めのソフトウェアはYaourtのデフォルト設定でAURからのビルドはできないのだが、それは普通に実ディスクを使ってもらうようにすれば解決する。潤沢なときに許される力技ができないことに文句をつけるのは筋合いではない。

しかし、基本的には労働者にとっては必ずしも支給されるPCの性能というのは重要ではないと思う。 個人の裁量で他のマシンが使えるとなると結果的に労働者に対して負担を強いることになるため、非常に不適正といえるけれど、皆が同じマシンを使うのであればそれは統一された前提条件である。 コンピュータの性能は生産性とできることへの制限だから、業務効率やビジネス展開を制限することになるのだけど、それは労働者にとってはストレスだろうけれども、その時間でできることをすれば良いわけで、その問題に向き合う必要がない。その問題に向き合うべきは経営者だからだし、現に存在する「性能の低い(あるいは制限の厳しい)コンピュータで開発したくないから出ていく」というエンジニアのことを考えれば「人材の流出」という問題でもあり、それもまた経営者が向き合うべき問題である。

どのようなコンピュータを支給するかは経営戦略への影響も大きく、労働者側から不満を言うのはもちろん自由だが、その是非を断じるのはかなり難しい。 そして、それが「本当に不足なのか」あるいは「スキルでカバーできないエンジニアの戯言」なのかという点も、どのような条件に基づいているのかわからなければなんともいえないので十把一絡げに言えるものではない。

グレーディングの問題

コンピュータの性能が「上下」や「優劣」に使われる、という問題は、まぁわからなくはない。 というか、実際に私が思い描いている「会社経営像」でも「何をする人か」そして「どのような方法でする人か」「どのくらいのスキルがあるか」によって(さらにいえばもっと様々細かなことまで含めて)「個別に選定する」ことを想定している。 もちろん、これは顔の見える範囲でしかできない方法だが、コンピュータのグレードが揃っていないことは私はそれほど問題だとは思わない。

そもそも、メモリやCPUを「使う技術」と「使わない技術」はそれぞれ別にある。 私が使っているようなコンピュータは一般的なパソコンとは比較にならないほどリソースがあるし、これを単に「快適」などということで終わらせず、しっかりそのリソースを活用できるようになるにはそれなりにスキルがいる。 同時に、非常に性能の限られたマシンを最大限に活躍させるのにもスキルがいる。

だから「欲しい」で最大限与えるのは不毛なのだけれど、特別な理由がなければ特別な使い方をしない限り通常は不足しないように設定するのが好ましい。 そして、その「通常の使い方におけるリソース要求量」が「なにをどうやってしてるか」によってかなり差が出るのだ。

だから、その違いによって異なる性能のコンピュータを設定するのは悪くないだろうと思う。

だが、そこに変な要素が加わるのはさすがにまずい。

例えば、グレードの上下が地位の上下に比例するようにするとか。 これはもう、柔軟な更新ができず、まとめて更新なんてなったらすさまじい費用と税金がかかる最悪なパターンだと言っていい。

それから、「エンジニアよりもバックオフィスが下」というのもだ。 どちらかといえば日本のITはMS Officeに依存しているような面があり、効率がよくないMS Officeで、無駄に巨大なExcelシートを開くというようなことも割と珍しくないだろう。 そう考えると、「メモリ使用量が8GBを越える普通な使い方」は事務方のほうが想定しやすいほどだ。

現実的には

4GBというのは相当に厳しい制約だと思う。 普通に使えなくはないけれども、普通の人が普通に使える、にはならない。 経営者側からみれば、そこまでケチって生産性を下げることはメリットがないだろう。従業員が優秀か否かによらず4GBメモリのマシンを採用したならば、せっかくの人員を無駄遣いすることになるのはほぼ間違いないだろう。

8GBか16GBかということはやや難しい。 16GBあれば安心だとは思うが、ラップトップだと簡単に16GBを選択できるモデルは少なく、ハイエンド構成を要求されることが多いのが2018年の事情だ。 だから、「無難な線」という意味ではデスクトップでは16GB、ラップトップでは8GBになると思う。

デスクトップの場合8GBと16GBの金額差は割と小さいことが多く、ちゃんと選べば全体での価格差もあまりない場合が多い。そもそも、調達先はその程度の自由度をもって選択できるところと付き合ったほうがいいだろう (DELLとhpは大変無難な調達先として有名である。DELLはベンダー経由でも入りやすい)。

ラップトップまで16GBを投入するか…ということには著しい疑問があるのだが、会社支給のPCとしてはデスクトップを主軸として16GBにして、必要な場合に限りラップトップを8GBで追加支給するというのが無難なのではないかと思う。

「16GBが必要になる条件なんて限定的だから必要ない」という考え方は避けたほうがいいと思う。経営者ならば、労働者にとって争点になることを余計に作り出すべきではないように思うのだ。 8GBで不足することは稀だが、それを不満に思う人が少なくないし、実際に条件によっては不足するのだから差が小さいのならそこまでケチるよりは16GBを支給するほうが良い経営判断なのではないか。

サイボウズがやっているような32GBだが、私は過剰だと思う。 凄腕も揃うサイボウズで統一するという意味では別に構わないだろうけど、「サイボウズがやってるんだから32GBにすべき!」みたいなのは無視して良い意見だと思う。 4GBに留まっていた時代が異様に長かったが、8GBに移行してからも16GBへの進展はなかなかない。 採用されているメモリ容量は増加がかなり鈍っているのだが、実際のところ16GBを越えると一般ユーザーが活用するのはとても困難なので、10GbEが普及しないのと同じような感じで普及していかないのだと思う。 実際、私もデスクトップユースで16GBを超過することはかなり稀である。以前はあったのだが(使っていると20GBちょっと使っているという時期があった。特にMageiaを使っている時に)、現在は8GBにも到達していないことのほうが多い。

ちなみに、実際のところラップトップで作業しているときは画面スペースがないことから多くのアプリケーションによる並行作業をすることは少なく、また非常に大きなデータを扱うこともないことから8GBで不足気味になることもあまりない (もちろん、これは私が8GBしかメモリがないことを前提として負担をかけないようにしているからだが)。 一方、マルチディスプレイや大型高解像度ディスプレイ、さらには高速ストレージなどを採用して全体的に性能が向上するとマルチタスク性能も上がっていくためそれに伴って必要なメモリ量が増えて8GBを越える傾向がある。

そのため、コンピュータの固定資産としての価値が設定された3年以内に16GBメモリが「不十分な量」になることは考えがたいし、一般的なサポート上限である5年以内でも可能性は相当低いと思う。 だから余程特別な理由がなければ16GBあれば良いだろう。 あればあったで快適な状況や、できることもあるのだが、それは限定的だろうから支給PCの標準とする動機としてはとても弱い。

ハッカー(あるいはワナビー)が個人所有するPCであれば現状16GBしか使っていないとしてもよりメモリを必要とするテクニックを試すためにもより大きなメモリを積んでおいたほうがよかろうとは思うけれど。


  1. 私のスマートフォンはSnapdragon835搭載機だが、Wi-Fi使っててもあまりにおそすぎる。だから私はスマートフォンを必要がなければ触らない。 UXとしては、操作した結果が0.3秒以内に得られないのは失格だ、というのが私の設計方針である。 これは、「遅い」と感じる平均閾値に基づく。↩︎