Upload
kai-sasaki
View
528
Download
0
Embed Size (px)
Citation preview
Kernel OverviewKai Sasaki(@Lewuathe)
Linux Kernelとは• Unix Likeなオペレーティングシステム
• 世界で最も成功したOSSのひとつ
• ハードウェアとアプリケーションの仲立ちとなるような多くの機能を提供
• 最新安定版 3.19(2015年2月現在)
ディストリビューション• ユーザランドの様々なソフトウェアを付属させて配布
• Debian系(Ubuntu)
• Fedora系(RHEL, CentOS)
• この資料ではRHEL 7準拠
今日の話1.カーネルの全体像
2.プロセスとメモリ管理(用語メイン)
3.ファイルシステム(用語メイン)
4.ネットワーク(用語メイン)
5.デバイス(用語メイン)
6.リソース制御(用語メイン)
7.カーネルインストール
カーネルの全体像
ソースツリーを眺める
ドキュメント
アーキテクチャ依存部
ブロックデバイス 共通部分
デバイスドライバ
ファイルシステム
スケジューラなど
メモリ管理
ネットワーク
プロセスとメモリ管理• マルチタスクの実現のため複数プロセスを スケジューリングする必要がある
• スケジューラ
• O(1): 経験則的な優先度変動を含む(~2.6.23)
• CFS: 現在迄のCPU使用時間にのみ基づく
プロセスとメモリ管理• Linuxのスケジューリングポリシー
• TSS(Time Sharing System)
• 割り当てられた時間だけCPUを使う
• リアルタイムクラス
• 静的な実行優先度を持つ
プロセスとメモリ管理• Linuxではプロセスの静的な優先度は0-99
• TSSクラスでの実行優先度は常に0
• リアルタイムクラスの実行優先度は1-99に設定可
プロセスとメモリ管理ただしO(1)スケジューラだとTSSクラスでも動的に優先度が変更される。
•長時間CPUを占有→優先度下がる
•ユーザとのやりとりを行うような対話型プロセスはCPU使用時間が短い→優先度上がる
結果的にユーザへの応答反応がよくなる
プロセスとメモリ管理CFS(Completely Fair Scheduler)はvruntimeを基にスケジューリングを実施
•すべてのプロセスからvruntimeが最も短いものにCPUを割り当てる
•内部的に赤黒木で管理
14
9 14
8 12 27
3 13
15
17
ファイルシステム• ブロックデバイスのデータをファイルとして抽象的に管理するためのシステム
ファイルシステムカーネル
ユーザプログラム
ブロックレイヤー
デバイスドライバ
HDD
ファイルシステム
• LinuxのファイルシステムはVFSと個別のファイルシステムに分けられる
• proc, sysfs, cgroupfsなどカーネルのインタフェースとしても実装されている
ファイルシステム
23のファイルシステムをサポート
ファイルシステム
file_operations構造体
inode_operations構造体
address_space_operations構造体
VFS ext4
ext4_file_operations構造体
ext4_file_inode_operations構造体
ext4_dir_inode_operations構造体
ext4_da_aops構造体
ファイルシステム分類 例
UFS Base ext2
ジャーナリング ext3, ext4, XFS
ログストラクチャード nilfs2
Copy on Write Btrfs
ネットワーク• Linuxのネットワークシステムは以下の4つに分けられる
• ソケットインターフェイス
• プロトコルスタック
• ネットワークデバイス
• 付加機能
ネットワークユーザプログラム
ソケットインタフェース
プロトコルスタック(TCP/IPなど)付加機能
(ファイアウォール, NAT変換 etc) ネットワークデバイス
関連の処理
カーネル
ネットワークデバイス
ネットワークnetfilterがパケットフィルタリングやNAT変換の機能を担っており、iptablesコマンドから操作
3.13からnftablesが実装され、nftコマンドでライブラリ(libnftnl)を経由して操作する
デバイス• データの入出力、保存などを行うための機器
• カーネルはデバイスドライバを用いてこれらを制御
• デバイスの種類
• キャラクタデバイス
• ブロックデバイス
• ネットワークデバイス
デバイスキャラクタデバイスはキャラクタ単位のデータをストリームとして扱う(例:キーボード)
キャラクタデバイスにアドレスなどの概念はない
一方でブロックデバイスはデータをブロック単位で処理するデバイス。ランダムアクセス可(例:ストレージデバイス)
通常はファイルシステムを構築してアクセスする
デバイスネットワークインタフェースはネットワーク通信のデータを扱う
キャラクタデバイス
ブロックデバイス
デバイス• ハードウェアからの入出力を処理するために割り込みが用いられる
• 割り込みには2種類
• ハードウェア割り込み
• ソフトウェア割り込み
リソース制御メモリやCPUの公平な配分と効率的使用、そして排他制御を担う
2.6.24以降リソースを統一的に制御するためにインタフェースが導入された
• cgroup
• namespace
リソース制御cgroupはプロセスをグループ化して任意のリソースを割り当てるためのフレームワーク
リソース制御namespaceはカーネルが提供するリソースの 名前付けを共有できる空間を提供する
namespace 管理対象PID プロセスIDUTS ホスト名、ドメイン
MOUNT ファイルシステムのマウント関係Network ネットワークデバイスのルーティング
IPC 共有メモリ、セマフォUID ユーザID, グループID
リソース制御
カーネル
cgroup namespace
LXC or Docker
カーネルインストール
デモ
$ 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