objectclub2009summer youth session takkanm

Post on 10-Jul-2015

796 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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日水曜日

top related