int 0x80 の向こう側へ ファンクション倶楽部 三村 益隆 takkanm 2009年7月8日水曜日
int 0x80 の向こう側へファンクション倶楽部
三村 益隆takkanm
2009年7月8日水曜日
2009年7月8日水曜日
agenda
自己紹介
int 0x80 とは
最近のカーネルの動向
カーネルのお仕事
2009年7月8日水曜日
自己紹介
1週間ほど前に上京
6月まではカーネル関係のお仕事
ファンクション倶楽部
光画部
2009年7月8日水曜日
2009年7月8日水曜日
int 0x80 とは
ユーザーモードからカーネルモードに切り替えるときに実行されるアセンブラ
ということで、カーネルに関連するお話でも
2009年7月8日水曜日
最近のカーネル
2.6.30 が 6/10 にリリース!!
2.6.29(3/23) から8366個のパッチ
2009年7月8日水曜日
2.6.30 における変更点
tuz から tux へ
日本発プロジェクト2件がマージ
2009年7月8日水曜日
tuz から tux
tuz tux
2009年7月8日水曜日
日本発プロジェクト2件
NIL FS
ログ構造化ファイルシステム
TOMOYO Linux
新しいセキュアLinux
2009年7月8日水曜日
NIL FS
正式名称は New Implementation
of a Log-Structured File System
継続的なスナップショット
64bitのタイムスタンプで2038年問題もクリア
2009年7月8日水曜日
TOMOYO LINUX
セキュアリナックスの一種
パス名ベースによる強制アクセス制御(MAC)
セキュリティーポリシー学習機能
2009年7月8日水曜日
こんなのもあるよ
RCU(Read-Copy Update)「従来のRCUのスケーラビリティの限界は、たかだか数百CPUだった。この長年の性能バグ問題を直す必要がある。だから4096CPUまでスケールする形で再実装した」
KGDB
adaptive lock
2009年7月8日水曜日
最新の情報は
LINUX KERNEL watchhttp://www.atmarkit.co.jp/flinux/index/indexfiles/watchindex.html
Linux Kernel Newbies - LinuxChanges
http://kernelnewbies.org/LinuxChanges
2009年7月8日水曜日
カーネルのお仕事
2009年7月8日水曜日
カーネルのお仕事タスク管理
O(1) スケジューラー
メモリ管理
Split LRU
ファイル管理
非同期 I/O
2009年7月8日水曜日
タスク管理
2009年7月8日水曜日
O(1)スケジューラー
その名の通りO(1)で動作するように設計されたスケジューラー
カーネル2.4から2.6の変更点の目玉のひとつ
2009年7月8日水曜日
O(1)の仕組み
CPU ごとに優先度付きのタスクキューを持つ
task_struct
優先度高 低
CPU
2009年7月8日水曜日
O(1)の仕組み
優先度の一番高いところの先頭が実行タスクとして選ばれる
優先度高 低
CPU
2009年7月8日水曜日
O(1)の仕組み
タスクが実行時間を使いきるとタスクキューから外される
優先度高 低
CPU
2009年7月8日水曜日
O(1)の仕組み
CPU
外されたタスクはCPUの持つもう一つのキューに繋がれる
2009年7月8日水曜日
O(1)の仕組み
CPU
active queue
外されたタスクはCPUの持つもう一つのキューに繋がれる
2009年7月8日水曜日
O(1)の仕組み
CPU
active queue
expired queue
外されたタスクはCPUの持つもう一つのキューに繋がれる
2009年7月8日水曜日
O(1)の仕組み
CPU
active queue
expired queue
active queueに繋っているタスクが無くるまでタスクを選択実行
2009年7月8日水曜日
O(1)の仕組み
CPU
active queue
expired queue
active queueのタスクが空になるとexpired queueがactive queueにな
2009年7月8日水曜日
O(1)スケジューラーの特徴
CPU単位でタスクキューを持つので、マルチCPU環境でもスケールしやすい
2009年7月8日水曜日
キューが空になったとき
CPUが持っているタスクが全て完了すると他のCPUのタスクを貰う
貰えるタスクが無い場合、IDLE
タスクを実行
2009年7月8日水曜日
実行されるCPU
タスクが実行されるCPUは通常固定される
キャッシュやTLBの利用効率をあげるため
CPUのbusy状態に偏りがある場合はロードバ
ランスされる
実行されるCPUを固定することもできる
2009年7月8日水曜日
メモリ管理
2009年7月8日水曜日
ページキャッシュ解放戦略
ページキャッシュをLRUにて管理
active list
inactive list
2009年7月8日水曜日
ページキャッシュ解放戦略
ページキャッシュをLRUにて管理
active list
inactive list
回収時はinactive list から回収する
2009年7月8日水曜日
active から inactive
ページが active list から inactive list に繋れるのはメモリ回収時
active list に繋っているページから、最近アクセスされていないと思われるページを inactive list に繋げる
2009年7月8日水曜日
active から inactive
ページが active list から inactive list に繋れるのはメモリ回収時
active list に繋っているページから、最近アクセスされていないと思われるページを inactive list に繋げる
2009年7月8日水曜日
回収されるページ
inactive list に繋れているページ全てが回収対象になるとは限らない
inactive listに繋れてから実回収までの間に参照されている場合とか
2009年7月8日水曜日
問題点大量のメモリが搭載されていると捜査するメモリ量が多くなり、効率が悪い
速度
解放可能なメモリ量
2009年7月8日水曜日
split LRU
カーネル2.6.28でマージ
従来2本しかなかったリストを5本に増量
キャッシュの性質によって管理リストを分けることにより、解放効率をあげる
2009年7月8日水曜日
5 つの管理リスト
ページキャッシュ active, inactive
匿名ページ active, inacrive
回収不可能ページ用
2009年7月8日水曜日
ファイル管理
2009年7月8日水曜日
非同期I/Oの種類
posix準拠 aio
カーネルによる aio
2009年7月8日水曜日
posix準拠 aio
posix準拠のaioインターフェース
aio_read(), aio_write()など
ライブラリ側でI/O用スレッドを実行
librt を使用
2009年7月8日水曜日
カーネルによるaio
カーネル内部で非同期にI/Oが処理される
I/Oはカーネルスレッド(aio)が処理
2009年7月8日水曜日
完了通知
プロセスがI/O完了を確認するのにシステムコールを発行する必要が無い
AIOリングと呼ばれるバッファに完了通知が書きこまれる
2009年7月8日水曜日
何故システムコールがいらない?
AIOリングはプロセスのページユーザーモードのアドレス空間にマッピングされる
カーネルモードの全プロセスからアクセス可能
ユーザープロセスからもアクセス可能
2009年7月8日水曜日
ほんの少しでもカーネルの世界に興味を持っていただけたでしょうか?
2009年7月8日水曜日
ご静聴ありがとうございました
2009年7月8日水曜日