Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Linux環境のCPU上で10ミリ秒間に起こること
Search
Satoru Takeuchi
PRO
March 20, 2024
Technology
3
340
Linux環境のCPU上で10ミリ秒間に起こること
以下動画のテキストです
https://youtu.be/6dZuOq5P468
Satoru Takeuchi
PRO
March 20, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
0
68
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
150
様々なファイルシステム
sat
PRO
0
300
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
390
ソースを読むプロセスの例
sat
PRO
22
17k
メモリマップトファイル
sat
PRO
1
150
「Linux」という言葉が指すもの
sat
PRO
4
230
APIとABIの違い
sat
PRO
5
240
ファイルシステムへのアクセス方法
sat
PRO
0
96
Other Decks in Technology
See All in Technology
Redux → Recoil → Zustand → useSyncExternalStore: 状態管理の10年とReact本来の姿
zozotech
PRO
21
9k
メッセージ駆動が可能にする結合の最適化
j5ik2o
9
1.5k
Dev Containers と Skaffold で実現する クラウドネイティブ開発環境 ローカルのみという制約に挑む / Cloud-Native Development with Dev Containers and Skaffold: Tackling the Local-Only Constraint
bitkey
PRO
0
130
JavaScript パーサーに using 対応をする過程で与えたエコシステムへの影響
baseballyama
1
140
AIエージェントによるエンタープライズ向けスライド検索!
shibuiwilliam
4
680
ローカルLLM基礎知識 / local LLM basics 2025
kishida
23
6.7k
Progressive Deliveryで支える!スケールする衛星コンステレーションの地上システム運用 / Ground Station Operation for Scalable Satellite Constellation by Progressive Delivery
iselegant
1
210
AI駆動開発を実現するためのアーキテクチャと取り組み
baseballyama
15
12k
単一Kubernetesクラスタで実現する AI/ML 向けクラウドサービス
pfn
PRO
1
350
アジャイル社内普及ご近所さんマップを作ろう / Let's create an agile neighborhood map
psj59129
1
140
Bedrock のコスト監視設計
fohte
2
220
やり方は一つだけじゃない、正解だけを目指さず寄り道やその先まで自分流に楽しむ趣味プログラミングの探求 2025-11-15 YAPC::Fukuoka
sugyan
3
950
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
192
56k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
A designer walks into a library…
pauljervisheath
210
24k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
KATA
mclloyd
PRO
32
15k
It's Worth the Effort
3n
187
29k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
RailsConf 2023
tenderlove
30
1.3k
Transcript
Linux環境のCPU上で 10ミリ秒間に起こること Mar. 20th, 2024 Satoru Takeuchi X: satoru_takeuchi 1
はなすこと • Linux環境(Linuxをインストールしたマシン)で10ミリ秒程度の短い期間にCPU上で 何が起きるかを説明 • 📝多くの仮定を置いて話を簡略化している ◦ Linuxをインストールしているのは物理マシン ◦ 1CPU1コア環境
◦ tickless kernelではない ◦ あらゆる処理の所要時間は 1ms単位 ◦ その他いっぱい 2
前提知識: プロセススケジューリング • CPUリソースを使うプロセスが複数存在すると、CPU上で動作するプロセスをカー ネル内のスケジューラが定期的に切り替えている • プロセスが一度に動ける期間をタイムスライスと呼ぶ ◦ タイムスライスの残量はタイマーというハードウェアを使って確認 (後述)
• 例: プロセスp0,p1が動作中でタイムスライスは両方2ms p0 p1 p0 p1 時間 CPU 3 *1マスが1msに対応
前提知識: システムコール • プロセスがシステムコールを発行すると、カーネルに制御が移って処理を開始す る。完了すると再度プロセスが動き出す p0 カーネル p0 syscall発行 syscall完了
時間 CPU 4
前提知識: システムコール • プロセスがシステムコールを発行すると、カーネルに制御が移って処理を開始す る。完了すると再度プロセスが動き出す p0 カーネル p0 syscall発行 syscall完了
時間 CPU 5 1. syscall判別 2. 個々のsyscallの処理 3. スケジューラ: 次に動くプロセスの決定 p0のsyscall処理
前提知識: デバイス操作 • システムコールの延長でデバイスにアクセスすると、デバイスにI/O発行した後にプ ロセスは待ち状態になり、その後は他のプロセスが動作する • 例: p0がread()を発行し、待ちの間はp1が動作し、I/O完了後は再度p0が動く p0 I/O処理
CPU SSD p1 カーネル カーネル read発行 I/O依頼 p0 6 I/O完了 read完了 時間
前提知識: デバイス操作 • システムコールの延長でデバイスにアクセスすると、デバイスにI/O発行した後にプ ロセスは待ち状態になり、その後は他のプロセスが動作する • 例: p0がread()を発行し、待ちの間はp1が動作し、I/O完了後は再度p0が動く p0 I/O処理
CPU SSD p1 カーネル カーネル read発行 I/O依頼 p0 7 I/O完了 read完了 時間 1. Virtual File System(VFS)層: 全fs共通の read処理 2. 個々のfs: read処理 p0のsyscall処理 1. ブロック層: 全ブロックデバイス共通処理 2. デバイスドライバ: I/O発行処理 3. スケジューラ: 次に動くプロセスの決定 I/O発行処理
前提知識: デバイス操作 • システムコールの延長でデバイスにアクセスすると、デバイスにI/O発行した後にプ ロセスは待ち状態になり、その後は他のプロセスが動作する • 例: p0がread()を発行し、待ちの間はp1が動作し、I/O完了後は再度p0が動く p0 I/O処理
CPU SSD p1 カーネル カーネル read発行 I/O依頼 p0 8 I/O完了 read完了 時間 1. I/O完了処理 2. スケジューラ: 次に動かすプロセスの決定 SSDの割り込み処理 1. fs: 完了処理 2. VFS層: 完了処理 p0のsyscall処理
前提知識: タイマー • プロセスのタイムスライスはタイマーというデバイスで確認 ◦ 定期的にCPUに通知して、割り込みハンドラを実行 • 例: p0,p1が存在し、4msに一回タイマーがCPUに通知 p0
時間計測(実際はカーネルが設定したタイマーが切れたときにちょっと動くだけ CPU タイマー カーネル 通知 9 p0 割り込み p1 カーネル 時間 残り3ms… 時間切れ!
前提知識: タイマー • プロセスのタイムスライスはタイマーというデバイスで確認 ◦ 定期的にCPUに通知して、割り込みハンドラを実行 • 例: p0,p1が存在し、4msに一回タイマーがCPUに通知 p0
時間計測(実際はカーネルが設定したタイマーが切れたときにちょっと動くだけ CPU タイマー カーネル 通知 10 p0 残り3ms… p1 カーネル 時間切れ! 時間 1. スケジューラ: 次に動かすプロセスを決定 割り込み タイマー割り込み処理
状況 • 2つのプロセスp0,p1が存在する • 10ミリ秒の間にやること ◦ p0: 計算->read発行->計算 ◦ p1:
計算し続ける • 途中で一回タイマー割り込み発生 11
10msのうちわけはこんなかんじになる 12 p0 I/O処理 CPU SSD カーネル 依頼 通知 タイマー
時間計測 p1 完了 時間 カーネル p0 p0 カーネル 時間切れ! p1 p1 p1 read発行 通知 read完了 1. Virtual File System(VFS)層: 全fs 共通のread処理 2. 個々のfs: read処理 p0のsyscall処理 1. ブロック層: 全ブロックデバイス共通処理 2. デバイスドライバ: I/O発行処理 3. スケジューラ: 次に動くプロセスの決定 I/O発行処理 1. I/O完了処理 2. スケジューラ: 次に動かすプロセスの決定 SSDの割り込み処理 1. fs: 完了処理 2. VFS層: 完了処理 p0のsyscall処理 1. スケジューラ: 次に動かすプロ セスを決定 タイマー割り込み処理
まとめ • Linux環境では10ミリ秒程度の間にCPU上では様々なことが起きている • これでもかなり簡略化していて、実際はさらに複雑 • そのうち別のどこかで紹介するかも 13