12月版 おちゃめなLinus、「今回も遅れちゃったよ」


上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2007/12/27


望ましい挙動とは? sched_yieldを巡る議論

 以前お伝えしたように、2.6.23でスケジューラにCompletely Fair Scheduler(CFS)が導入され、挙動が大幅に変更されました。そしていま、いろいろなユーザーが2.6.23を利用するになるにつれ、広く話題になってきたようです。

 メーリングリストで盛り上がった話題の1つとして、sched_yieldという命令の扱いがあります。sched_yieldは、スケジューリングの優先度が高いプロセスがあればそのプロセスを実行するための命令です。

 Nick Pigginによるとプライオリティが通常レベルの「SCHED_OTHER」(注:スケジューリングの優先度の1つ、デフォルト)の場合には、特に明確に定義されている挙動はありません。しかし、今回挙動が大きく変更になったため、新しい挙動をデフォルトにしつつも、念のため後方互換のために「IngoMolnar はsysctl_sched_compat_yield」という仕組みを実装し、従来のLinuxカーネルに似た挙動ができるように準備しました。

 一方Zhang Yanminは、「16CPUのマシンでJavaのベンチマーク『Volanomark』を実行したら速度が遅くなるが、sysctl_sched_compat_yieldを有効にした場合に速度が改善するため、この挙動をデフォルトにするべきだ」と主張しました。

 しかしIngoたちは、「各種ベンチマークや実アプリケーションの挙動は変わっているが、Firefoxなどの一般的なアプリケーションに関しては高速化している。本来の使い方ではない方法でsched_yieldを頻繁に呼び出しているVolanomark自体が問題だろう」と反論しました。つまり、修正されるべきは、スケジューリング方針がSCHED_OTHERなのにsched_yieldを利用しているアプリケーション群の方だというわけです。

 さらにIngo Molnarは、スケジューリング方針がSCHED_BATCHの場合に挙動を変えるというパッチを投稿したりしました。ですが、今回直接の問題となっているSCHED_NORMALの際にsched_yieldがどうあるべきかについては、うまい解決策には至ってないようです。

 現状の2.6.23/2.6.24-rcカーネルで、実行速度の結果が芳しくないsched_yieldを利用しているアプリケーションがある場合には、

echo 1 > /proc/sys/kernel/sched_compat_yield

などで挙動を変更すれば、改善する可能性があるかもしれませんね。

関連記事:
2007年9月版 ユーザー空間でのデバイスドライバ作成に道開ける
http://www.atmarkit.co.jp/flinux/rensai/watch2007/watch09a.html
2005年9月版 Hypervisor対応でLinuxをもっと仮想化しやすく
http://www.atmarkit.co.jp/flinux/rensai/watch2005/watch09a.html

ウォッチ 拡張されるCFS、グループ単位の設定も可能に

 2.6.24に向けた新機能として、CFSにGroup Scheduling機能が導入されています。CFSはシステム全体でプロセス単位で公平にCPUの利用を分割する方法でしたが、さらにユーザー単位で設定する方法と、cgroup単位で設定する方法が追加されました。

 ユーザー単位の場合の設定は、Kconfigの「CONFIG_FAIR_GROUP_SCHED」「CONFIG_FAIR_USER_SCHED」を有効にすればできます。各ユーザーの設定値はデフォルトで1024になっており、それから値を調整するには、sysfsの操作で可能です。

/sys/kernel/uids/ユーザーID/cpu_share

この機能は2.6.24-rc1でマージされました。

参考:
参考 SCHED_OTHER、SCHED_BATCHなどを設定できるシステムコールのマニュアルページ
sched_setscheduler(2)
参考 システムコール「sched_yield」のマニュアルページ
sched_yield(2)

-stableの進ちょく

 11月の-stableツリーはどうなったかを見てみましょう。

 Greg K-Hは、2.6.22と2.6.23の両方のツリーをメンテナンスしています。今回は驚くことに、100以上のパッチをためてしまったことから、2.6.23.2から2.6.23.8までを同時にリリースしたことにして、パッチのレビューをしやすくし、たまったパッチに対処しています。

 2.6.16.yのメンテナンスは、継続してAdrian Bunkが担当しています。またWilly Tarreauは2.4.35.4のリリースを行いましたが、2.6.20.21以降のリリースについては出していないようです。

■2.6.16.y: Adrian Bunkの管理

  • 2.6.16.57(11月6日)
    ・aacraidセキュリティホール修正(CVE-2007-4308)
    ・CIFSを利用しているプロセスのumaskを有効にする(CVE-2007-3740)
    ・IEEE802.11受信フレームの処理の整数アンダーフローの修正(CVE-2007-4997)
    ・pwc USBビデオドライバのDoSを修正(CVE-2007-5093)
    そのほか、17パッチ

■2.6.22.y:Greg K-Hたちが管理しているツリー

  • 2.6.22.13(11月16日):Greg K-H
    ・TCP: write_queue_fromがNULLポインタで開始しないことを確認する(CVE-2007-5501)
    ・wait_task_stopped: p->state & TASK_TRACEDではなくp->exit_stateを確認する(CVE-2007-5500)
    以上、2パッチ
  • 2.6.22.14(11月22日):Greg K-H
    ・i2c/eeprom: VGNをSony Vaioのデバイスとして認識する
    ・ocfs2: sparseでないファイルシステムの場合のwrite()のパフォーマンス低下の修正
    ・x86: TSCクロックのカリブレーションを3回の平均で取るように変更
    そのほか、26パッチ

■2.6.23.y: Greg K-Hたちが管理しているツリー

  • 2.6.23.8(11月17日):Greg K-H(2.6.23.2から2.6.23.8は同時にリリースされた)
    ・TCP: write_queue_fromがNULLポインタで開始しないことを確認する(CVE-2007-5501)
    ・wait_task_stopped: p->state & TASK_TRACEDではなくp->exit_stateを確認する(CVE-2007-5500)
    そのほか、116パッチ
  • 2.6.23.9(11月27日):Greg K-H
    ・i2c/eeprom: VGN をSony Vaioのデバイスとして認識する
    ・oProfile: profile_pc()が~0LUを返すとoopsするのを修正
    ・x86: delay_tsc()をpreemptしないように修正
    そのほか、29パッチ

(以上、敬称略)

2/2

Index
Linux Kernel Watch 12月版
 おちゃめなLinus、「今回も遅れちゃったよ」
  Page 1
 Linus、もう遅らせない宣言?
 x86マージの余波
 起動時コードを変更したら486でブートできなくなっちゃった
 コードを鍛えるMMOTM
Page 2
 望ましい挙動とは? sched_yieldを巡る議論
 拡張されるCFS、グループ単位の設定も可能に
 -stableの進ちょく

連載 Linux Kernel Watch


 Linux Squareフォーラム Linuxカーネル関連記事
連載:Linux Kernel Watch(連載中)
Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします
連載:Linuxファイルシステム技術解説
ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する
特集:全貌を現したLinuxカーネル2.6[第1章]
エンタープライズ向けに刷新されたカーネル・コア
ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する
特集:/procによるLinuxチューニング[前編]
/procで理解するOSの状態

Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する
特集:仮想OS「User Mode Linux」活用法
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
Linuxのカーネルメンテナは柔軟なシステム
カーネルメンテナが語るコミュニティとIA-64 Linux
IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間