サーバー管理者、通称「鯖缶」になりきれない初級者(ツナ缶)が書くCPUとメモリの話です。ちょっとだけ勉強した内容をまとめました。個人メモの領域ですし、Qiitaを続けている人に取ってはおそらくとっくに知っている知識でしょうし、誤りなどあるかもしれませんがお手柔らかにお願いします
大前提:ハードウェアの限界を超えて動かすことはできない
いくらコード書くのを頑張ってもハードウェアの限界を超えることは不可能。サーバー開発する側だってハードウェアの限界は知っておいた方が良いと思う。理論値限界は超えられないし、伝送距離やTCPコネクション数なども考慮する必要がある。
ハードウェアのことを知っていればどうしてAPやDBをこの構成にしたのかも理解できるので、そのあたりを知っておくべき。
メモリ とは
もう書く必要もないしググった方が早そうだけれど復習として。
メモリ=コンピュータの構成要素の一つで「記憶装置」。データやプログラムの保存・記憶を行う。プロセッサが直接アクセスできる主記憶装置と、それ以外の補助記憶装置に分かれる。主記憶装置には大きく分けて、RAMとROMがある。単純に「メモリ」と呼ぶ場合、多くは「RAM」のことを指す。
- 揮発性メモリ:外部からの給電が途絶えると記憶内容が失われる
- DRAM
- 一定時間経つとデータ消失
- eDRAM(Embedded DRAM)
- メインのASICやプロセッサと同じダイまたはパッケージに統合された、キャパシタベースのDRAM
- SRAM(Static RAM / CPU内のキャッシュメモリ)
- 電源を切らない限り内容を保持
- DRAM
- 不揮発性メモリ:揮発性メモリの対義
- ROM(基本的に読み出し専用。マスクROM、PROM、EPROM、EEPROMなど)
- MRAM(Magnetoresistive Random Access Memory)
- FeRAM(Ferroelectric Random Access Memory)
ストレージはHDD?SSD?
SSDは高価/高速/堅牢/電力効率が高い。HDDは低価格。こうやって書くと価格以外の点でSSD優位に思えるけれど、ニーズに合わせて使い分けたい。
参考:https://www.techradar.com/news/ssd-vs-hdd-which-is-best-for-your-needs
価格
SSDは通常、HDDよりも容量あたりのコストが高い。安くて大容量のHDDに重要なデータを保存するなら、信頼性は要チェック。ユーザーレビューなども確認した方が良さそう。
容量
SSDの速度を活かせるOSなどのプログラムを保存に160〜256GBくらいの容量が小さいSSDを利用し、速度がそれほど重要ではないファイルを保存するのにはHDDがおすすめ。とされている。
速度
スピードとパフォーマンスを考慮するならSSD。
消費電力
消費電力はSSD<HDD。SSDを使用するとラップトップのバッテリ寿命が長くなる(使用するSSDの種類や用途によって異なる)。
CPUのキャッシュメモリについて
プロセッサとメモリの間の性能差を埋めるために、高速なSRAMを利用してキャッシュを格納している。
CPUキャッシュにはCPUにより近いものから順番にL1、L2と数字が上がる。現在CPUによってL2までのものや、L4までのキャッシュを搭載しているものがある。
距離感の例えとして
- L1 : 自分の机
- L2 : 部屋の棚
- L3 : 書庫や資料室
- メモリ : 別の支店
離れれば離れるほど伝送に時間がかかるし、キャッシュは容量が大きいほどデータ転送速度が遅く、記憶密度が高く、省電力と言う性質を持つ。そのため、必要に応じて異なる種類を分けるのが有利、とされている。
L1〜L3のキャッシュメモリ容量一例
メモリに比べるとCPUキャッシュメモリは非常に容量が小さい。前述の要素から、L1, L2を大容量化するとアクセスレイテンシーが増えるので、アクセスが高速で小容量のL1と、L1と比較してアクセスが低速で容量が大きいL2の組み合わせが合理的な解だったと考えられている。
L1 | L2 | L3 |
---|---|---|
32KB | 256KB | 2MB |
32KB | 256KB | 8MB |
測定ベンチマークソフトウェア
メモリ性能の測定を行うソフトウェアについてメモ。
- memtest86+( http://www.memtest.org/ )
- メモリ動作をチェック。無印と+があるが、
こだわりがなければ+を使うのが良さそう。ほぼ同じだそうなので、更新されている方を使うのが良いと思われます。
- メモリ動作をチェック。無印と+があるが、
- CrystakDiskMark( https://crystalmark.info/ja/ )
- ドライブとして認識されているストレージのデータ転送速度を測定。