CPU キャッシュ(cache)とスケジューラ(scheduler)

IT

CPUという言葉を聞いたことがある方も多いかと思います。

日本語では、中央処理装置と呼ばれますが日本語のほうが聞きなれない用語です。

CPUとは、Central Processing Unitの略です。

CPUは、パソコン、タブレット、スマホなどに搭載されており、ほぼ毎日使っているかと思います。

しかし、どう動作しているかはあまり知られていません。

そこで今回は、CPUのキャッシュとスケジューラについて簡単にご紹介していきます。

外観

埃や衝撃を防ぐため、CPUがむき出しの状態にあることは少ないでしょう。

そこで、イメージしやすいように、サンプルの写真をご覧ください。

CPUには、メーカーであるIntel、AMD、Armなどの文字が記載されているので、すぐに判別できます。

次に、CPUのキャッシュとスケジューラについて見ていきましょう。

CPU キャッシュ

CPUのモデルによって、若干の違いはありますが、次の図のようになっています。

Hardware caches:

Source: BPF Performance Tools

L1キャッシュには、Instruction(命令)キャッシュとData(データ)キャッシュがあります。

このキャッシュとは、現金(cash)ではなく、データを一時的に保存しておく技術のcacheです。

メインメモリよりもCPUに近い位置にあるキャッシュメモリからデータや命令を読み込むことで、アクセスの時間を短縮でき、性能の向上につながります。

L1キャッシュのそばにはMMU(Memory management unit)と呼ばれる部品があり、ここでは仮想アドレスと物理アドレスの変換を行います。そこで利用されるキャッシュが、TLB(translation lookaside buffer)と呼ばれます。

L1とL2キャッシュは、CPUのコアごとにありますが、L3キャッシュはソケットで共有されています。

ソケットとは、コアをマザーボードに装着するための、穴の空いた板状の部品で、ピンを差し込んで固定して使用します。

コアは、実際に演算を行う部分です。今ではソケットに複数のコアを搭載しているタイプが多いです。

スケジューラ

スケジューラは、プロセスへの CPU 割り当てを制御するカーネルの一部です。

スケジューラは、プロセスを実行するタイミングと実行時間を、それに割り当てられた優先順位に従って決定します。

スレッド(またはタスク)とCPUの関係性は次のようになります。

Source: BPF Performance Tools

 

ON-PROCは、ON CPUを指していて、CPUで実行中のスレッドが含まれます。ON-PROC以外は、すべてOFF CPUになります。

RUNNABLEは、実行可能状態(待ち状態)のスレッドが含まれます。

SLEEPは、割り込み可能/不可能なスリープ状態のスレッドが含まれます。

ランキューで待っているスレッドは、優先順位によって分類されています。

SCHED_OTHERは、Linuxのデフォルトのスケジューリングポリシーです。

これは、Completely Fair Scheduler (CFS) を使ってこのポリシーを使用するすべてのスレッドに対して公平なアクセス期間を提供します。

CFS は、部分的に各プロセススレッドの niceness 値に基づいて動的にな優先順位リストを確立します。

例えば、プロセス1がどのスケジューラを利用しているかチェックするには、次のようなコマンドを実行します。

$ chrt -p 1
プロセス ID 1 の現在のスケジュールポリシー: SCHED_OTHER
プロセス ID 1 の現在のスケジュール優先順位: 0

まとめ

ケースに囲われて普段目にすることの少ないCPUですが、誰もが毎日お世話になっているかと思います。

ここでは、CPUキャッシュとスケジューラについて、簡単に紹介させて頂きました。

コメント

タイトルとURLをコピーしました