Linux-ck

提供: ArchWiki
2018年5月6日 (日) 18:59時点におけるNeko (トーク | 投稿記録)による版 (MuQSSの追加)
ナビゲーションに移動 検索に移動

関連記事

パッケージ

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

CK パッチセットは16CPU以下の環境で正常に動作します。

リリースサイクル

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-ckAUR - CK パッチセットがあたった最新の ArchLinux LTS カーネル
  • linux-lts310-ckAUR[リンク切れ: パッケージが存在しません] - CK パッチセットがあたった 3.10 LTS カーネル
  • linux-lts312-ckAUR[リンク切れ: パッケージが存在しません] - CK パッチセットがあたった 3.12 LTS カーネル

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

インストール

ノート: 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 からコンパイルするときは絶対に読むようにしましょう。

ノート: AUR には linux-ck 専用のモジュールのための PKGBUILD が存在します。例えば nvidia-ckAUR, nvidia-304xx-ckAUR[リンク切れ: パッケージが存在しません],nvidia-340xx-ckAUR, broadcom-wl-ckAUR などがあります。

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

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

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

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

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

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

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

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

MuQSS は BFS をさらに改良して作られたCPUスケジューラです。現在のck パッチではBFSではなくMuQSSがデフォルトのスケジューラになっています。

MuQSSが有効になっているか確認する

MuQSSが有効になっている場合、ブートメッセージに出力がされます。

$ dmesg | grep -i muqss
...
MuQSS CPU scheduler v0.120 by Con Kolivas.

全てのデバイスで 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 は Linux-ck などのカスタムカーネルでも問題なく動作します。公式の ARCH カーネルヘッダのパッケージをインストールしておく必要はありません。

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

# gpasswd -a USERNAME vboxusers

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

ノート: 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-modulesAUR パッケージをインストールしてから virtualbox パッケージをインストールしてください。

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

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

# pacman -S virtualbox virtualbox-host-dkms
# dkms install vboxhost/4.3.12
ノート: 2番目のコマンドの virtualbox のバージョン番号は適当に置き換えてください。執筆時点では、4.3.12 が最新です。

ダウングレード

前のバージョンの 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 パッチセットに関する資料を見て下さい。

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

この動画 はスーパーのレジを使って待ち行列理論について説明しています。CK によれば、"BFS が単一の待ち行列を使っているのに対して、メインラインの Linux カーネルでは複数の待ち行列を使用する設計がされていることと動画には関連性があります。人々はタスクであり、レジは CPU です。もちろん単なる待ち行列の設計と CPU スケジューラを同じものとすることはできませんが、この動画は仕組みを上手く言い当てていると感じました。"

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

BFS を使用する一番のメリットはレスポンスの向上です。ただし、メリットが感じられるのはデスクトップに限りません。標準の linux カーネルに含まれている CFS と比較するために Graysky はレスポンスに関係ないベンチマークもいくつか行っています。7つの異なるマシンを使って、違いが存在しないかどうか確認し、性能がどの程度変わるのか測定しました。BFS の設計目標とは相容れないベンチマークですが、結果は耳寄りなものでした。

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 がダウンロードできます。

有効になっているか確認

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

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

BFS の作り話

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

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

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