Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CFS入門
Search
xorphitus
December 15, 2015
Programming
91
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CFS入門
CFS に入門しようとしました。
xorphitus
December 15, 2015
More Decks by xorphitus
See All by xorphitus
オリジナリティのあるGitLabを標準に近づける
xorphitus
1
800
マイクロサービスを作ろう
xorphitus
0
150
コンテナ起動への道
xorphitus
0
170
型システムを学ぼうとした結果
xorphitus
0
82
M-x doctor
xorphitus
0
180
型で数を表そう
xorphitus
0
110
AOT と direct linking
xorphitus
0
92
HyperLogLog
xorphitus
0
130
immutable database
xorphitus
0
330
Other Decks in Programming
See All in Programming
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
460
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
760
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
330
速習iPhone Duo対応
yuukiw00w
2
980
Java 27新機能 / Java 27 new features
kishida
2
220
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
240
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
気持ちぃ〜角丸 Squircle
ryu1013
0
230
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
SREの越境 / SRE Collaboration
y0hgi
2
300
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
22
22k
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
960
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
480
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
720
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
Become a Pro
speakerdeck
PRO
31
6.3k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
790
Chasing Engaging Ingredients in Design
codingconduct
0
350
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
390
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Transcript
CFS入門 @xorphitus (2015-12)
これまでのあらすじ • 最初は ◦ BFS (Brain Fuck Scheduler): プロセススケジューラ ◦
BFQ (Buget Fair Queueing): I/Oスケジューラ • の、どっちかの話をしようと思った ◦ yaourt -S linux-ck で両者対応パッチの当たったカーネルが入るよ • しかしところが • 「あれ、そもそも自分、スケジューラ全然分かってねえや」 • 「よし基本っぽいところから勉強しよう」 • 「じゃあスタンダードっぽいプロセススケジューラでいいや」←いまここ
いやー、今回やろうと思ってたんだけどなー • Linux プロセススケジューラ基礎 • O(1) スケジューラとの比較 • BFS との比較
• カーネルコードリーディング • 実際に色んなプロセススケジューラを 動かしてみた 間に合いませんでした・・・
そもそもの基本概念 CFS 以前に、CPUがマルチタスクをどうやって捌いてるかって話 基本的には何となく知っての通り、N個のタスクを随時切り替えつつ実行する task 1 task 2 task 3
1 2 3 4 5 6
んで、CFS Kernel 2.6.23 から導入されたプロセススケジューラ 歴史ありますね
Linux Kernel 4.2.7 の場合 2009年のこの記事を最初参考にしていたが http://www.atmarkit.co.jp/flinux/rensai/watch2009/watch09c.html 現在はちょっと変わってるっぽい (パラメータチューニング程度?) https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/kernel/sched/fair .c?id=refs/tags/v4.2.7
sched/fair.c と、ファイル名まで FAIR である
一周にかける時間をまずは均等に考える CFS の場合、一周にかける時間 (period) は「基本的には」 sysctl_sched_latency = 6ms * (1
+ log(コア数)) period = sysctl_sched_latency task 1 ・・・ period(ms) task n task 3 task 2
各タスクにかける時間に重みをつける nice値を考慮すると、一タスク当たりの時間 (slice) は weight = 1.25 ^ (-nice) slice
= period * weight / total_wight task 1 ・・・ task n task 3 task 2 nice値の小さいものが 幅をきかせる period(ms) slice
ただし period には下限がある タスクが増えすぎると slice が小さくなりすぎコンテキストスイッチのコストがやばいため (nr_running は稼働中プロセス数) sysctl_sched_min_granularity =
0.75 ms * (1 + log(コア数)) static u64 __sched_period(unsigned long nr_running) { u64 period = sysctl_sched_latency; unsigned long nr_latency = sched_nr_latency; if (unlikely(nr_running > nr_latency)) { period = sysctl_sched_min_granularity; period *= nr_running; /* ここで「最低 slice * タスク数」を period に設定している */ } return period; }
タスクの実行順序はどうなるのか 赤黒木で順序を保持してるらしい • 探索、挿入、削除の最悪計算時間が O(log n) • 探索速度だけで見るとO(1) スケジューラ に劣る
◦ ただしこいつはタスク実行が偏る 「基本は」以下の式で算出された vruntime の小さい順に並ぶ vruntime = そのタスクが動作している時間 + 1.25 ^ nice つまり、nice 値を考慮しつつも、長いこと専有しているやつがのさばらないように調整さ れる → FAIR
タスクの順序、例外事項 vruntime によって完全な公平性が保たれるかというと、案外そうでもない Sleep してるタスクが問題を起こすので、実行順序に例外が設けられている 続きはまた今度