Ubuntu Weekly Topics

Ubuntu 24.04 LTS(noble)開発 / 前提CPUの模索と速度面の強化のための取り組み

noble(Ubuntu 24.04 LTS)の開発 / 前提CPUの模索と速度面の強化のための取り組み

nobleの開発において、非常に興味深い取り組みが開始されています。取り組みは大きく2つ、⁠前提となるCPUの命令セットの変更の検討」「パフォーマンスプロファイル取得のためのコンパイラオプションの変更」です。

前提となるCPUの命令セットの変更の検討

順に見ていきましょう。まず一つ目は「Ubuntuが前提とするCPUの命令セットの変更」『検討』です。

IntelやAMDの提供するCPUには、拡張命令セットと呼ばれる「x86-64の仕様策定時点では定義されていなかったが、追加された命令」というものが大量に存在します。これらの命令セットは「特定の処理」を高速化できる一方、非対応のCPUでは実行できない[1]という制限をもたらします。

これらの命令セットを適切に利用するためには、大きく分けて2つのアプローチがあります。一つは「利用可能な命令を認識できるようにしておき、必要に応じて新命令を使っていく⁠⁠、もう一つは「あらかじめ特定の命令セットが使えるものという前提でコンパイル時に決め打ちする」です。前者のほうが(今のところ)圧倒的に手間がかかるため、この実装はlibcなどのごく一部の(しかしよく利用される)ソフトウェアやライブラリに限られており、たいていのソフトウェアでは後者が採用されています。

言い換えると「非対応CPUでは動かないという制約を受け入れることで、対応CPU上の性能を引き出せるようにする」ということを意味します。

「コンパイル時に決め打ちする」ということから、⁠ソフトウェアセットを集めてきて、コンパイルしてバイナリで配布する」という対応を取るLinuxディストリビューション側では、⁠どのCPUを前提にするか」という悩みが生じます。

ところが命令セットというのは「CPUモデルごとに」微妙に対応が異なっており、さまざまな背景から「ある命令O1はこちらのベンダーの最新CPUではサポートされているが、別のベンダーのCPUではサポートされていない」⁠しかし命令O2はどのベンダーのものでもだいたいサポートされている、ただし最新であっても省電力モデルを除く」⁠最新世代になったら拡張命令がなかったことになった」⁠拡張命令を使ったら性能が速くなると思った? 残念、このモデルではむしろ遅くなります」などといった、大変に面倒くさい現実を形成しています。

これらを「一つ一つの命令セットで考えていくとCPUに詳しい人間を連れてくるしかなくなるため、ある程度の命令セットの集合を元に抽象化しよう」という試みが2020年の夏に、AMDとIntelとRed HatとSUSEの合同で行われました。この成果物は現在では「x86-64-v2」などのマイクロアーキテクチャレベルとして利用されています。

現在存在するマイクロアーキテクチャレベルは、⁠2009年ぐらいのIntelの最新CPU(v2⁠⁠2014年ぐらいのIntelの最新CPU(v3⁠⁠2019年ぐらいのIntelの最新CPUと思いきや『Xeon Scalableと第11世代CoreとZen 4、ただし第12世代以降のCoreは未サポート』という無限の複雑さを提供してしまっているやつ(v4⁠⁠」の3つに分けられています。

これらはgccなどのコンパイラに実装されており、Linuxディストリビューションの提供者やソフトウェア開発者に、⁠この命令セットの組み合わせであればたいてい大丈夫」という見切りを提供します。Linuxディストリビューション側では、これらのうち「どれ」を採用するかという選択によって「最適化するCPU」を選択できるようになっており、たとえばRed Hat Enterprise Linxu 9ではx86-64-v2が必須となっています。

この選択により、⁠古いハードウェアでは動作しないものの、CPUの性能を引き出すことができる」バイナリの配布が実現します。しかし、この決定は「商用の」Linuxディストリビューションでの発想です。RHELやSLESの場合は「そもそもハードウェアベンダーが保証していないような世代のもので、保証が必要なワークロードを動かすのですか?」といった、⁠そもそも何をしたかったのかもう一度思い出してみませんか」という話である程度解決できます。

一方、いわゆる「無償の」コミュニティベースのディストリビューションでは「すでに見捨てられたハードウェアでの利用」という使い方を完全に切り捨てることもできず、しかし「やけに古いハードウェア」がいつまでも動作するわけもなく、⁠現実的にどこにラインを設定するか」という判断は簡単ではありません。Ubuntu Proという「商用版」を持つUbuntuの場合はこの問題はさらに複雑になり、⁠性能と対応ハードウェアのどちらを取るか」という命題が生まれます。

そしてさらに状況を複雑にする要素として、現実的なワークロードでは「新命令を使えるようになったから速くなるとも限らない」という側面があります。これは「新命令を使える箇所が限定的である」⁠新命令を使うと、命令の依存関係の都合でむしろ遅くなる」といった事象の組み合わせによって発生します。

これらを事前に推測することは今のところ人類には困難なので、⁠適切に設計されたベンチマークで評価する」⁠実際にパフォーマンスプロファイルを取得し、高速化できているかどうかを考える」といった対応が必要になります。

……というあたりを実際にテストするため、23.04(Lunar)をx86-64-v3前提でリビルドしてしまいこれを用いて「実際にベンチマークを取ってみる」という実験(と、実験結果の共有の呼びかけ)が行われています。

現状としては「ごく一部についてパフォーマンス改善は見られるものの、誤差程度の差がほとんど」⁠むしろ遅くなるものもある」⁠積極的に変更するだけの必然性は見えない」といった結果が出ており、現状としては「まだ結論には時期尚早なものの、あまりやる意味はなさそう」という気配になっています。24.04 LTS(あるいはその先)で、Ubuntuがどのマイクロアーキテクチャレベルを前提にするのか、今後も実験と議論が続けられる予定です。

パフォーマンスプロファイル取得のためのコンパイラオプションの変更

もう一つは、コンパイラのデフォルトオプションとして、パフォーマンスプロファイルを取得するための機能(frame pointers)を有効にしておく、という判断が行われていることです。パフォーマンスプロファイルは主にデバッグ(特に「性能面で問題が出たとき)のための機能で、⁠どのコードがどの程度実行されたのか」を簡単に追跡できるようにするためのものです。

これまでのUbuntuでは、パフォーマンス問題に遭遇した場合に「まずデバッグ用のパッケージを生成し、そちらのバイナリに置き換え、あらためて『遅い』箇所を探し出す」という対応が必要でした。この対応が行われることで、そのままの環境で性能問題の追跡が可能になります。

ポイントとしては、⁠frame pointersを有効にすることそのものは、むしろ性能を引き下げる」ということです。なにしろ余計なものが増えることを意味するので、性能が向上する道理はどこにもありません。⁠事前のこの変更による影響は64bitアーキテクチャでは、おおむね1-2%の性能劣化で済む」⁠Our analysis suggests that the penalty on 64-bit architectures is between 1-2% in most cases.)とはいえ、支払いはゼロではありません。なお32bit環境ではより大きな性能劣化が見られるため、こちらでは有効にしないという判断が行われています。

なぜこのような『むしろ遅くなる』変更が行われるかというと、⁠簡単にプロファイリングできる」ことがもたらす影響は、⁠1-2%遅くなる」というコストに比べて圧倒的な大きなリターンになるためです。コンピューターの「遅さ」のほとんどは「極端な非効率で実行される、繰り返し実行されるコード」によってもたらされます。frame pointersをデフォルトで有効にしておくことで、⁠どこが性能上のボトルネックになっているのか」を識別できるようになります。これによって「問題を引き起こしている箇所」の特定と修正が可能になるため、⁠平均して1-2%」の性能劣化はトータルでは取り戻せるはずであるという判断が行われています。

より詳細なベンチマーク結果は、nobleのリリースより前のタイミングで提供される予定です。

その他のニュース

  • Grace MGXシリーズ[2]今後のUbuntuにおける予定。きわめて端的には「アーリーアダプター向けには22.04に最新カーネル他をバックポートしたバージョンを利用できる」⁠22.04.4がリリースされたらそちらを利用するのが推奨」となっています。
  • Lubuntuのnobleの現時点でのアルファ版機能セットについて。見た目という点では「Windows 11ライクなテーマ」の導入がポイントになりそうです。
  • 2023年のUbuntu Desktopの振り返り
  • LXDのライセンスに関する変更についての批判。LXDを利用している場合、⁠ライセンスがAGPLv3になりました(なぜそんな意味のないことを⁠⁠」という点と、⁠Incusとの相互のパッチのやりとりは難しくなる≒将来的には徐々に別物になっていく」点についての注意が必要になるでしょう。

今週のセキュリティアップデート

usn-6530-1:HAProxyのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007933.html
  • Ubuntu 23.04・22.04 LTS・20.04 LTS用のアップデータがリリースされています。CVE-2023-45539を修正します。
  • 悪意ある入力を行うことで、本来秘匿されるべき情報へのアクセスが可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6531-1:Redisのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007934.html
  • Ubuntu 22.04 LTS(Ubuntu Proのみ⁠⁠・20.04 LTS(Ubuntu Proのみ⁠⁠・18.04 ESM・16.04 ESM・14.04 ESM用のアップデータがリリースされています。CVE-2022-24834, CVE-2022-35977, CVE-2022-36021, CVE-2023-25155, CVE-2023-28856, CVE-2023-45145を修正します。
  • 悪意ある入力を行うことで、メモリ破壊を伴うクラッシュを誘発することが可能でした。任意のコードの実行・DoSが可能でした。また、認証迂回が可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6533-1:Linux kernel (OEM)のセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007935.html
  • Ubuntu 22.04 LTS用のアップデータがリリースされています。CVE-2023-46813, CVE-2023-46862を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため、通常はそのままアップデートの適用を行えば対応できます。

usn-6534-1:Linux kernelのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007936.html
  • Ubuntu 23.04・22.04 LTS用のアップデータがリリースされています。CVE-2023-37453, CVE-2023-3773, CVE-2023-39189, CVE-2023-39192, CVE-2023-39193, CVE-2023-39194, CVE-2023-39198, CVE-2023-42754, CVE-2023-5158, CVE-2023-5178, CVE-2023-5717, CVE-2023-6039を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため、通常はそのままアップデートの適用を行えば対応できます。

usn-6532-1:Linux kernelのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007937.html
  • Ubuntu 16.04 ESM・14.04 ESM用のアップデータがリリースされています。CVE-2023-20593, CVE-2023-31085, CVE-2023-39189, CVE-2023-39192, CVE-2023-39193, CVE-2023-39194, CVE-2023-42754, CVE-2023-45862, CVE-2023-45871, CVE-2023-5717を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため、通常はそのままアップデートの適用を行えば対応できます。

usn-6535-1:curlのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007938.html
  • Ubuntu 23.10・23.04・22.04 LTS・20.04 LTS用のアップデータがリリースされています。CVE-2023-46218, CVE-2023-46219を修正します。
  • 悪意ある応答を行うことで、不当なCookiesをセットすることが可能でした。また、HSTSの迂回が可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6463-2:Open VM Toolsのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007939.html
  • Ubuntu 18.04 ESM・16.04 ESM用のアップデータがリリースされています。CVE-2023-34058, CVE-2023-34059を修正します。
  • usn-6463-1の18.04 ESM・16.04 ESM向けパッケージです。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6536-1:Linux kernelのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007940.html
  • Ubuntu 23.10・22.04 LTS用のアップデータがリリースされています。CVE-2023-39189, CVE-2023-42754, CVE-2023-45898, CVE-2023-5158, CVE-2023-5178, CVE-2023-5717を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため、通常はそのままアップデートの適用を行えば対応できます。

usn-6537-1:Linux kernel (GCP)のセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007941.html
  • Ubuntu 23.10用のアップデータがリリースされています。CVE-2023-31085, CVE-2023-39189, CVE-2023-4244, CVE-2023-42754, CVE-2023-45898, CVE-2023-5090, CVE-2023-5158, CVE-2023-5178, CVE-2023-5345, CVE-2023-5633, CVE-2023-5717を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため、通常はそのままアップデートの適用を行えば対応できます。

usn-6538-1:PostgreSQLのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007942.html
  • Ubuntu 23.10・23.04・22.04 LTS・20.04 LTS用のアップデータがリリースされています。CVE-2023-5868, CVE-2023-5869, CVE-2023-5870を修正します。
  • 悪意ある入力を行うことで、メモリ破壊を伴うクラッシュを誘発することが可能でした。任意のコードの実行・DoSが可能でした。また、本来秘匿されるべき情報へのアクセス・特権昇格が可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6539-1:python-cryptographyのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007943.html
  • Ubuntu 23.10・23.04・22.04 LTS・20.04 LTS用のアップデータがリリースされています。CVE-2023-23931, CVE-2023-49083を修正します。
  • 悪意ある入力を行うことで、データ破壊・DoSが可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6540-1:BlueZのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007944.html
  • Ubuntu 23.10・23.04・22.04 LTS・20.04 LTS・18.04 ESM・16.04 ESM用のアップデータがリリースされています。CVE-2023-45866を修正します。
  • HIDデバイスからのインプットに、任意の文字列を挿入することが可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6541-1:GNU C Libraryのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007945.html
  • Ubuntu 23.04・22.04 LTS・20.04 LTS・18.04 ESM・16.04 ESM用のアップデータがリリースされています。CVE-2023-4806, CVE-2023-4813, CVE-2023-5156を修正します。
  • 悪意ある入力を行うことで、DoSが可能でした。
  • 対処方法:アップデータを適用の上、システムを再起動してください。

usn-6522-2:FreeRDPのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007946.html
  • Ubuntu 18.04 ESM用のアップデータがリリースされています。CVE-2022-41877, CVE-2023-39352, CVE-2023-39356を修正します。
  • usn-6522-1の18.04 ESM向けアップデートです。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6542-1:TinyXMLのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007947.html
  • Ubuntu 20.04 LTS・18.04 ESM・16.04 ESM用のアップデータがリリースされています。CVE-2021-42260を修正します。
  • 悪意ある入力を行うことで、DoSが可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6543-1:GNU Tarのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007948.html
  • Ubuntu 23.10・23.04・22.04 LTS・20.04 LTS・18.04 ESM・16.04 ESM・14.04 ESM用のアップデータがリリースされています。CVE-2023-39804を修正します。
  • 悪意ある加工を施したファイルを処理させることで、DoSが可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6500-2:Squidのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007949.html
  • Ubuntu 18.04 ESM・16.04 ESM用のアップデータがリリースされています。CVE-2023-46728, CVE-2023-46847を修正します。
  • {usn6500-1}の18.04 ESM・16.04 ESM用パッケージです。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6544-1:GNU binutilsのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007950.html
  • Ubuntu 22.04 LTS・20.04 LTS・14.04 ESM用のアップデータがリリースされています。CVE-2020-19726, CVE-2021-46174, CVE-2022-35205, CVE-2022-38533, CVE-2022-4285を修正します。
  • 悪意ある入力を行うことで、メモリ破壊を伴うクラッシュを誘発することが可能でした。任意のコードの実行・DoSが可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6545-1:WebKitGTKのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007951.html
  • Ubuntu 23.10・23.04・22.04 LTS用のアップデータがリリースされています。CVE-2023-42916, CVE-2023-42917を修正します。
  • 対処方法:アップデータを適用の上、WebKitGTKを利用するアプリケーションを再起動してください。

usn-6546-1:LibreOfficeのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007952.html
  • Ubuntu 23.10・23.04用のアップデータがリリースされています。CVE-2023-6185, CVE-2023-6186を修正します。
  • 悪意ある加工を施したファイルを処理させることで、任意のスクリプトやGStreamerプラグインの実行が可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6547-1:Pythonのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007953.html
  • Ubuntu 23.04用のアップデータがリリースされています。CVE-2023-41105を修正します。
  • パス名に加工を施すことで、パス名チェックの迂回が可能でした。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。

usn-6548-1:Linux kernelのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007954.html
  • Ubuntu 20.04 LTS・18.04 ESM用のアップデータがリリースされています。CVE-2023-3006, CVE-2023-37453, CVE-2023-39189, CVE-2023-39192, CVE-2023-39193, CVE-2023-39194, CVE-2023-42754, CVE-2023-5178, CVE-2023-5717, CVE-2023-6176を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため、通常はそのままアップデートの適用を行えば対応できます。

usn-6549-1:Linux kernelのセキュリティアップデート

  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2023-December/007955.html
  • Ubuntu 22.04 LTS・20.04 LTS用のアップデータがリリースされています。CVE-2023-37453, CVE-2023-3773, CVE-2023-39189, CVE-2023-39192, CVE-2023-39193, CVE-2023-39194, CVE-2023-39198, CVE-2023-42754, CVE-2023-5158, CVE-2023-5178, CVE-2023-5717を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため、通常はそのままアップデートの適用を行えば対応できます。

おすすめ記事

記事・ニュース一覧