
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  | 
 
            
 | 
 
            
  | 
||||
 
            
  | 
||||
| 連載 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カーネルの開発体制などについて伺った  | 
|
  | 
  
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。 
 
  | 
 |




