7月版 ファームウェアの置き場所を巡ってフレームウォー


小崎資広
2008/7/31

アイコン 今年のカーネルサミットの議題は

 James Bottomleyが「まだFIXじゃない」と前置きしつつも、今年のカーネルサミットの議題として提案されている議題一覧を投稿しました。6月27日時点では以下が提案されているそうです。

  1. Asynchronous Operations - Ulrich Drepper
  2. Fixing the Kernel Janitor's Project - James Bottomley
  3. Moving firmware Blobs out of the Kernel - David Woodhouse
  4. Barriers - Neil Brown
  5. Tracking Regressions - Rafael Wysocki
  6. Discuss new Suspend/Resume Framework - Rafael Wysocki
  7. Hack/Fix session for Laptop Suspend and NOHZ/idle - Thomas Gleixner
  8. Content Accessed Filesystems - Lars Noschinski
  9. When should Drivers be Merged - James Bottomley

 今年技術的に一番ホットな話題は、1の「汎用非同期対応(によるマルチコア対応の改善)」と、7の「省電力まわり」なのかなと感じました。また、この投稿には出てきませんでしたが、後日SystemTapのFrank Ch. Eiglerから送られてきたトレース関係の議題リストは、大きな話題を呼んでいました。

 ところで、David Woodhouseは、あれだけフレームウォーしておいて、まだ話すことが残っているんでしょうか。ひとごとながら心配です。

アイコン CGroupに2つの拡張提案

 今月は、CGroupに対して以下の2つの拡張が提案されました。

 1つは、Balbir Singhによる「memrlimit controller」です。これはulimit -vや/proc/sys/vm/overcommit_memoryのように、グループの仮想アドレス空間の合計値を制限できる機能です。

 すでにマージされているmemory controllerでは、実際に使った物理メモリ量に基づいて制限するのに対し、こちらは仮想アドレス量で制限をかけるのが大きな違いです。

 物理メモリによる制限には、LinuxにおいてメモリがCOW(copy-on-write)によってユーザーから見えないところで確保されるので、制限値を超えたときにプロセスに制限値超過を通知することが難しいという問題がありました。スワップスペースがいっぱいで、スワップアウトによる使用メモリ量削減ができないときは、実質、プロセスを殺すぐらいしか対処方法がありませんでした。

 しかし、仮想アドレス空間は必ず、mmapなどのシステムコールを呼んだタイミングで増加するので、システムコールをエラーリターンさせることで、制限超過をアプリケーションに適切に伝えることができます。これよりアプリケーションは、制限値を超えた場合の処理を実装することが可能になります。

 もっとも、仮想アドレス空間サイズと物理メモリ量が大きく異なってしまうようなタイプのプロセスも存在するので、memory controllerとmemrlimit controllerは今後も共存していくと見られています。

 もう1つは、Daisuke Nishimuraによる「swapcgroup」で、スワップ量の制限が実現できます。

 仮想化の観点に立つと、1グループが1 OSのように見えることが望ましいので、swapの使用量に関しても各グループごとで均等に配分したいという要望がありました。また、HPCなどでは性能面から特定プロセスのスワップを防ぎたい場合が多々あり、そのような用途にも使えるのではないかと期待されています。

 前者は-mmにマージされました。後者はまだ議論が続いているようですが、大きな反対意見はないようですので、近いうちにマージされるのではないでしょうか。

アイコン 「AVXをどう使えばいいの?」「使うべきじゃない」

 Intelは、2010年にコードネーム「Sandy Bridge」において、x86プラットフォームに「YMMレジスタ」と呼ばれる256bitのレジスタを新設し、それに対するSIMD命令群を追加することを発表しました。これを「Intel AVX(Advanced Vector Extensions)」と呼んでいます。

 Agner Fogは、AVXにおいて「XSAVE」「XRESTOR」という新しいレジスタ退避命令が追加されるようであるが、ドライバ開発者はどうやってこのレジスタを使えばいいの? と尋ねました。それに対してArjan van de Venは、「使うべきじゃないよ。SSE()を使うべきじゃないのと同じ理由でね」と答えました。

注:SSE(Streaming SIMD Extensions)とは、Pentium IIIから搭載されているSIMD拡張命令セットのこと。SSE(無印)からSSE4まであるが、ArjanはXMMレジスタ(SSEレジスタ)を使う命令全般を「SSE」とひとくくりにしています。

 Andi Kleenはさらに、「まず、ドライバがカーネルインターフェイスを使わずに勝手にXSAVE、XRESTORを使った場合はカーネルが死んでしまう。決してやってはいけない。カーネルインターフェイスを使うべきだ。カーネル本体のコードは2.6.27で入るよ。でもFPUやSSEなどと同じで、使用されるときだけLazyにレジスタ退避を行う仕様になるので、ほとんどのドライバでは使うと性能が劣化するだろう」と補足しています。

 2010年に登場予定の機能が、パフォーマンス得失まで含めてすでに議論がされていることにちょっと驚いてしまいますね。

-stableの進ちょく

■2.6.25.y:

  • 2.6.25.9(6月25日):Greg K-H
    ・sctp:kmalloc引数の計算がオーバーフローしないようにチェックを追加した
    ・2.6.24において導入されたremove zero_pageパッチによりコアダンプ時の消費メモリが激増していた問題を修正
    ほか、11パッチ
  • 2.6.25.10(7月2日):Greg K-H
    ・TTYのバグ修正のバックポート(*1
    ・x86_64 ptrace:32bit compatibleモードにおいてtask_structがリークしていたのを修正(*2
    ・ptrace:GET/SET FPXREGSに非互換が発生していたのを修正
    ・cpu hotplug時にクラッシュしてしまう問題を修正
    ほか、10パッチ
  • 2.6.25.11(7月13日):Greg K-H
    ・x86: x86_64においてLDTエントリのサイズ計算を間違えていた問題を修正
    以上、1パッチ
  • 2.6.25.12(7月24日):Greg K-H
    ・block:AS IOスケジューラにある種のIOを与えることによりIO飢餓状態を作り出すことができる問題を修正
    ・slub:preempt禁止区間を抜けた後でper-CPUデータを使用しており、preemptible kernelにおいてカーネルクラッシュする可能性があった問題を修正
    ・mm:/sys/devices/platform/system/node/node0/meminfoのActive、Inactiveの数値の単位をページ数からキロバイトへ変更
    ほか、49パッチ
  • 2.6.25.13(7月28日):Greg K-H
    ネットワークまわりの修正など10パッチ

 Gregは「バグフィックス」と書いていますが、*1は、0番地付近に悪用コードを埋め込むことにより、*2は意図的にリファレンスカウントリークを繰り返してカウントをオーバーフローさせることにより悪事を働ける可能性があるから、セキュリティ問題じゃないかと考えている人もいるようです。

(以上、敬称略)

2/2

Index
Linux Kernel Watch 7月版
 ファームウェアの置き場所を巡ってフレームウォー
  Page 1
 Linux 2.6.26リリース
 ドライバ用ファームウェアの置き場所はどこ?
Page 2
  今年のカーネルサミットの議題は
 CGroupに2つの拡張提案
 「AVXをどう使えばいいの?」「使うべきじゃない」
 -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 記事ランキング

本日 月間