Linuxカーネル4.5リリース、細かな改善点が中心の小規模リリース

 Linus Torvalds氏は3月13日、Linuxカーネル4.5のリリースを発表した。ユーザー空間メモリを使わずにファイルをコピーするシステムコールの導入や、ファイルシステム、ソケットなどの性能改善といった細かな改善点が中心のリリースとなっている。

 Linuxカーネル4.5は1月に公開されたLinuxカーネル4.4に続く最新版。7回のリリース候補(RC)を経てのリリースとなった。通常のスケジュールより遅れた理由として「RC8をリリースするかどうか迷った」と記している。全体として小規模なリリースとなったとしている。

 大きな変更点としては、まず新システムコールであるcopy_file_rangeの導入がある。ファイルをコピーする際に読み込んだデータをユーザー空間メモリにコピーせずにファイルに書き出すことで効率化を図るもの。パフォーマンスは一般的なcpを使ったコピーよりも若干速い程度だが、たとえばNFSなどのネットワークファイルシステムを対象とした場合など、特定のケースでは大幅に効率化が図れるという。将来的にはBtrfsなどのファイルシステムでもこのシステムコールを活用できるようにしていくという。

 また、AMD製GPUが持つ消費電力削減機能「PowerPlay」を実験的にサポートした。PowerPlayは非オープンソース版ドライバで実装されている機能だが、これがamdgpuドライバでも利用可能となる。この機能はデフォルトでは無効になっており、利用するにはamdgpu.powerplayカーネルオプションの値を1に設定する必要がある。

 Btrfs関連では、空き領域を管理するためのキャッシュ機構が改善された。従来のバージョンではこのキャッシュ機能のスケーラビリティにボトルネックがあり、30TB以上の容量を持ち頻繁にアクセスされるようなファイルシステムでは効果的に利用できなかったが、この問題が解決された。ただしこの機能は実験段階の実装ということでデフォルトでは有効になっておらず、利用したい場合は「-o space_cache=v2」オプション付きでファイルシステムをマウントする必要がある。そのほかファイルシステム関連ではext4でプロジェクトクォータのサポートが加わり、F2FSもdata_flushマウントオプションの導入など強化が図られた。XFS、CIFSなども強化されている。

 開発関連では、GCC 4.9で導入されたデバック機能「Undefined Behaviour SANitizer(UBSAN)」のサポートが行われた。これはコンパイル時に測定コードをバイナリに埋め込むことで未定義の動作を検出する機構で、本バージョンのLinuxカーネルではこのオプションを有効にしてカーネルのコンパイルが可能になった。

 Linuxカーネル3.4でマージしたデバイスマッパーの「verity」ターゲット(dm-verity)では、Forward Error Correction(前方誤り訂正)をサポートした。ブロックの破損が発生してもストレージのデータを復旧できるという。

 また、カーネルにメモリの使い方を伝えることでメモリ管理を最適化するシステムコールmadviseで、MADV_FREEフラグが加わった。すぐには使わないメモリ範囲を伝えることで、カーネルが関連したリソースを解放できるMADV_DONTNEEDがあるが、これに対してメモリアロケーターなどそのメモリが必要になる場合にリクレイムを行えるという。

 Linuxカーネル3.9で導入したソケットオプションSO_REUSEPORTで、UDPソケット向けに2種類の最適化を行った。また、cgroupのメモリコントローラーでソケットバッファはページキャッシュなどとは別になっていたが、全てのメモリページの種類をカバーするメモリコントローラーを導入した。これにより、メモリコントローラーにおけるソケットメモリの利用を適切に管理できるという。

 そのほか、epollファイルディスクリプタを利用した場合のマルチスレッド処理のスケーラビリティ向上やcgroup unified hierarchyの安定性向上なども行われている。

 また、ARM v6およびv7向けのコードの大規模なアップデートも行われたとのこと。現在、すべてのARM v6/v7向けにLinuxカーネルのビルドが可能になっているという。

kernel.org
https://www.kernel.org/