スレッド切り替えレイテンシ:原因、違い、低減策
OSがCPUの実行をあるスレッドから別のスレッドへ切り替えるのに要する時間。原因、プロセス切り替えとの違い、測定方法、性能への影響、低減策を解説する。
概要
スレッド切り替えレイテンシとは、オペレーティングシステムがCPU上で一つのスレッドの実行を停止し、別のスレッドの実行を開始するまでに要する経過時間である。スケジューラが実行対象として別のスレッドを選んだ際に、プロセッサの実行コンテキストを変更するために生じるオーバーヘッドを表す。このオーバーヘッドは、サーバー、リアルタイムアプリケーション、多数の短命なタスクを用いる並行プログラムなど、スレッド切り替えが頻繁に起こるシステムでは重要となる。
保存および復元される状態
切り替え中には、実行を終えるスレッドのCPU状態を保存し、実行を開始するスレッドの状態を復元しなければならない。一般的な状態要素には、汎用レジスタ、プログラムカウンタとスタックポインタ、プロセッサフラグ、ならびにアーキテクチャ固有のレジスタが含まれる。OSはさらに、カーネルのスケジューリング用データ構造の更新、タイマーおよび割り込み状態の管理、場合によってはメモリ管理機構の調整も必要とする。
レイテンシに影響する主な要因
- ハードウェアとプロセッサ設計:CPUとそのレジスタセットの特性は、状態をどれだけ迅速に保存・復元できるかに影響する。
- OSとスケジューラの実装:オペレーティングシステムのコードパス、ロック、ならびに切り替えがカーネル空間とユーザー空間のどちらで発生するかが重要である。
- キャッシュとTLBの影響:スレッドの切り替えはキャッシュラインの追い出しを招くことが多く、アドレス変換バッファ(TLB)に関する処理が必要になる場合もあり、レイテンシを増大させる。
- スレッドとプロセスの境界:同じプロセス内のスレッド間の切り替えは、アドレス空間の変更が減少または不要になるため、通常は異なるプロセスに属するスレッド間の切り替えよりオーバーヘッドが小さい。
- スレッド方式:ユーザーレベル(グリーン)スレッドは切り替えコストを低くできるが、ユーザーライブラリに依存する。一方、カーネルスレッドではシステムコールとスケジューラとの相互作用が伴う。
コンテキスト切り替えおよびプロセス切り替えとの比較
「コンテキスト切り替え」という用語は、しばしば広い意味で使われる。スレッド切り替えは、CPUが一つのスレッドから別のスレッドへ移るコンテキスト切り替えの一形態である。プロセス切り替えでは通常、アドレス空間の変更、ページテーブルの更新、ときにはTLBエントリのフラッシュといった追加処理が必要になる。対して、同一プロセス内だけで行われる純粋なスレッド切り替えでは仮想メモリの再構成を回避できるため、一般に高速である。
測定、影響、例
レイテンシは、高分解能タイマー、カーネルトレーシング、またはOSが提供するプロファイリングツールによって測定される。スレッド切り替えはプロセス切り替えより小規模であっても、コストがゼロになるわけではない。高頻度で繰り返される切り替えはアプリケーションのオーバーヘッドの大部分を占め、スループットを制限したり、応答時間を増加させたりする可能性がある。厳格なタイミング要件を持つシステムでは、最悪時の切り替え遅延を考慮しなければならない。
切り替えレイテンシを低減する方法
- ロックフリーアルゴリズムの利用や作業のバッチ処理により、不要なブロックとコンテキスト切り替えを減らす。
- CPUアフィニティを利用してスレッドを同じコア上に維持し、キャッシュのコールドスタートとハードウェアに起因するコストを抑える。
- 適切なスレッドモデルを選ぶ。軽量なユーザーレベルスレッドやファイバーは、協調的スケジューリングにおけるカーネル遷移を回避する。
- スケジューラの経路と割り込み処理を簡素化する、リアルタイムカーネルまたは低レイテンシカーネルを構成する。
- システムツールでプロファイリングを行い、OSが提供する優先度やスケジューリングポリシーを調整する。
重要な区別と参考情報
用語の使い方には差がある。「スレッド切り替え」をより広い概念である「コンテキスト切り替え」と区別する著者もいれば、両者を同義として扱う著者もいる。スレッドとスケジューリングの概念については、スレッドおよびスレッドライブラリに関する資料(スレッド)を参照できる。プロセス分離と性能については、プロセスに関する解説も参考になる。OSがコンテキスト切り替えを実装する方法とそれに伴うトレードオフの詳細は、カーネル設計の文献やプラットフォーム固有の文書(コンテキスト切り替え、ハードウェアのガイド)で確認できる。
関連項目
著者
AlegsaOnline.com スレッド切り替えレイテンシ:原因、違い、低減策 Leandro Alegsa
URL: https://ja.alegsaonline.com/art/99624