2013年1月3日木曜日

What's New in Linux 3.7?

コミケ83でLinux Kernel Updatesという同人誌を出したのですが、予想外の好評をいただき11時半ごろに完売となってしまいました。

次の夏コミに受かれば再販する予定ですが、Kernel 3.7 のニュースは古くなってしまうので、こちらに掲載します。

What's New in Linux 3.7?

Linux 3.7 に含まれる主な変更点を kernelnewbies.org の記事から翻訳しました。

ARM Multi-platform support

x86 では一つのカーネルイメージが複数の PC 上で動作しますが、ARM は基本的にボードやプラットフォームごとにカスタムのカーネルを作成します。いわゆる組み込み文化です。ところがそのままだと Debian のような distributor が ARM 用の distribution を配布するのが大変なので、複数のプラットフォーム上で動作するカーネルイメージを作成可能にしました。 ただし、単に起動するだけといったレベルですので、実用的な使用には現時点ではボードごとの定義が必要です。

ARM 64-bit support

ARMv8 では 64bit コードの実行がサポートされましたので、Linux でも 64bit 版 ARM コードの生成をサポートしました。 x86 と異なり、 64bit ARM は 32bit ARM と全く互換性がないので、別のソースツリーで管理されることになりました。

Btrfs の改善

fsync() の改善: fsync() はデータをディスクにフラッシュするシステムコールです。btrfs はこれまで fsync() が遅かったのでいくつかのアプリケーションでのボトルネックになっていましたが、これが改善されました。 SATA の遅いドライブでも2割~5割、Fusion IO や RAMディスクなどの高速なドライブでは最大7倍程度の性能改善になります。

ディレクトリあたりのハードリンク数上限の解除: Btrfs は従来ディレクトリ内にはハードリンクを20しか許しませんでしたが、今回のバージョンから6万5000個のハードリンクを作成できるようになりました。また、これに伴いディスク上の構造に拡張が加えられました(古いバージョンのカーネルとは互換性がありません)。

Hole punching: ファイルのある一定の領域を未割り当てな状態とする、FALLOC_FL_PUNCH_HOLE オプションをサポートしました。蛇足ですがこのパッチは fusion-io の方からポストされています。やはり SSD にとっては TRIM されているかどうかは重要な様子です。

chattr による ファイルごとの NOCOW 属性のサポート: btrfs ではデフォルトでは COW(copy-on-write) を使用しますが、従来は nodatacow マウントオプションにより COW を無効にすることができました。COW は負荷によっては性能が悪化します。この変更では、ファイル単位で COW を無効にすることができます。ただし、すでに内容があるファイルの属性を変更することはできず、空のファイルにのみ適用できます。すでに中身があるファイルを変更したい場合は、一度テンポラリファイルを作成して属性を変更し、中身をコピーする必要があります。また、COW を無効にすると、チェックサムも無効になります。

perf trace, strace の代替

strace の代替として、新しい "perf trace" が perf profiling infrastructure に追加されました。従来 strace は ptrace() を使っていましたが、perf trace は Linux profiling infrastrcture を使用します。

まだ開発の初期バージョンでシステムコールのみ表示できますが、今後ページフォールト、task のライフタイムイベント、スケジューリングイベントなどをサポートする予定です。また、現在は live で表示することしか出来ませんが、 perf.data のようなファイルを出力して事後の解析ができるようになる予定です。

サーバー側 TCP Fast Open

3.6 ではクライアント側での TCP Fast Open のみサポートされていましたが、3.7 でサーバー側のサポートも追加され、 Linux の TCP Fast Open サポートが完了しました。

実験的な SMBv2 プロトコルサポート

CIFS ネットワークファイルシステムが SMB プロトコル version 2 をサポートしました。 SMB2 はよく使われている CIFS と SMB によるファイル共有の後継で、2006 に Windows Vista により導入されました。 SMBv2 は前のバージョンに比べて高い性能、セキュリティと多くの機能が提供されます。 ちなみに Samba 4.0 では SMB 2.1 がサポートされ、また Windows 8 からサポートされる SMB 3.0 のサーバー実装も進んでいます。需要がどれほどあるのか、少し不安なところもありますが、新しいプロトコルのサポートに期待です。

NFS v4.1 の「実験的」が取れました

NFS v4.1 (RFC5661) は長い時間をかけてサポートされてきましたが、今回はじめて「実験的(experimental)」ラベルが取れました。

NFC v4.1 の主な機能は pNFS (parallel NFS) です。pNFS を用いると、ファイルシステムやファイルを複数のサーバーに分散して配置し、並列にアクセスすることが可能になります。

拡張性のある VLAN トンネリングプロトコル

vxlan という、L2 ethernet over UDP のトンネリングプロトコルが Linux に追加されました。 vxlan はしばしば仮想化環境で仮想ネットワークをトンネリングするために使われます。

VXLAN プロトコルそのものは RFC ドラフトで、VLAN の数が 4096 に制限されていることを解決するためのトンネリングプロトコルです。 vxlan では識別子が 24bit に拡張されます。また、使用するUDPポートは一つです。他のほとんどのトンネリングプロトコルとは異なり、VXLAN は 1:1 だけではなく 1:n の接続もサポートしています。VXLAN デバイスは接続先のIPを自動識別してブリッジを自動構成することも可能ですし、または静的に転送設定を記述することもできます。 Open vSwitch のための VXLAN 実装もあります。

Intel SMAP のサポート

Intel SMAP (Supervisor Mode Access Prevention) は、将来の Intel プロセッサに導入されるセキュリティ拡張です。SMAP が有効になると、カーネルがユーザー空間のメモリにアクセスすることが禁止されます。いくつかの exploit の防止に役立ちます。

ext4 の改善

truncate / unlink が高速化されました。 あるベンチマークにおいて、60GB のファイルを rm する場合、従来 2.7秒かかっていたものが 0.6秒強まで短縮されています。

ディレクトリエントリのサイズを一定に制限することができるようになりました。

ネットワーク

loopback インタフェースのデフォルト MTU が 64kb に増えました。

まとめると、今回の目玉は ARM アーキテクチャの改善ですが、btrfs や ext4 のパフォーマンス改善など、実際に役に立つ変更も多数含まれています。また、 TCP Fast Open のサーバーサイドサポートも含まれましたので、Web アプリケーションの高速化には 3.7 以降が必須になってくるでしょう。

Part of the above article is translated from http://kernelnewbies.org/Linux_3.7, CC-BY Linux Kernel Newbies

0 件のコメント:

コメントを投稿