kakts-log

programming について調べたことを整理していきます

詳解システムパフォーマンス第6章 CPUアーキテクチャのまとめ

詳解 システム・パフォーマンス

詳解 システム・パフォーマンス

最近発売された「詳解システムパフォーマンス」を買って読み進めています 第6章のCPUアーキテクチャの項目が勉強になったので、簡単にまとめます。

CPUの基礎用語

  • プロセッサ
    プロセッサボードのソケットなどに装着される物理チップ。 一つ以上のCPUをもつ
  • コア マルチコアプロセッサに含まれる、独立したCPUインスタンス CMP(chip level multi processing)と呼ばれるprocessorのスケーリング方法として使える
  • ハードウェアスレッド 1コアの上で複数スレッドの並列実行をサポートするCPUアーキテクチャのこと。各スレッドは独立したCPUインスタンスとして扱われる。 マルチスレッディングはこのスケーリングアプローチの内の一つ
  • CPU命令
    CPU命令セットに含まれる1個のCPUオペレーション
  • 論理CPU
    仮想プロセッサとも呼ばれる。 OSのCPUインスタンスであり、ハードウェアスレッド、コア、シングルコアプロセッサのどれかで実装される

CPU architecture

4コア、8ハードウェアスレッドをもつシングルプロセッサを考えた場合、以下のように図で表せる。
f:id:kakts:20170309235424j:plain

ハードウェアスレッドは、それぞれ1個の論理CPUとして扱うことができるため、OSからこのシングルプロセッサを見た時、8個のCPUを持っているように見える。 OSはさらにスケジューリングの最適化を行うために、どのCPUがどのコアに乗っているかといった情報を持っている場合がある。

CPU memory cache

プロセッサには様々なハードウェアキャッシュを持っており、メモリI/Oのパフォーマンス向上のために有用である。
キャッシュのサイズとI/Oスピードはトレードオフの関係にあり、高速になるほどCPUの近くに位置する。 キャッシュには、大きく分けて2種類あり、プロセッサの中、外にあるかで分けられる。
プロセッサ内にあるものは統合キャッシュと呼ばれることがあり、現在では主流となっている。

CPU run queue

スレッドには2つの実行状態があり、CPU上で実行中の場合と、CPUでの処理を待っている実行可能状態がある。
処理待ちのスレッドは、カーネルスケジューラにより、CPUのランキューにキューイングされ、順番にCPUの処理を待つ。
ランキューにキューイングされたスレッドの数は、CPUの飽和状態を示す重要なパフォーマンス指標となる。

マルチプロセッサシステムにおいて、カーネルはCPUそれぞれにランキューをもち、スレッドを同じランキューにキューイングし続けようとする。
なぜ同じランキューを選ぶかというと、CPUはスレッドのデータをキャッシュするため、パフォーマンスが良くなるからである。
この、スレッドに対して特定のランキューを選ぶアプローチをCPUアフィニティ と呼ぶ。