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
誤解されがちなsleepコマンドの挙動
Search
Satoru Takeuchi
PRO
July 11, 2020
Technology
0
93
誤解されがちなsleepコマンドの挙動
以下動画のテキストです。
https://youtu.be/kF1VicngujU
Satoru Takeuchi
PRO
July 11, 2020
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
260
俺とキャンプ2
sat
PRO
1
98
俺とキャンプ3
sat
PRO
0
84
データ冗長化のしくみRAID 基礎概念とRAID1編
sat
PRO
2
30
RAIDの実現方法
sat
PRO
2
65
Linux環境のCPU上で10ミリ秒間に起こること
sat
PRO
3
110
HDDへのアクセス速度は位置によって変わる!??
sat
PRO
4
54
ボリュームマネージャLVM
sat
PRO
2
88
Best Practices of Production-Grade Rook/Ceph Cluster
sat
PRO
1
2k
Other Decks in Technology
See All in Technology
プロトタイピングによる不確実性の低減 / Reducing Uncertainty through Prototyping
ohbarye
5
390
アクセシビリティを考慮したUI/CSSフレームワーク・ライブラリ選定
yajihum
2
1k
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
320
DMM.com アルファ室採用案内資料
hsugita
1
160
ServiceNow Knowledge Learning Rise up
manarobot
0
210
JSON攻略法.pdf
miyakemito
8
5.1k
現代CSSフレームワークの内部実装とその仕組み
poteboy
7
3.6k
DevOpsメトリクスとアウトカムの接続にトライ!開発プロセスを通して計測できるメトリクスの活用方法
ham0215
2
240
KubeCon EU 2024 Recap “Kubernetes Policy Time Machine: Where to Next?”
ryysud
0
220
Azure Container Apps + Bicep 〜 こんな感じで運用しています
kaz29
2
480
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
240
「スニダン」開発組織の構造に込めた意図 ~組織作りはパッションや政治ではない!~
rinchsan
3
570
Featured
See All Featured
The Invisible Side of Design
smashingmag
294
49k
What’s in a name? Adding method to the madness
productmarketing
PRO
16
2.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
How STYLIGHT went responsive
nonsquared
92
4.8k
Practical Orchestrator
shlominoach
182
9.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
648
58k
Being A Developer After 40
akosma
57
580k
A Tale of Four Properties
chriscoyier
151
22k
Gamification - CAS2011
davidbonilla
76
4.6k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
Designing the Hi-DPI Web
ddemaree
276
33k
Why Our Code Smells
bkeepers
PRO
331
56k
Transcript
誤解されがちな Sleepコマンドの挙動 Jul 11th, 2020 Satoru Takeuchi Twitter: satoru_takeuchi 1
もくじ • sleepコマンドに持たれがちなイメージ • Linuxのプロセススケジューリング • Sleepコマンドの実際 • まとめ 2
もくじ • sleepコマンドに持たれがちなイメージ • Linuxのプロセススケジューリング • Sleepコマンドの実際 • まとめ 3
sleepコマンドに持たれがちなイメージ • ちょうど引数で指定された秒数後に終了する • コマンドの仕様 ◦ Ubuntu 18.04の”Man sleep”より抜粋 Pause
for NUMBER seconds. 4
もくじ • sleepコマンドに持たれがちなイメージ • Linuxのプロセススケジューリング • Sleepコマンドの実際 • まとめ 5
Linuxのプロセススケジューリング • CPU上で複数実行可能プロセスnがいれば所定の時間づつ実行させる CPU上で動作 するプロセス n=1 n=2 n=3 同上 同上
P0 P0 P1 P0 P0 P1 P2 P0 P1 6 時間 * 本当はもうちょっと複雑です
“Sleep 1”コマンドがいる場合 7 CPU上で動作 するプロセス n=1 P0 P0 idle n>=2
P0 1秒 同上 P0以外 P0 または P0 P0以外 P0 P0以外 時間 nが大きいほど延びる 同上 実行開始 実行開始 実行開始 終了 終了 終了 nanosleep()システムコール(後述)呼び出し
もくじ • sleepコマンドに持たれがちなイメージ • Linuxのプロセススケジューリング • Sleepコマンドの実際 • まとめ 8
sleepコマンドの実際 • 少なくとも引数で指定された秒数待つ • sleepコマンドは内部的にnanosleep()システムコールを呼び出している ◦ 仕様をUbuntu 18.04の”Man nanosleep”より確認 •
× コマンド実行0.5秒後に終了 • 〇 コマンド実行2秒後に終了 nanosleep() suspends the execution of the calling thread until either at least the time specified in *req has elapsed, ... 9
実験 • 確認したいこと ◦ Sleepが指定された秒数よりもはるかに遅く終了しうること • やること 1. あるCPU上で大量に無限ループプログラムを実行 ▪
for ((i=0;i<1000;i++)) ; do taskset -c 0 ./sleep 1 & done 2. 同じCPU上でsleepプログラムを実行して経過時間を確認 ▪ Time taskset -c 0 sleep 1 10
もくじ • sleepコマンドに持たれがちなイメージ • Linuxのプロセススケジューリング • Sleepコマンドの実際 • まとめ 11
まとめ • Sleepコマンドは少なくとも引数で指定した秒数後に終了する • システムの負荷が高いときなどに終了までの時間が延びがち • システム内のすべてのスリープ処理に同じことがいえる • ちょうど指定した秒数後に終了するという前提を置くべきではない 12