CPU のアーキテクチャ
理解のために小咄形式でまとめました。長くなってしまったので5分で読めないかも。
システムパフォーマンス関連記事の目次
登場人物
- 太郎(後輩):入社1年目の若手エンジニア。
- 花子(先輩):システムエンジニア歴3年の先輩。
場面:オフィスの開発ルーム
太郎が CPU のアーキテクチャ
に関する資料を見ながら、花子に質問する。
太郎:「花子先輩、CPU のアーキテクチャ
って具体的に 何を指す
のか、いまいちピンとこないんです…。」
花子:「なるほどね。CPU アーキテクチャ
とは、 プロセッサの設計や動作の仕組み
のことよ。 ハードウェアとソフトウェアの視点
から考えると分かりやすいわ。」
CPU アーキテクチャ
花子:「CPU のアーキテクチャ
を理解するには、 2 つの主要な視点
から考えるといいわ。」
- ハードウェアアーキテクチャ
- ソフトウェアアーキテクチャ
1. ハードウェアアーキテクチャ
花子:「ハードウェアアーキテクチャ
とは、 CPU の物理的な構造やコンポーネントの配置
のことよ。」
CPU コアとキャッシュ
- CPU は 1 つ以上のコアを持つ(例: デュアルコア、クアッドコア、オクタコア)
- 各コアは L1, L2, L3 のキャッシュを持つ
- L1 は最速だが小さい、L3 は遅いが大容量
花子:「CPU のキャッシュとメモリの構造は、 レストランのキッチンの食材管理 にそっくりなの。」
-
L1 キャッシュ(最速・小容量) → シェフの手元にある調味料(塩・胡椒・オイル)
すぐ使えるけど容量が少ない。シェフは頻繁に使うものだけを置いて、調理の効率を最大化する。 -
L2 キャッシュ(やや遅い・中容量) → キッチンの棚や冷蔵庫の食材(肉・野菜・牛乳)
少し時間がかかるけど、すぐに取り出せる。手元の調味料が足りなくなったら、すぐ補充できるように準備されている。 -
L3 キャッシュ(最も遅いが大容量) → 店の裏にあるストック倉庫
たくさん保管できるが、取りに行くのに時間がかかる。キッチンで足りなくなったら、スタッフが倉庫に行って補充する。
花子:「このように、 よく使うデータ(食材)は手元に、たまに使うものは少し遠くに、大量に保管するものは倉庫に という構造は、 CPU のキャッシュとメモリの階層構造と全く同じ考え方 なのよ。」
CPU のバスとインターコネクト
- CPU 内部では、データをやり取りするための
バス
がある - コア同士は
インターコネクト(リングバス、メッシュ)
で通信 - データの流れが詰まると
スループット低下
の原因になる
花子:「これは 道路のネットワーク
みたいなもので、 渋滞(ボトルネック)
が発生すると データの流れが悪くなる
のと同じね。」
CPU のバスとは?
高速道路と一般道路のネットワーク
花子:「CPU 内部のバスは、データをやり取りするための道路のようなもの なのよ。」
-
メインバス(フロントサイドバス) →
高速道路
- CPU とメモリの間をつなぐ最重要ルート。
- 交通量(データ転送量)が多いので、十分な車線(帯域幅)が必要。
-
内部バス(データバス、アドレスバス) →
一般道路
- 各町(CPU のコアやメモリ)をつなぐローカルな道。
- 一般道路の数が少ないと、データの流れが詰まりやすくなる。
花子:「CPU のバスが 広い道路(帯域幅が広い) なら、大量の車(データ)をスムーズに運べる わ。でも、道路が狭いと、渋滞(データ詰まり)が発生し、スループットが低下する のよ。」
コア同士のインターコネクト
花子:「CPU のコア同士は、データをやり取りするための インターコネクト
で通信しているのよ。」
環状線(リングバス)とメッシュ型道路
-
リングバス(環状線)
- 大都市の環状道路(例: 東京の首都高速環状線、大阪の阪神高速環状線)に似ている。
- データは時計回りまたは反時計回りに流れる。
- ある地点が詰まると、その後のすべての車(データ)に影響が出る。
- メリット:設計がシンプルでコストが低い。
- デメリット:混雑時にデータの流れが遅くなる(レイテンシ増加)。
花子:「片側1車線の環状線 だと、事故や渋滞が発生すると、後ろの車が進めなくなる(ボトルネック) わ。片側3車線の環状線 なら、渋滞を回避しやすく、スムーズに流れる(帯域幅が広い) のよ。」
-
メッシュ型インターコネクト(都市部の道路網)
- 東京やニューヨークのような碁盤目状の道路ネットワーク に似ている。
- 各コア(街)が 複数のルートを通じて接続されている。
- どこかの道が渋滞しても、別の道を通れば回避できる(耐障害性が高い)。
- メリット:通信遅延が少なく、スループットが高い。
- デメリット:設計が複雑でコストが高い。
花子:「リングバス(環状線)は、環状道路で一方通行に流れる道よ。メッシュ型(都市部の道路網)は複数の道があり、最適なルートを選べるわ。メッシュ型のほうが一般的に効率が良い のよ。」
バスの詰まりとスループットの低下
通勤ラッシュと渋滞
🚗 現実のイメージ
- 朝の通勤ラッシュ時、電車やバスが混雑すると、駅や道路が詰まり、移動速度が落ちる。
- CPU でも バスの帯域幅が狭いと、データが渋滞して処理が遅くなる。
💡 解決策
- バスの帯域幅を広げる(高速道路の拡張) → より多くのデータを同時に流せる。
- 別のルートを用意する(複数の鉄道路線を作る) → データの流れを分散し、混雑を避ける。
高性能 CPU での対策
データセンターの通信ネットワーク
データセンターでは、多数のサーバー(コア)が大量のデータをやり取りする。
-
シンプルなネットワーク(リングバス)
- 小規模なデータセンターでは効率的。
- しかし、大量のリクエストが来ると ボトルネックが発生しやすい。
-
メッシュ型ネットワーク
- 大規模なデータセンターは、高速通信のためにメッシュ型を採用。
- トラフィックが分散され、処理速度が向上。
花子:「リングバスは小規模向け、メッシュ型は大規模向け なのよ。」
太郎:「つまり、CPU のバスは 道路のネットワーク
みたいなもので、 リングバスは環状線、メッシュ型は都市部の碁盤目状の道路 ってことですね!」
花子:「その通りよ。だから、CPU の設計では、ボトルネックを避けるために適切なバス構成を選ぶことが大事 なの。」
マルチプロセッサと NUMA
-
マルチプロセッサ(SMP) →
複数の CPU が対等に動作
-
NUMA(非均一メモリアクセス) →
CPU に近いメモリが速い、遠いと遅い
- NUMA は特に
サーバーやデータセンター
で重要
花子:「これは 複数のキッチンを持つレストラン
みたいなもので、 近くの食材(メモリ)を使うと速い
けど、 遠い場所にあると時間がかかる
のよ。」
マルチプロセッサ(SMP)
複数のシェフがいるレストラン
花子:「マルチプロセッサ(SMP)は、複数の CPU が対等に動作し、並行して処理を行う仕組み なの。これは 複数のシェフがいるレストランのキッチン に例えられるわ。」
-
シングルプロセッサ(1人のシェフ)
- シェフが 1人で料理をすべて作る。
- 1つの料理を作り終えるまで、次の料理に手をつけられない。
- 混雑時に注文がたまると、処理速度が落ちる。
-
マルチプロセッサ(複数のシェフ)
- 複数のシェフが並行して料理を作る。
- 1人がメインディッシュ、1人がサイドメニュー、1人がデザートを担当すると、全体の調理速度が向上。
- 各シェフが 独立して働くが、同じキッチン(共有メモリ)を利用 するため、効率的に作業できる。
花子:「このように、 CPU が増えると、並行処理能力が向上し、全体の処理速度が上がる のよ。」
大規模なコールセンター
花子:コールセンターも マルチプロセッサの仕組み に似ているわ。」
-
シングルプロセッサ(1人のオペレーター)
- 1人のオペレーターが全ての電話を対応する。
- 1つの電話を処理している間、他の電話は待たなければならない。
-
マルチプロセッサ(複数のオペレーター)
- 複数のオペレーターが並行して対応 することで、待ち時間を減らし、全体の処理能力が向上。
- それぞれが 同じ顧客データベース(共有メモリ)を参照しながら対応する。
花子:「こうすることで、一度に多くの問い合わせを処理できるようになる のね。」
NUMA(非均一メモリアクセス)
複数のキッチンを持つレストラン
花子:NUMA(Non-Uniform Memory Access)は、CPU に近いメモリほどアクセスが速く、遠いメモリにアクセスすると遅くなる という仕組みよ。これは 複数のキッチンを持つレストラン に例えられるの。」
理想的な環境(SMPに近い)
- それぞれのシェフが 自分のキッチン(メモリ)で料理を作る。
- 材料が すぐ手の届く範囲 にあるため、最速で調理 できる。
NUMA環境(大規模レストラン)
- あるキッチンで材料が足りなくなると、別のキッチン(遠くのメモリ)から取り寄せる必要がある。
- 近くにある材料ならすぐに使えるが、遠くの倉庫から取りに行くと時間がかかる。
- そのため、各キッチンは できるだけ自分のエリアの食材を使うほうが効率がいい。
花子:「これが NUMA の基本概念で、CPU が自分に近いメモリを使うと速く、遠くのメモリにアクセスすると遅くなるという仕組みなの。」
分散オフィスのプリンター利用
花子:「NUMA の概念は、会社のプリンター利用 にも似ているわ。」
SMP(均一メモリアクセス)の場合
- オフィスのどこにいても、すべての人が同じ速度でプリンターを使える。
NUMA(非均一メモリアクセス)の場合
- 各部署ごとに 専用のプリンター(ローカルメモリ) を持っている。
- 自分の部署のプリンターを使う方が速い(CPU が近いメモリを使う)。
- しかし、別の部署のプリンターを使うと、ネットワークを経由するため印刷に時間がかかる(遠いメモリにアクセスすると遅くなる)。
花子:「このように、NUMA 環境では できるだけ近くのリソースを利用することが重要 なのよ。」
シェアオフィスのコーヒーマシン
花子:「大きなシェアオフィスに、各フロアごとにコーヒーマシンが設置 されていると考えてみて。」
-
各フロアの人が自分のフロアのコーヒーマシンを使う(最適なNUMA環境)
- すぐにコーヒーを入れられる(メモリアクセスが速い)。
-
違うフロアのコーヒーマシンを使う(NUMAの遅延)
- 他のフロアまで行く必要があり、時間がかかる(メモリアクセスが遅い)。
花子:「CPU も近くのメモリを使うほど高速で、遠くのメモリにアクセスすると遅くなるのよ。」
太郎:「なるほど!マルチプロセッサ(SMP)は 複数のシェフが並行して料理を作る仕組み で、NUMA は 遠くの食材を取りに行くと遅くなるレストランみたいなもの なんですね!」
花子:「そうよ。だから、NUMA のシステムでは、できるだけ近くのメモリを活用するように設計することが重要 なの。」
2. ソフトウェアアーキテクチャ
花子:「ソフトウェアアーキテクチャ
では、 CPU がどのように命令を処理するか
を考えるの。」
CISC vs RISC
-
CISC(Complex Instruction Set Computer)
複雑な命令を 1 つで処理できる
x86(Intel, AMD)が代表例
-
RISC(Reduced Instruction Set Computer)
シンプルな命令を高速に実行
ARM(スマホ、組み込み機器)、RISC-V などが代表例
花子:「これは オートマ車(CISC)
と マニュアル車(RISC)
の違いみたいなもので、 CISC は一つの操作で多くを処理
し、 RISC はシンプルな操作を素早く繰り返す
のよ。」
仮想化とコンテナ
-
仮想 CPU(vCPU) →
仮想マシン(VM)内でエミュレーションされる CPU
-
コンテナ →
OS レベルの仮想化で、CPU リソースを分割
花子:「これは シェアオフィス
みたいなもので、 仮想マシンは完全に独立したオフィス
、 コンテナは仕切りがあるだけのデスクスペース
なのよ。」
命令セットとシステムコール
- CPU は
決められた命令セット
に従って動作 - アプリケーションが OS にリクエストを出すと
システムコール
を通じて CPU が動作 - 例:
read(), write(), fork(), exec()
など
花子:「これは レストランの注文システム
みたいなもので、 お客さん(アプリ)が店員(OS)に注文し、シェフ(CPU)が料理を作る
のと同じね。」
花子:「CPU のアーキテクチャ
を 高速道路のネットワーク
に例えると、こんな感じね。」
-
ハードウェアアーキテクチャ →
道路の設計
コア = 走行車線
キャッシュ = 近場の駐車場
バスとインターコネクト = 高速道路
-
ソフトウェアアーキテクチャ →
交通ルール
RISC = シンプルな標識でスムーズに進む
CISC = 複雑な信号制御で高度な動きができる
システムコール = 交通整理員(OS)が指示を出す
太郎:「すごく分かりやすいです! ハードウェアとソフトウェアの両方の観点
で CPU のアーキテクチャを考えるのが重要なんですね!」
花子:「CPU のアーキテクチャ
を理解すると、 プロセッサの設計やパフォーマンスの最適化
に役立つわ。」
太郎:「ありがとうございます! NUMA の影響を調べるために lscpu コマンドで CPU アーキテクチャを確認
してみます!」
参考リンク
システムパフォーマンス関連記事の目次
システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。