⭐️Linux: CPU, コア, スレッドとCloud Run

前述の「厨房」の例えで、物理CPU → コア → スレッド → 論理CPU の関係を1枚の図で押さえる。

【 1物理CPU / 2コア / 各2スレッド の例 】

┌──────────── 物理CPU(厨房 = チップ1個)────────────┐
│                                                    │
│   ┌── コア0(料理人)──┐   ┌── コア1(料理人)──┐   │
│   │  手    手         │   │  手    手         │   │
│   │ (Th0) (Th1)       │   │ (Th2) (Th3)       │   │
│   └───────────────────┘   └───────────────────┘   │
│                                                    │
└────────────────────────────────────────────────────┘

  論理CPU の数 = 手(スレッド)の総数 = 4
                = OS からは「CPUが4つある」ように見える
                = vCPU 4 と同じ意味
  • 物理CPU:チップ1個(厨房) → PCやCloud Runの1コンテナは基本これが1つ
  • コア:チップ内の頭脳(料理人)。「本当に同時に計算できる数」の上限を決める
  • スレッド:1コアが同時に回せる作業ライン(手)。SMT/ハイパースレッディングで1コア=2手など
  • 論理CPU(= vCPU):手の総数。OSがタスクを割り当てる単位であり、cpu や CPU数 の設定値はこれを指す

ポイント:設定画面の「CPU数」「cpu: “2”」は、コア数ではなく論理CPU(手=スレッド)の数。 「1物理CPU / 4コア / 各2スレッド」なら、指定できる論理CPUは最大 8。

Cloud Run の cpu: "2"

  • アプリに 「論理CPU(作業ライン)を2つ」 割り当てる設定
    • = 手が2本ある = タイムスライスで回す「土俵」が2つある、というイメージ
  • 「CPUが1つでコア数が2つ」と捉えても実用上は問題ないが、正確には「論理CPU(vCPU)が2つ」
    • 裏側(データセンター)の巨大な物理CPUから「2手分」を切り出して貸してくれている状態
    • アプリから見れば「論理CPUが2つあるマシン」に見えるので、そう理解しておけばよい
アプリ(OS)から見える世界          クラウドの裏側(実態)

┌──── 割り当て分 ────┐             ┌───── 巨大な物理CPU ─────┐
│ 論理CPU0  論理CPU1 │ ◀─ 切り出し ─ │  ▢▢ ▢▢ ▢▢ ▢▢ ▢▢ ...   │
│  (手1)    (手2)    │             │  (多コア・多スレッドの山)  │
└────────────────────┘             └─────────────────────────┘
        cpu: "2"
        = 論理CPU 2つ = vCPU 2
  • 論理CPUが2つあるので、2つのプロセスを本当に同時に動かせる(=並列 / parallelism)
    • 対して、1つの論理CPU上でタイムスライスによって切り替えながら動かすのは「見かけの同時実行」(=並行 / concurrency)
    • cpu: "2" にする = この並列度(同時に走らせられる本数)を2に増やす、ということ