30
Kernel Overview Kai Sasaki(@Lewuathe)

Kernel overview

Embed Size (px)

Citation preview

Page 1: Kernel overview

Kernel OverviewKai Sasaki(@Lewuathe)

Page 2: Kernel overview

Linux Kernelとは• Unix Likeなオペレーティングシステム

• 世界で最も成功したOSSのひとつ

• ハードウェアとアプリケーションの仲立ちとなるような多くの機能を提供

• 最新安定版 3.19(2015年2月現在)

Page 3: Kernel overview

ディストリビューション• ユーザランドの様々なソフトウェアを付属させて配布

• Debian系(Ubuntu)

• Fedora系(RHEL, CentOS)

• この資料ではRHEL 7準拠

Page 4: Kernel overview

今日の話1.カーネルの全体像

2.プロセスとメモリ管理(用語メイン)

3.ファイルシステム(用語メイン)

4.ネットワーク(用語メイン)

5.デバイス(用語メイン)

6.リソース制御(用語メイン)

7.カーネルインストール

Page 5: Kernel overview

カーネルの全体像

ソースツリーを眺める

Page 6: Kernel overview
Page 7: Kernel overview

ドキュメント

アーキテクチャ依存部

ブロックデバイス 共通部分

デバイスドライバ

ファイルシステム

スケジューラなど

メモリ管理

ネットワーク

Page 8: Kernel overview

プロセスとメモリ管理• マルチタスクの実現のため複数プロセスを スケジューリングする必要がある

• スケジューラ

• O(1): 経験則的な優先度変動を含む(~2.6.23)

• CFS: 現在迄のCPU使用時間にのみ基づく

Page 9: Kernel overview

プロセスとメモリ管理• Linuxのスケジューリングポリシー

• TSS(Time Sharing System)

• 割り当てられた時間だけCPUを使う

• リアルタイムクラス

• 静的な実行優先度を持つ

Page 10: Kernel overview

プロセスとメモリ管理• Linuxではプロセスの静的な優先度は0-99

• TSSクラスでの実行優先度は常に0

• リアルタイムクラスの実行優先度は1-99に設定可

Page 11: Kernel overview

プロセスとメモリ管理ただしO(1)スケジューラだとTSSクラスでも動的に優先度が変更される。

•長時間CPUを占有→優先度下がる

•ユーザとのやりとりを行うような対話型プロセスはCPU使用時間が短い→優先度上がる

結果的にユーザへの応答反応がよくなる

Page 12: Kernel overview

プロセスとメモリ管理CFS(Completely Fair Scheduler)はvruntimeを基にスケジューリングを実施

•すべてのプロセスからvruntimeが最も短いものにCPUを割り当てる

•内部的に赤黒木で管理

14

9 14

8 12 27

3 13

15

17

Page 13: Kernel overview

ファイルシステム• ブロックデバイスのデータをファイルとして抽象的に管理するためのシステム

ファイルシステムカーネル

ユーザプログラム

ブロックレイヤー

デバイスドライバ

HDD

Page 14: Kernel overview

ファイルシステム

• LinuxのファイルシステムはVFSと個別のファイルシステムに分けられる

• proc, sysfs, cgroupfsなどカーネルのインタフェースとしても実装されている

Page 15: Kernel overview

ファイルシステム

23のファイルシステムをサポート

Page 16: Kernel overview

ファイルシステム

file_operations構造体

inode_operations構造体

address_space_operations構造体 

VFS ext4

ext4_file_operations構造体

ext4_file_inode_operations構造体

ext4_dir_inode_operations構造体

ext4_da_aops構造体 

Page 17: Kernel overview

ファイルシステム分類 例

UFS Base ext2

ジャーナリング ext3, ext4, XFS

ログストラクチャード nilfs2

Copy on Write Btrfs

Page 18: Kernel overview

ネットワーク• Linuxのネットワークシステムは以下の4つに分けられる

• ソケットインターフェイス

• プロトコルスタック

• ネットワークデバイス

• 付加機能

Page 19: Kernel overview

ネットワークユーザプログラム

ソケットインタフェース

プロトコルスタック(TCP/IPなど)付加機能

(ファイアウォール, NAT変換 etc) ネットワークデバイス

関連の処理

カーネル

ネットワークデバイス

Page 20: Kernel overview

ネットワークnetfilterがパケットフィルタリングやNAT変換の機能を担っており、iptablesコマンドから操作

3.13からnftablesが実装され、nftコマンドでライブラリ(libnftnl)を経由して操作する

Page 21: Kernel overview

デバイス• データの入出力、保存などを行うための機器

• カーネルはデバイスドライバを用いてこれらを制御

• デバイスの種類

• キャラクタデバイス

• ブロックデバイス

• ネットワークデバイス

Page 22: Kernel overview

デバイスキャラクタデバイスはキャラクタ単位のデータをストリームとして扱う(例:キーボード)

キャラクタデバイスにアドレスなどの概念はない

一方でブロックデバイスはデータをブロック単位で処理するデバイス。ランダムアクセス可(例:ストレージデバイス)

通常はファイルシステムを構築してアクセスする

Page 23: Kernel overview

デバイスネットワークインタフェースはネットワーク通信のデータを扱う

キャラクタデバイス

ブロックデバイス

Page 24: Kernel overview

デバイス• ハードウェアからの入出力を処理するために割り込みが用いられる

• 割り込みには2種類

• ハードウェア割り込み

• ソフトウェア割り込み

Page 25: Kernel overview

リソース制御メモリやCPUの公平な配分と効率的使用、そして排他制御を担う

2.6.24以降リソースを統一的に制御するためにインタフェースが導入された

• cgroup

• namespace

Page 26: Kernel overview

リソース制御cgroupはプロセスをグループ化して任意のリソースを割り当てるためのフレームワーク

Page 27: Kernel overview

リソース制御namespaceはカーネルが提供するリソースの 名前付けを共有できる空間を提供する

namespace 管理対象PID プロセスIDUTS ホスト名、ドメイン

MOUNT ファイルシステムのマウント関係Network ネットワークデバイスのルーティング

IPC 共有メモリ、セマフォUID ユーザID, グループID

Page 28: Kernel overview

リソース制御

カーネル

cgroup namespace

LXC or Docker

Page 29: Kernel overview

カーネルインストール

デモ

Page 30: Kernel overview

$ sudo su # yum groupinstall “Development Tools” # yum groupinstall “Additional Development” # yum install asciidoc perl-ExtUtils-Embed xmlto zlib-devel \ newt-devel net-tools bc design pcutils-devel wget rpm-build gcc \ hmaccalc pesign

$ wget http://vault.centos.org/7.0.1406/updates/Source/SPackages/ kernel-3.10.0-123.8.1.el7.src.rpm $ rpm -ivh kernel-3.10.0-123.8.1.el7.src.rpm

$ cd ~/rpmbuild/SPECS $ rpmbuild --nodeps -bp --target=x86_64 kernel.spec

$ sudo su # rpm -ivh —force ~/rpmbuild/RPMS/x86_64/ kernel-3.10.0-123.8.1.e17.local.x86_64.rpm