Linux-ck (日本語) - ArchWiki

# Linux-ck (日本語)

関連記事

- Linux-ck/Changelog
- Repo-ck
- Modprobed-db

## パッケージ

Linux-ck は AUR や linux-ck の非公式リポジトリにあるパッケージでインストールすることができ、それによって Brain Fuck Scheduler (BFS) などを含む Con Kolivas の ck1 パッチセットがあてられたカーネル/ヘッダーを動作させることが可能です。どんな負担がかかっているときも素晴らしいデスクトップの応答性とレスポンスを得ることができる BFS を求める多くの Archer はこのパッケージを使っています。さらに、bfs には応答性だけでなく性能の向上も望めます。例えば、次を参照: CPU_Schedulers_Compared.pdf。

### リリースサイクル

Linux-ck は公式の ARCH カーネルのリリースサイクルにおおよそ従っています。リリースには以下が必要になります:

- 上流のコード
- CK のパッチセット
- BFQ パッチセット
- ARCH config/config.x86_64 セット (メジャーバージョンが上がったときだけ)

### パッケージのデフォルト

コンフィグファイルには3つの変更がされています:

1. ck パッチセットを有効化/無効化するオプション。
2. BFQ パッチセットをユーザーとの対話なくコンパイルするのに必要なオプション。
3. コンパイル時に追加の CPU 最適化を有効化する GCC パッチの適用 (このオプションは標準の linux-ck パッケージには含まれていないためユーザーがカスタムオプションでコンパイルするときだけ利用できます)。

他のオプションはすべてメインカーネルのコンフィグファイルにそって ARCH のデフォルトに設定されています。もちろん、ユーザーは自由にコンフィグを修正することが可能です。linux-ck パッケージには nconfig コンフィグエディタを使うオプションが含まれています (下のセクションを参照)。CK の BFS configuration FAQ に設定値の提案があります。

### 長期サポート版 (LTS) の CK リリース

linux-ck パッケージの他に、上記のパッチセットがあてられた以下の LTS カーネルリリースが存在します。上述の通りコンフィグファイルに修正が加えられています:

- linux-lts-ck - CK パッチセットがあたった最新の ArchLinux LTS カーネル
- linux-lts310-ck - CK パッチセットがあたった 3.10 LTS カーネル
- linux-lts312-ck - CK パッチセットがあたった 3.12 LTS カーネル

上記3つのパッケージは clfarron4 によってメンテナンスされています。パッケージ済みのバージョンは非公式の ck リポジトリには存在しません。

## インストール

Note: As with *any* additional kernel, users will need to manually edit their boot loader's config file to make it aware of the new kernel images. For example, users of GRUB should execute "grub-mkconfig -o /boot/grub/grub.cfg". Syslinux, GRUB-legacy, etc. will need to be modified as well.

ユーザーがカーネルパッケージを入手する方法は2つあります。

### ソースからパッケージをコンパイル

AUR には上述のパッケージのエントリが存在します。

PKGBUILD を修正することで linux-ck パッケージをカスタマイズすることが可能です:

- nconfig でユーザーにあわせた細かい調整。
- localmodconfig でモジュールを最小限にコンパイル。
- 標準の ARCH コンフィグオプションを迂回して最新のカーネルの .config ファイルを使用。
- BFQ I/O スケジューラ をデフォルトに設定。

オプションに関する詳細は PKGBUILD のラインコメントを見て下さい。AUR からコンパイルするときは絶対に読むようにしましょう。

Note: AUR には linux-ck 専用のモジュールのための PKGBUILD が存在します。例えば nvidia-ck, nvidia-304xx-ck,nvidia-340xx-ck, broadcom-wl-ck などがあります。

### コンパイル済みのパッケージを使う

カーネルのコンパイルに時間を割きたくないユーザーのために、graysky によってメンテナンスされている非公式リポジトリが存在します。

詳しくは、次を見て下さい: Repo-ck。

上述の LTS ブランチの非公式リポジトリも存在します。clfarron4 によってメンテナンスされている linux-lts-ck, linux-lts31x-ck です。

## BFQ I/O スケジューラを有効にする方法

Note: BFS (Brain Fuck Scheduler) と BFQ (Budget Fair Scheduler) を混同してはいけません。BFS は CPU スケジューラでありデフォルトで有効にされますが、BFQ は I/O スケジューラであり使用するには明示的に有効にする必要があります。

Budget Fair Queueing は各プロセス/スレッドにディスクのスループットの一部を割り当てるディスクスケジューラです。開発者によって驚くようなレイテンシパフォーマンスを示す ベンチマーク が公開されています。

linux-ck-3.0.4-2 から、BFQ パッチセットはデフォルトでパッケージに適用されるようになっていますが、BFQ スケジューラは手動で有効にする必要があります。有効にする方法は複数存在します。

### 全てのデバイスで BFQ を有効にする

AUR からコンパイルする場合は、ビルドする前に PKGBUILD の BFQ フラグを "y" に設定してください:

    _BFQ_enable_="y"

repo-ck を使っている場合やビルド前に PKGBUILD に修正を加えなかった場合はカーネルパラメータに `elevator=bfq` を追加することができます。

### 特定のデバイスでだけ BFQ を有効にする

もしくはデバイスごとに BFQ を使うようにカーネルに指示することもできます。例えば、`/dev/sda` で BFQ を有効にするには:

    # echo bfq > /sys/block/sda/queue/scheduler

有効になっていることを確認:

    # cat /sys/block/sda/queue/scheduler
    noop deadline cfq [bfq]

この方法では再起動すると設定が戻ってしまうので注意してください。次のブート時に自動的に変更させるには、以下の tmpfile を作成します (sdX は適当なデバイスに置き換えて下さい):

    /etc/tmpfiles.d/set_IO_scheduler.conf

    w /sys/block/sdX/queue/scheduler - - - - bfq

## トラブルシューティング

### ブートローダーと Linux-ck

(新しい) カーネルイメージが見つかるようにブートローダーを設定する必要があります。GRUB の場合、GRUB#メイン設定ファイルの生成 を見て下さい。他のブートローダーの場合、カスタムエントリを追加する必要があります。

REFInd を使っている場合にカスタムエントリを追加するときの例:

    refind.conf

    menuentry Linux {
            icon EFI/refind/icons/os_linux.png
            ostype Linux
            volume boot
            loader /vmlinuz-linux-ck
            initrd /initramfs-linux-ck.img
            options "root=/dev/mapper/root elevator=bfq"
    }

### VirtualBox で Linux-ck を動作させる

VirtualBox works just fine with custom kernels such as Linux-ck without the need to keep any of the official ARCH kernel-headers packages on the system!

忘れずにユーザーを vboxusers グループに追加してください:

    # gpasswd -a USERNAME vboxusers

#### 非公式リポジトリを使う (Repo-ck から linux-ck をインストールした場合に推奨)

Note: As of 17-Oct-2012, Repo-ck users can enjoy these modules as pre-compiled packages in the repo itself. If you built your linux-ck from the AUR you cannot use the repo as all packages in the repo are matched groups.

pacman で直接 http://repo-ck.com を使用する方法はRepo-ck の記事を見て下さい。

#### virtualbox-ck-host-modules パッケージ (AUR から linux-ck をビルドした場合に推奨)

virtualbox-ck-host-modules パッケージをインストールしてから virtualbox パッケージをインストールしてください。

#### DKMS を使う (やや複雑、LTS リリースを使う場合に推奨)

virtualbox-host-dkms パッケージで virtualbox をインストールしてください。それから以下のように dkms を設定します:

    # pacman -S virtualbox virtualbox-host-dkms
    # dkms install vboxhost/4.3.12

Note: Make sure to substitute the correct version number of virtualbox in the second command. At the time of writing, 4.3.12 is current.

### ダウングレード

前のバージョンの linux-ck にダウングレードしたい場合、複数の選択肢があります:

- Source archives are available dating back to linux-ck-3.3.7-1.
- AUR.git holds AUR git commits for linux-ck dating back to linux-ck-2.6.39.3-1.

### フォーラムのサポート

Always feel free to open a thread in the forums for support. Be sure to give the thread a descriptive title to draw attention to the fact that the post relates to the Linux- ck package.

## BFS についての簡単な説明

Brain Fuck Scheduler はデスクトップ指向の cpu プロセススケジューラであり、負担レベルが通常のときに極端な低レイテンシによって素晴らしい応答性を実現します。

### BFS の設計目標

BFS には2つの大きな設計目標があります:

1. デスクトップの優れた応答性とレスポンスを達成すること。ヒューリスティックやチューニングパラメータは使わない。理解するのが難しいし、効果を予測するのが困難で、何か一つのワークロードに合わせて設定すると他のワークロードに多大なダメージを与えることがあるため。
2. cpu プロセススケジューラの過去の複雑な設計を完全に廃止して、とてもシンプルな必要最小限の設計でスケジューラを実装すること。

詳しい情報は BFS と CK パッチセットに関する資料を見て下さい。

### 待ち行列理論に関する動画

See this video about queuing theory for an interesting parallel with supermarket checkouts. Quote from CK, "the relevance of that video is that BFS uses a single queue, whereas the mainline Linux kernel uses a multiple queue design. The people are tasks, and the checkouts are CPUs. Of course there's a lot more to a CPU scheduler than just the queue design, but I thought this video was very relevant."

### パフォーマンスの比較: BFS vs. CFS

A major benefit of using the BFS is increased responsiveness. The benefits however, are not limited to desktop feel. Graysky put together some non-responsiveness based benchmarks to compare it to the CFS contained in the "stock" linux kernel. Seven different machines were used to see if differences exist and, to what degree they scale using performance based metrics. Again, these end-points were never factors in the primary design goals of the bfs. Results were encouraging.

For those not wanting to see the full report, here is the conclusion: Kernels patched with the ck1 patch set including the bfs outperformed the vanilla kernel using the cfs at nearly all the performance-based benchmarks tested. Further study with a larger test set could be conducted, but based on the small test set of 7 PCs evaluated, these increases in process queuing, efficiency/speed are, on the whole, independent of CPU type (mono, dual, quad, hyperthreaded, etc.), CPU architecture (32-bit and 64-bit) and of CPU multiplicity (mono or dual socket).

Moreover, several "modern" CPUs (Intel C2D and Ci7) that represent common workstations and laptops, consistently outperformed the cfs in the vanilla kernel at all benchmarks. Efficiency and speed gains were small to moderate.

CPU_Schedulers_Compared.pdf is available for download.

### 有効になっているか確認

BFS が有効になっていればカーネルリングバッファに以下のスタートアップメッセージが表示されるはずです:

    # dmesg | grep scheduler
    ...
    [    0.380500] BFS CPU scheduler v0.420 by Con Kolivas.

## BFS の作り話

### BFS パッチのあたったカーネルは systemd を使うことができる

BFS が cgroups をサポートしてないと思ってしまうのはよくある間違いです。BFS は crgoups をサポートしています、ただし cgroups の機能を全てはサポートしてません (例: CPU の制限は動作しません)。

## BFS と CK パッチセットに関する資料

- Con Kolivas の BFS に関する白書
- Wikipedia の BFS 記事
- Con Kolivas のブログ

Category:

- Kernel (日本語)