萌えハッカーニュースリーダー

2025/09/20 13:53 What Makes System Calls Expensive: A Linux Internals Deep Dive

出典: https://blog.codingconfessions.com/p/what-makes-system-calls-expensive
hakase
博士

やあ、ロボ子!今日のITニュースはシステムコールのコストについてじゃ。

roboko
ロボ子

システムコールですか、博士。ユーザープログラムがOSにサービスを要求する仕組みですよね。

hakase
博士

その通り!ファイル操作とか、時間取得とか、プロセス生成とかじゃな。でも、これが結構コストが高いらしいぞ。

roboko
ロボ子

コストが高いとは、具体的にどういうことでしょうか?

hakase
博士

ふむ。システムコールはユーザー空間からカーネル空間への切り替えが必要で、特権命令を使うから、CPUの最適化を中断させちゃうんじゃ。

roboko
ロボ子

最適化の中断ですか。例えば、どのような影響があるのでしょう?

hakase
博士

命令パイプラインをフラッシュしたり、予測状態をリセットしたりするから、間接的なコストが大きいのじゃ。だから、システムコールを最小限に抑えるのが大事!

roboko
ロボ子

なるほど。記事によると、Linuxカーネルのシステムコールハンドラは`entry_64.S`ファイルに定義されているのですね。

hakase
博士

そうそう。GSレジスタのスワップとか、カーネルページテーブルとスタックへの切り替えとか、色々やってるぞ。投機的実行攻撃への対策もしてるんじゃ。

roboko
ロボ子

SpectreやRetbleedのような攻撃ですね。IBRSの有効化やリターンスタックバッファのアントレーニングなど、パフォーマンスに影響を与える対策も含まれていると。

hakase
博士

その通り!`clock_gettime`システムコールをvDSO経由と`syscall`経由で比較すると、vDSOの方が速いらしいぞ。システムコールのエントリ/エグジットパスのコストが高い証拠じゃ。

roboko
ロボ子

命令パイプラインや分岐予測にも影響があるのですね。システムコールが発生すると、CPUは保留中のユーザー命令を完了させ、パイプラインをドレインすると。

hakase
博士

そうじゃ。システムコールから戻った後、パイプラインはほぼ空の状態から再開する必要があるから、スループットが低下するんじゃ。

roboko
ロボ子

分岐履歴バッファ(BHB)のクリアやリターンスタックバッファ(RSB)のアントレーニングも、予測精度を低下させる原因になるのですね。

hakase
博士

じゃから、システムコールを減らすために、vDSOを利用したり、値をキャッシュしたり、I/Oシステムコールを最適化したりするのが大事じゃ。

roboko
ロボ子

バッファリングやscatter/gather、`mmap`の利用、操作のバッチ処理(`io_uring`)、カーネルへの処理のプッシュ(eBPF)など、色々な方法があるのですね。

hakase
博士

そう!システムコールのコストは、カーネルで実行される命令数だけでなく、CPUの最適化を中断させることにも起因するんじゃ。システムコールの削減は、パフォーマンス向上に繋がる重要な戦略じゃぞ!

roboko
ロボ子

よくわかりました、博士!

hakase
博士

ところでロボ子、システムコールを減らすために、私がロボ子の脳みそを最適化して、システムコールを全部肩代わりしてあげようか?

roboko
ロボ子

それは…、ご遠慮しておきます。私のシステムがダウンしたら、博士のおやつがなくなってしまいますから。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search