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
92
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CFS入門
CFS に入門しようとしました。
xorphitus
December 15, 2015
Transcript
11 slides
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 してるタスクが問題を起こすので、実行順序に例外が設けられている 続きはまた今度
More Decks by xorphitus
See All by xorphitus
オリジナリティのあるGitLabを標準に近づける
xorphitus
1
800
マイクロサービスを作ろう
xorphitus
0
160
コンテナ起動への道
xorphitus
0
170
型システムを学ぼうとした結果
xorphitus
0
83
M-x doctor
xorphitus
0
180
型で数を表そう
xorphitus
0
110
AOT と direct linking
xorphitus
0
93
HyperLogLog
xorphitus
0
130
immutable database
xorphitus
0
330
Other Decks in Programming
See All in Programming
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
160
protojson における文字化けの扱い
kazuki1023
0
410
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.3k
[DroidKnights 2026] Workflow AX: From Auto-Documented Policies to E2E Testing
raeminkang
0
570
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
260
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
750
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.2k
そのデザイントークン、Flutterでも同じ見た目になりますか?
nakamizu
0
340
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.9k
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
640
Engineering Biometric UX Across Android Versions | DroidKnights 2026
ryunen344
1
200
AI Augmentation Techniques with Liberty
ivargrimstad
1
470
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
77
5.6k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
A designer walks into a library…
pauljervisheath
211
25k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
590
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Designing Powerful Visuals for Engaging Learning
tmiket
1
650
Testing 201, or: Great Expectations
jmmastey
46
8.4k
Google's AI Overviews - The New Search
badams
0
1.7k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
640
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
660
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
520
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
980