カーネル
Wikipedia より:
- カーネルは、階層型に設計されたオペレーティングシステム (OS) の中核となる部分である。アプリケーションとハードウェアレベルでの実際のデータ処理との間の架け橋である。システムのリソースを管理し、ハードウェアとソフトウェアコンポーネントのやりとりを管理する。
メインラインの Linux カーネルに加えて、Arch Linux では様々なカーネルを使うことができます。リポジトリから利用できるカーネルの一部と、それぞれの簡単な説明をこのページでリストアップしています。また、システムのカーネルに適用することができるパッチの説明も記述します。記事の最後にはカスタムカーネルのコンパイルの概要とリンクが付してあります。
目次
事前コンパイル済みカーネル
公式パッケージ
- linux
- [core] リポジトリにある Linux カーネルとモジュール。バニラカーネル(素のカーネル)に多少のパッチが適用されています。
- linux-lts
- [core] リポジトリにある長期サポート版 (Long term support, LTS) の Linux カーネルとモジュール。
- linux-grsec
- セキュリティを高めるための Grsecurity パッチセットと PaX パッチがあてられた Linux カーネルとモジュール。
- linux-zen
- ZEN Kernel は毎日の利用のために最高の Linux カーネルを提供するカーネルハッカーのコラボレーションによって生まれました。
AUR パッケージ
- linux-aufs_friendlyAUR
- aufs 対応の linux カーネルとモジュール。Docker を使用する際に有用。
- linux-ckAUR
- Con Kolivas の ck1 パッチセットを適用した Linux カーネル。
- PKGBUILD 内で次の追加オプションを切り替えることができます: BFQ スケジューラ, nconfig, localmodconfig, 動作中のカーネル設定の利用。
- これらのパッチはシステムのレスポンスを改善するように作られており、特にデスクトップに向きますが、どのような使用目的でも問題なく使えます。ck パッチには BFS が含まれています。
- 詳しい情報とインストールの方法については linux-ck を読んで下さい。
- linux-fbcondecorAUR
- fbcondecor をサポートした Linux カーネルとモジュール。
- linux-gitAUR
- Linus Torvalds の git リポジトリ から得たソースを使ってビルドする Linux カーネルとモジュール。
- linux-libreAUR, linux-libre-ltsAUR, linux-libre-grsecAUR, linux-libre-rtAUR, linux-libre-xenAUR
- "バイナリブロブ"が取り除かれた Linux カーネル。
- linux-lqxAUR
- Liquorix はデスクトップ・マルチメディア・ゲーム用途に Debian 用の設定と ZEN カーネルソースを使ってビルドされたディストロカーネル代替です。Debian Linux ではパフォーマンス向上カーネルとしてよく使われています。Liquorix パッチセットのメンテナである Damentz は ZEN パッチセットの開発者でもあります。
- linux-lts310AUR
- Linux 3.10 長期サポート版カーネルとモジュール。
- linux-lts312AUR
- Linux 3.12 長期サポート版カーネルとモジュール。
- linux-mainlineAUR
- メインラインの Linux カーネルとモジュール。
- linux-mptcpAUR
- Multipath TCP に対応する Linux カーネルとモジュール。
- linux-pfAUR
- pf-kernel パッチ [-ck パッチセット (BFS 含む), TuxOnIce, BFQ] と aufs3 が含まれた Linux カーネルとモジュール。
- linux-rtAUR
- リアルタイムパッチセットがあてられた Linux カーネル。遅延を減らしてハードリアルタイムが可能になります: https://rt.wiki.kernel.org/
- linux-tresorAUR/linux-lts-tresorAUR
- TRESOR が統合された、最新の LTS Linux カーネルとモジュール。
- linux-vfioAUR/linux-vfio-ltsAUR
- Alex Williamson によって書かれた KVM で PCI パススルーを出来るようにするパッチが適用された Linux カーネル (acs override と i915)。
パッチとパッチセット
カーネルにパッチをあてる理由は様々です。パフォーマンスを向上させたり reiser4 ファイルシステムのサポートなどメインラインに含まれていない機能を使うため、というのが大多数の理由でしょう。他の理由としては、カーネルの改善がどうやってなされるのか知ってみたいという好奇心もあるかもしれません。
しかしながら、システムのスピードアップにベストな方法はまずカーネルをあなたのシステム、特にアーキテクチャとプロセッサーのタイプに適合させることだと気づくのは重要なことです。速度をアップさせるために、カスタムカーネルの(一般的なアーキテクチャ用の設定を使って)パッケージ済みのバージョンを使うのは推奨されませんし、あまり価値はありません。他の利点は、あなたが持っていない・使っていない物のサポートを含めないことで、カーネルのサイズ(そしてビルド時間)を減らすことができるということです。例えば、新しいカーネルバージョンがリリースされた時、私はいつもカーネルのコンフィグを皮切りに bluetooth, video4linux, 1000Mbit イーサネットといったサポート(マシンに必要ない機能)を削除します。このページではカーネルコンフィグのカスタマイズについては触れませんが、最初のステップとしてカーネルのビルドを行い、それからパッチセットを使ってみるのが推奨です。
Arch のカーネルパッケージのコンフィグファイルを手始めとして使うこともできます。コンフィグファイルは Arch のパッケージのソースファイルに含まれています。例えば linux のは [1] にリンクがあります。今現在動かしているカーネルのコンフィグファイルはファイルシステムの /proc/config.gz
に存在します (カーネルオプションの CONFIG_IKCONFIG_PROC
が有効になっている場合)。
インストール方法
カスタムカーネルパッケージのインストールには Arch Build System (ABS) を使います。カスタムパッケージをビルドしたことがない場合は次の記事を読んで勉強できます: Arch Build System, パッケージの作成。
あなたがカーネルにパッチをあてたりカスタマイズをしたことがないとしても、インストールはそこまで難しいものではなく、また、それぞれのパッチセットの PKGBUILD がフォーラムにはたくさんあります。ただし、すぐ近くのバンドワゴンに飛びつくのではなく、それぞれのパッチセットの効能を調べるところから始めるのを推奨します。そのほうがいきなりカーネルを選ぶよりもやるべきことについて多く学ぶことができるでしょう。
#コンパイル を見て下さい。
主なパッチセット
まず初めにパッチセットは様々な人によって開発されていることに注意してください。人々の中には linux カーネルの開発に深く関わっている人もいるでしょうし、そうでないひともいるでしょう。開発者のカーネルの理解度はパッチセットの信頼性と安定性に反映されます。
また、パッチセットによっては他のパッチセットとあわせて使うと効果がないものもあります (パッチの名前にそれが示されているかもしれません)。パッチセット(とカーネルアップデート)は非常に短い間隔でリリースされ、ほとんどの場合それを完全に追いつづける価値はありません。あまり夢中にならないようにしましょう、それを趣味にするなら話は別ですが。
ググればもっと多くのパッチセットがあります - そのときはクォーテーションを使うのを覚えておいて下さい (例: "-nitro"
)。そうしないと google はあなたが望む検索結果を表示しません。
-ck
linux-ck にはシステムのレスポンスを良くするためのパッチが含まれています。デスクトップ用途に重点が置かれていますが他の環境でも使えます。このパッチは Con Kolivas によって作成・メンテナンスされており、彼のサイトは http://users.on.net/~ckolivas/kernel/ にあります。Con はフルセットを管理していますがパッチを分けて提供もしており、使いたいものだけを追加することが可能です。
-ck パッチは http://ck.kolivas.org/patches/ から入手できます
-rt
このパッチセットは Ingo Molnar 率いるコアデベロッパのグループによってメンテナンスされています。このパッチを使うことでカーネルのほとんど全てをリアルタイム実行できるようになります、ただしコードの非常に小さい領域 ("raw_spinlock critical regions") は除きます。カーネルのスピンロックのほとんどを優先度継承をサポートするミューテックスに置き換え、全ての割り込みとソフトウェア割り込みをカーネルスレッドに移動することでこれを実現しています。
さらに高精度タイマーも組み入れられています - パッチセットは別々にメンテナンスされています。
[ソース: Real-Time Linux Wiki]
パッチは https://www.kernel.org/pub/linux/kernel/projects/rt/ にあります
-bld
BLD は O(1) の CPU 利用技術とされます。ランキューの負担にあわせて CPU ランキューの順番を変えます。つまり、スケジューラが負担の変化に対応することで、適当な順番でランキューを動作させることが可能です。この技術はスケジューラのチェックに依存しません。この技術では最も単純な方法が取られています: 負担を追跡してランキューの順番を変更する。どちらも同じような操作です。負担の追跡はシステム上で負担の変化が起こった時に行われ、負担が変化したランキューの順番が変えられます。一番負担が低いランキューから一番負担が高いランキューまでの順番が付けられたら、一番下の (一番忙しい) ランキューを選択するのは簡単です。スケジューラはランキューにタスクを割り振るときに何も計算や比較を行うことなく一番下のランキューを選択します。そして sched_exec や sched_fork で負担を分散させるのに一番良いのは一番下の一番忙しいランキューを優先することです。これで、ロードバランシングを行わなくてもシステムのバランスが取られます。try_to_wake_up するときアイドル状態のランキューが一番優先されるようになりますが、ドメインごとに実行されるため CPU のキャッシュを正しく利用します。キャッシュの利用には更なる注意が必要になります。
Google Code ウェブページ: https://code.google.com/p/bld/
-grsecurity
Grsecurity はセキュリティに焦点を置いたパッチセットです。ロールベースアクセス制御など様々なセキュリティに関係する機能を追加し PaX プロジェクトの機能を利用します。デスクトップでも使うことはできますが公開サーバーでの利用が一番意味があるでしょう。アプリケーションによってはこのパッチセットで実装されている追加のセキュリティ対策と互換性がないことがあります。そうした問題が起こる場合は、セキュリティレベルを低くしてみて下さい。
-grsecurity パッチは https://grsecurity.net から入手できます
Tiny-Patches
Linux Tiny の目標はメモリやディスクの使用量を減らし、小さなシステムで動作するのを助ける機能を追加することです。組み込みシステムの開発者や 386 など小さい・古いマシンのユーザーを対象にしています。
メインストリームの Linux カーネルに対するパッチリリースは止まっています。開発者達は少数のパッチに力を注ぎメインラインカーネルにパッチをマージさせることに時間を割くことを選んだようです。
-pf
linux-pfAUR は非公式の Linux カーネルのフォークで、メインラインにマージされていないひと握りの素敵な機能を提供します。既存の Linux フォークやパッチセットには基づいていませんが、必要なパッチが公式にリリースされていない場合に非公式のポートが使われることもあります。 linux-pf の特徴的なパッチとして TuxOnIce, CK パッチセット (特に BFS), AUFS3, LinuxIMQ, l7 フィルタ, BFQ があります。
詳しくは linux-pf を見て下さい。
個々のパッチ
以下のパッチはバニラカーネルのビルドに含めたり、他のパッチセットに組み入れることができます。
Reiser4
Reiser4 を参照。
fbsplash
fbsplash を参照。
コンパイル
Arch Linux ではカーネルコンパイルに複数の方法があります。
Arch Build System を使う
Arch Build System の利用には既存の linux の PKGBUILD とパッケージ管理システムを使えるというアドバンテージがあります。PKGBUILD があるので、ソースがダウンロードされた後、ビルドを止めてカーネルを設定することができます。
カーネル/コンパイル/Arch Build System を見て下さい。
伝統的な方法
手動でソース tarball をダウンロードし、標準ユーザーとして home ディレクトリでビルドを行います。設定を行った後、コンパイル・インストールする方法は2つあります; 伝統的に手動で行うか makepkg + pacman を使うかです。
伝統的な方法のメリットは、他の Linux ディストリビューションでもカーネルを動作させることができることです。
カーネル/コンパイル/伝統的な方法を見て下さい。
プロプライエタリの NVIDIA ドライバ
カスタムカーネルと一緒にプロプライエタリの NVIDIA ドライバを使う方法は NVIDIA#カスタムカーネルを見て下さい。
参照
- O'Reilly - Linux Kernel in a Nutshell (フリーの電子書籍)