Back to the news overview

LXCFS 4.0 LTS リリースのお知らせ

6th of March 2020

はじめに

LXCFS チームは LXCFS 4.0.0 のリリースをお知らせできることをうれしく思います!

これは LXCFS 3.0.0 リリース以来、2 年に渡る作業の結果であり、LXCFS プロジェクトにとって 3 つめの LTS リリースとなります。このリリースは 2025 年 6 月までサポートされます。

主な変更点

リポジトリの再構成

LXCFS リポジトリは完全に再構成されました。LXCFS 4.0 までは、すべての機能が単一のファイル内に納められていました。これは、LXCFS が非常に小さな機能から成っていたために長期間うまく機能していました。長い年月をかけて、LXCFS はさまざまな新しい機能を追加し、コンテナでシステムのさまざまなものを仮想化する方法を大きく改善してきました。これは、もはや単一ファイルによるアプローチは実現できなくなっていることを表していました。

LXCFS 4.0 で、さまざまな広範囲の仮想化機能を、共通のソースディレクトリー以下の分割されたファイルに移動しました。これにより、ビルドシステムにもさまざまな変更が必要になりました。私たちは autotools ビルドスイートを使い続けてきましたが、LXCFS のビルド方法にも大きな変更が必要になりました。もっとも明らかな変更は、コンパイルされたバイナリーがトップレベルのディレクトリーからソースディレクトリー配下に生成されるようになったことです。LXCFS パッケージを作成しているディストリビューションでは、パッケージツールにこの変更を認識させる必要があるかもしれません。

cgroup2: 新しい単一 cgroup 階層のサポート

LXCFS の仮想化機能の多くは cgroup を中心に構成されています。すなわち、cgroup はシステムリソースへのアクセスを提供する様々なファイルが表示するコンテナ固有の値を計算するのに使われているということです。これまでは、LXCFS は cgroup v1(レガシーな cgroup)階層をもとにした仮想化のみをサポートしてきました。多くのシステムはゆっくりと cgroup v2(単一 cgroup)階層に移行するので、LXCFS を拡張して、可能な限り cgroup v2 階層を元にした同じ仮想化機能を提供するようにしました。

この「可能な限り」という言葉は強調する必要があります。現時点で、cgroup v2 階層の現在の実装にもとづいて仮想化できないさまざまな細かい機能があります。これは upstream のカーネルの cgroup v2 機能が成長するにつれて変わるかもしれません。しかし、カーネル開発者が cgroup v2 が cgroup v1 と完全に同じ機能を提供する意図を持っておらず保証もしていないため、完全に同じ機能を提供できることは保証できません。しかし、私たちは LXCFS が提供するものと同等の機能を提供できることを願っています。

パッチを送る際には、cgroup v1 と v2 階層が新機能を同様にサポートすることを確認し、可能な限り両方の実装を一度に提供していただけるとありがたいです。

cpu shares にもとづく /proc/cpuinfo/proc/stat の CPU 情報出力

procfs 内の cpuinfostat が提供する CPU 情報が cpu shares にもとづいて提供されるようになりました。これにより、通常の仮想化よりも詳細で正確な情報を提供できますが、LXCFS でより多くの状態を保持する必要があります。全機能を使用するには、cgroup v1(レガシー)の cpucpuacct コントローラーがシステム上で有効になっている必要があります。

cgroup v2(単一階層)が使われた場合は、非常におおまかな近似値のみしか提供できません。cgroup v2 の cpu コントローラーが、cgroup v1 の cpucpuacct コントローラーの機能の一部をサポートすることが期待されます。この機能は --enable-cfs フラグを LXCFS に与えると有効になります。

コマンドラインオプションの改良

LXCFS は時間の経過とともに機能を拡張しており、拡張した機能はコマンドラインオプションとして設定されてきました。オプションの中には長いもしくは短いオプションがなく、使い勝手は少し時代遅れに感じるかもしれませんでした。LXCFS 4.0 でコマンドラインの使い方が更新されました。次のオプションが使えます:

Usage: lxcfs <directory>

lxcfs set up fuse- and cgroup-based virtualizing filesystem

Options :
  -d, --debug          Run lxcfs with debugging enabled
  --disable-cfs        Disable cpu virtualization via cpu shares
  -f, --foreground     Run lxcfs in the foreground
  -n, --help           Print help
  -l, --enable-loadavg Enable loadavg virtualization
  -o                   Options to pass directly through fuse
  -p, --pidfile=FILE   Path to use for storing lxcfs pid
                       Default pidfile is /run/lxcfs.pid
  -u, --disable-swap   Disable swap virtualization
  -v, --version        Print lxcfs version
  --enable-pidfd       Use pidfd for process tracking

/proc/loadavg の仮想化

LXCFS が loadavg 出力を仮想化できるようになりました。--enable-loadavg を指定すると、LXCFS は cgroup にもとづいたコンテナ固有の /proc/loadavg を提供します。

pidfd がサポートするプロセスの追跡

LXCFS は様々な値を正しく仮想化するために、コンテナごとの init プロセスを追跡し続ける必要があります。これは、コンテナのプロセスが死んだときに検出する必要があるということです。この検出では、長い間 Linux を悩ませてきた通常の PID の再利用の競合を疑うことになります。

新しいカーネルでは、PID 再利用の問題を解決する pidfd の考え方が提供されています。LXCFS を --enable-pidfd 付きで起動した場合、カーネルがサポートしている場合はこの機能を使います。これによりプロセス追跡の信頼性が保証されます。

コンパイラベースのハードニング

長い間、LXC はコンパイラーベースのハードニングをサポートしてきました。つまり、コンパイラーやリンカーがサポートしている場合は、既知のコンパイラーやリンカーのオプションが自動的に有効になります。現時点でサポートされているハードニングフラグは次の通りです:

-Wimplicit-fallthrough=5
-Wcast-align
-Wstrict-prototypes
-fno-strict-aliasing
-fstack-clash-protection
-fstack-protector-strong
--param=ssp-buffer-size=4
-g
--mcet -fcf-protection
-Werror=implicit-function-declaration
-Wlogical-op
-Wmissing-include-dirs
-Wold-style-definition
-Winit-self
-Wunused-but-set-variable
-Wfloat-equal
-Wsuggest-attribute=noreturn
-Werror=return-type
-Werror=incompatible-pointer-types
-Wformat=2
-Wshadow
-Wendif-labels
-Werror=overflow
-fdiagnostics-show-option
-Werror=shift-count-overflow
-Werror=shift-overflow=2
-Wdate-time
-Wnested-externs
-fasynchronous-unwind-tables
-pipe
-fexceptions
-fvisibility=hidden

コンパイラによる最小限のリソースマネージメント

これまで長い間 LXC で行ってきたのと同様に、LXCFS でも clanggcc のクリーンアップマクロ機能を利用して、メモリーやファイルディスクリプターのようなリソースの自動クリーニングを提供します。LXC では、これによりリソースリークの数が大幅に減少しました。LXCFS でも同様になることが期待できます。

サポートする全アーキテクチャーで完全に有効なテストスイート

LXCFS 4.0 リリースに先立って、サポートする全アーキテクチャーでテストスイートを有効にしました。これにより、今後はより厳格なテストを行うことが保証されます。

サポートとアップグレード

LXCFS 4.0.0 は 2025 年の 6 月までサポートされる最新の LTS リリースです。LXCFS 3.0 はメンテナンスのペースが低頻度になり、重要なバグフィックスとセキュリティアップデートのみ提供されるようになります。

すべての LXCFS ユーザーは 4.0 ブランチへアップデートすることを強く推奨します。

ダウンロード

コントリビューター

LXCFS 4.0.0 は 15 名のコントリビューターによりリリースされました。