第7章 コンパイラーとツール

Performance Co-Pilot がバージョン 3.11.8 にリベース

Performance Co-Pilot アプリケーション (PCP) がアップストリームバージョン 3.11.81 にアップグレードされ、以前のバージョンに対してバグ修正および機能拡張が数多く追加されました。主な機能拡張は以下の通りです。
  • 新規のクライアントツール pcp2influxdb が追加され、パフォーマンスメトリクス値の influxdb データベースへのエクスポートが可能になりました。
  • 新規のクライアントツール pcp-mpstat および pcp-pidstat が追加され、mpstat および pidstat 値のレトロスペクティブ分析が可能になりました。
  • デバイスマッパー、Ceph デバイス、cpusched cgroup、per-processor soft IRQ (プロセッサー別のソフト IRC)、buddyinfozoneinfo、共有メモリー、libvirt、same-page-sharing (同一ページの共有)、lioRedis、および Docker についての新規のパフォーマンスメトリクスが追加されました。
  • 複数のサブシステムからの追加のパフォーマンスメトリクスを各種の PCP 分析ツールで利用できるようになりました (BZ#1423020)。

systemtap がバージョン 3.1 にリベース

systemtap パッケージがアップストリームバージョン 3.1 にアップグレードされ、以前のバージョンに対してバグ修正および機能拡張が数多く追加されています。主な変更点は以下の通りです。
  • システム呼び出しのプローブのデフォルト設定は debuginfo 情報に基づかなくなりました。
  • Python 関数のプローブのサポートが追加されました。
  • Java 関数パラメーターへのアクセスがより均一化されました。
  • 統計集計 (Statistical Aggregate) 変数のパフォーマンスが向上しました。
  • 新規の統計演算子 @variance が追加されました。
  • ユーザースペースの値の取得および設定のためのオプションが追加されました。
  • NFS トラフィックを監視するスクリプトが追加されました。
  • nfs.proc.read_done プローブで count 変数が 0 ではなく実際の値を表示するようになりました (BZ#1398393、BZ#1416204、BZ#1433391)。

valgrind がバージョン 3.12 にリベース

valgrind パッケージがアップストリームバージョン 3.12 にアップグレードされ、以前のバージョンに対してバグ修正および機能拡張が数多く追加されています。主な変更点は以下の通りです。
  • 新規オプションの --ignore-range-below-sp が memcheck ツールに追加され、スタックポインター下のメモリーアクセスが無視されるようになりました。これは、現在非推奨になっているオプション --workaround-gcc296-bugs=yes を一般的に置き換えるものです。
  • --gen-suppressions=yes オプションで生成される suppression エントリーの呼び出し元の最大数は、--num-callers オプションで指定される値と等しくなりました。
  • AMD64 および Intel 64 アーキテクチャーでの memcheck ツールなどの最も一般的なユースケースでのコードブロックのインストルメントにかかるコストが削減されました。
  • 8KB 以下の命令のアドレス範囲の多くを破棄するプログラムをデバッグにおけるパフォーマンスが向上しました。
  • IBM Power 9 (ISA 3.0) アーキテクチャーのサポートが追加されました。
  • AMD の FMA4 命令の部分的なサポートが追加されました。
  • 64 ビット ARM アーキテクチャーのバージョン 8 における暗号および CRC 命令のサポートが追加されました (BZ#1391217)。

新パッケージ: unitsofmeasurement

unitsofmeasurement パッケージは Java コードでの測定単位の表現を有効にします。測定単位の新規の API により、物理的な数量の処理が簡単になり、エラーが発生しにくくなりました。このパッケージの API はメモリーおよびリソースの使用を効率化します (BZ#1422263)。

HTTP クライアントの SSL/TLS 証明書の検証が Python 標準ライブラリーにてデフォルトで有効にされる

HTTP クライアントのデフォルトのグローバル設定が Python 標準ライブラリーで変更され、SSL/TLS 証明書がデフォルトで検証されるようになりました。ファイルベースの設定を使用するお客様はこの変更による影響を受けません。詳細は、https://access.redhat.com/articles/2039753 を参照してください (BZ#1219110)。

%gemspec_add_dep および %gemspec_remove_dep のサポートが追加される

今回の更新により、%gemspec_add_dep および %gemspec_remove_dep マクロのサポートが追加されました。これらのマクロにより rubygem-* パッケージの依存関係の調整がより容易になります。さらに、現在のすべてのマクロが拡張され、パッケージのリリース前のバージョンのサポートが強化されました (BZ#1397390)。

ipmitool がバージョン 1.8.18 にリベース

ipmitool パッケージがアップストリームバージョン 1.8.18 にアップグレードされ、以前のバージョンに対してバグ修正および機能拡張の数多くが追加されています。主な変更点は以下の通りです。
  • PEF ユーザーインターフェースが再設計されています。
  • 新規のサブコマンド lan6 が IP バージョン 6 のローカルエリアネットワークパラメーター用に追加されました。
  • VITA 固有のセンサータイプおよびイベントのサポートが追加されました。
  • HMAC_MD5 および HMAC_SHA256 暗号のサポートが追加されました。
  • PICMG 拡張 5.x のチェックサポートが追加されました。
  • 新規の通信インターフェースとしての USB メディアのサポートが追加されました。
  • USB ドライバーが GNU Linux システム用にデフォルトで有効にされます (BZ#1398658)。

IBM Power の Little Endian 版向けに lshw が更新

マシンのハードウェア設定についての詳細情報を提供する lshw パッケージが IBM Power System の Little Endian 版向けに更新されました (BZ#1368704)。

dmidecode が更新される

dmidecode パッケージがバージョン 3.0 に更新され、複数のバグ修正や機能改善が行われました (BZ#1385884)。

iSCSI が targetcli の使用による ALUA 操作をサポート

イニシエーターからターゲットへの複数のパスで、非対称論理ユニットアクセス (ALUA) を使用し、非均一的で優先的な方法でパスを使用する方法を設定できます。Linux-IO (LIO) カーネルターゲットはこの機能を常にサポートしてきました。今回の更新により、targetcli コマンドシェルを使用して ALUA の操作を設定することができます (BZ#1243410)。

jansson がバージョン 2.10 にリベース

jansson ライブラリーがバージョン 2.10 に更新され、複数のバグ修正および機能拡張が追加されています。主な機能拡張は以下の通りです。
  • インターフェースが追加され、clevistang および jose アプリケーションがサポートされるようになりました (BZ#1389805)。

egrep および fgrep の新たな互換性環境変数

以前の grep リベースでは、egrep および fgrep コマンドはそれぞれ grep -E および grep -F に置き換えられました。この変更により、grep のみが ps コマンドの出力に表示されるためお客様のスクリプトに影響が及ぶ可能性がありました。この問題を防ぐため、今回の更新では新規の互換性環境変数 GREP_LEGACY_EGREP_FGREP_PS が導入されました。egrep および fgrepps 出力で引き続き表示されるようにするには、変数を 1 に設定します。
GREP_LEGACY_EGREP_FGREP_PS=1
(BZ#1297441)

lastcomm--pid オプションに対応

lastcomm コマンドが --pid オプションに対応するようになりました。このオプションは、カーネルでサポートされている場合に各レコードのプロセス ID (PID) および親プロセス ID (PPID) を表示します (BZ#1255183)。

新パッケージ: perl-Perl4-CoreLibs

新規の perl-Perl4-CoreLibs パッケージが Red Hat Enterprise Linux 7 の Base チャンネルで利用できるようになりました。このパッケージには Perl 4 で利用可能であったライブラリーで Perl 5.16 で削除されたライブラリーが含まれ、これらは Red Hat Enterprise Linux 7 と共に提供されます。以前のリベースでは、これらのライブラリーは Optional チャンネルより Perl サブパッケージで提供されていました (BZ#1366724)。

tar がアーカイブからの抽出時にディレクトリーへのシンボリックリンクをフォロー

今回の更新により、--keep-directory-symlink オプションが tar コマンドに追加されました。このオプションは、抽出対象のディレクトリーと同じ名前のシンボリックリンクが表示されると tar の動作を変更します。tar はデフォルトでシンボリックリンクを削除してからディレクトリーを抽出していました。--keep-directory-symlink オプションはこの動作を無効にし、tar に対して、アーカイブからの抽出時にディレクトリーへのシンボリックリンクにフォローするように指示します (BZ#1350640)。

IO::Socket::SSL Perl モジュールが TLS バージョンの制限に対応

Net:SSLeay Perl モジュールが更新されてセキュリティー強化のために使用できる TLS プロトコルのバージョン 1.1 または 1.2 を明示的に指定できるようになり、IO::Socket::SSL モジュールもこれに応じて更新されました。新規の IO::Socket::SSL オブジェクトの作成時に、SSL_version オプションを TLSv1_1 または TLSv1_2 に設定することで TLS バージョンを 1.1 または 1.2 に限定できるようになりました。また、TLSv11 および TLSv12 を使用することもできます。これらの値には大文字と小文字の区別が必要であることに注意してください (BZ#1335035)。

Net:SSLeay Perl モジュールが TLS バージョンの制限に対応

Net:SSLeay Perl モジュールが更新され、セキュリティー強化のために使用できる TLS プロトコルのバージョンを明示的に指定できるようになりました。TLS をバージョン 1.1 または 1.2 に限定するには、Net::SSLeay::ssl_version の変数をそれぞれ 11 または 12 に設定します (BZ#1335028)。

wget が TLS プロトコルバージョンの指定に対応

以前のバージョンでは、wget ユーティリティーではリモートサーバーへの接続時に TLS プロトコルの最も高いバージョンである 1.2 がデフォルトで使用されました。今回の更新により、wget の機能が強化され、--secure-protocol=TLSv1_1 または --secure-protocol=TLSv1_2 コマンドラインのオプションを wget コマンドに追加することで、ユーザーが TLS プロトコルのマイナーバージョンを明示的に選択できるようになりました (BZ#1439811)。

tcpdump がバージョン 4.9.0 にリベース

tcpdump パッケージがアップストリームバージョン 4.9.0 にアップグレードされ、以前のバージョンに対してバグ修正および機能拡張が数多く追加されています。主な変更点は以下の通りです。
  • セキュリティー脆弱性が数多く修正されました
  • よく使用されるネットワークプロトコルの分析において数多くの改善が加えられました
  • デフォルトの snaplen 機能が 262144 バイトに拡張されました
  • キャプチャーバッファーが 4 MiB に拡大されました
変更の詳細な一覧については、アップストリームの変更ログを参照してください: http://www.tcpdump.org/tcpdump-changes.txt (BZ#1422473)

tcpdump のキャプチャーの方向を設定するオプションが -P から -Q に変更

以前のリリースでは、Red Hat Enterprise Linux の tcpdump ユーティリティーは -P オプションを使用してキャプチャーの方向を設定し、アップストリームバージョンは -Q を使用していました。今回 -Q オプションが実装され、これが優先される設定になりました。-P オプションには -Q のエイリアスとしての以前の機能が保持されますが、警告が表示されます (BZ#1292056)。

OpenJDK が 64 ビット ARM アーキテクチャーの SystemTap に対応

OpenJDK プラットフォームは 64 ビット ARM アーキテクチャーで SystemTap インストルメントツールでのイントロスペクションをサポートします (BZ#1373986)。

sos がバージョン 3.4 にリベース

sos パッケージがアップストリームバージョン 3.4 にアップグレードされ、以下を含む機能拡張、新機能およびバグ修正が数多く追加されています。
  • virt-whonodejsnpmdracutjuju 2.0grafananfsganeshacollectdcanonical_livepatchjarssaltsaltmasterstorageconsolegnocchicryptoazure/Red Hat、および zfs の新規のプラグインが追加されました。
  • API プラグインの機能拡張
  • 国際化の更新
  • ネットワークプラグインは、ネットワーク名に一重引用符文字 ' が含まれる場合もクラッシュしなくなりました。
  • foreman-debug プラグイン実行時のタイムアウトが長く設定され、不完全な foreman-debug 情報の収集を防げるようになりました。
  • 一部のプライベート SSL 証明書ファイルが収集されなくなりました (BZ#1414879)。

targetd がバージョン 0.8.6 にリベース

targetd パッケージがアップストリームのバージョン 0.8.6 にアップグレードされ、以前のバージョンに対するバグ修正および機能強化が数多く追加されています。とくに、targetd サービスがPython 2 または Python 3 ランタイムのいずれかで実行され、以下の API が追加されています。initiator_listaccess_group_listaccess_group_createaccess_group_destroyaccess_group_init_addaccess_group_init_delaccess_group_map_listaccess_group_map_create、およびaccess_group_map_destroy
主なバグ修正は以下の通りです。
  • targetd は JSON-RPC 応答バージョン 2.0 に準拠するようになりました。
  • export_create API を使用して同一の LUN を複数のイニシエーターにマップできるようになりました。
  • targetd で SSL 証明書が起動時に存在することを確認できるようになりました (BZ#1162381)。

rubygem-abrt がバージョン 0.3.0 にリベース

rubygem-abrt パッケージがバージョン 0.3.0 にリベースされ、以前のバージョンに対して複数のバグ修正および機能拡張が追加されています。主な変更点は以下の通りです。
  • Ruby ABRT ハンドラーが自動匿名マイクロレポート uReport をサポートするようになりました。uReports が有効にされると、開発者にはアプリケーションの問題についての通知がすぐに送られ、迅速なバグの修正や問題の解決が可能になります。
  • 以前のリリースでは、Ruby アプリケーションが Bundler を使用してその依存関係を管理する際にエラーが生じると、Ruby ABRT ハンドラーのコンポーネントをロードするために正しくないロジックが使用されていました。そのため、予想しない LoadReport エラーが、適切な ABRT レポートの代わりにユーザーに報告されていました。ロードするロジックが修正されたので、Ruby アプリケーションのエラーが ABRT を使用して正しく処理され、報告されるようになりました (BZ#1418750)。

新パッケージ: http-parser

新規の http-parser パッケージは HTTP メッセージを解析するためのユーティリティーを提供します。これは要求と応答の両方を解析します。パーサーは HTTP アプリケーションのパフォーマンスで使用されるように設計されています。これはシステム呼び出しや割り当てを実行せず、データをバッファー処理せず、いつでも中断できます。アーキテクチャーによって、メッセージストリームごとに約 40 バイトのデータのみが必要になります (BZ#1393819)。

すべてのデフォルト POSIX mutex の Intel および IBM POWER トランザクションメモリーサポート

デフォルトの POSIX mutex は Intel および IBM POWER のトランザクションメモリーサポートで透過的に置き換えられます。これにより、ロック取得にかかるコストを大幅に削減できます。すべてのデフォルト POSIX mutex のトランザクションメモリーサポートを有効にするには、RHEL_GLIBC_TUNABLES=glibc.elision.enable 環境変数を 1 に設定します。その結果、一部のアプリケーションのパフォーマンスを強化できます。
開発者はプロファイリングを使用してこの機能を有効にすることでアプリケーションのパフォーマンスを強化できるかどうかを判断することが勧められています (BZ#841653、BZ#731835)。

glibc がグループのマージに対応

異なる Name Service モジュールのグループメンバーをマージする機能が glibc に追加されました。その結果、複数のホスト間で一元化されたユーザーのアクセス制御およびグループメンバーシップの管理が以前よりも容易になりました (BZ#1298975)。

glibc が IBM POWER9 アーキテクチャーで最適化された文字列比較関数に対応

glibc ライブラリーの文字列比較関数 strcmp および strncmp が IBM POWER9 アーキテクチャーで最適化されています (BZ#1320947)。

Intel SSE、AVX および AVX512 機能の使用により動的にロードされるライブラリーのパフォーマンスが向上

Intel SSE、AVX、および AVX512 機能の使用によりライブラリーの動的なライブラリーのロードが更新されました。その結果、これらのライブラリーのロード中のパフォーマンスが向上しました。さらに、LD_AUDIT 形式の監査のサポートが追加されています (BZ#1421155)。

elfutils がバージョン 0.168 にリベース

elfutils パッケージがアップストリームバージョン 0.168 にアップグレードされ、バグ修正および機能拡張が数多く追加されています。
  • eu-readelf ユーティリティーのオプション --symbols によりシンボルを表示するためのセクションを選択できるようになりました。
  • ELF/DWARF 文字列テーブルの作成関数が libdw ライブラリーに新たに追加されました。
  • DW_LANG_PL1 定数が DW_LANG_PLI に変更されました。以前の名前の使用は依然として許可されます。
  • libelf ライブラリーの gelf_newehdr および gelf_newphdr 関数の戻り値の型が、他の libelf 実装とのソースの互換性のために void* に変更されました。この変更により、Red Hat Enterprise Linux でサポートされるすべてのプットフォームでのバイナリー互換性が維持されます (BZ#1400302)。

bison がバージョン 3.0.4 にリベース

bison パッケージがアップストリームバージョン 3.0.4 にアップグレードされ、バグ修正および機能拡張が数多く追加されています。
  • 一部のプットフォームでは、一部のキャレットエラーにより診断が終了しない可能性がありました。この問題は修正されています。
  • -Werror=CATEGORY オプションが追加され、指定された警告をエラーとして処理できるようになりました。警告は -W オプションを使用して明示的にアクティブにしておく必要がなくなりました。
  • 優先順位 (precedence) 規則の処理において多くの改善が行われています。
  • 不要 (useless) 項目 (規則?) の処理において多くの改善が行われています。
さらに、以下の 3 つの後方互換性を失わせる変更が導入されています。
  • 以下の機能が非推奨になりました: YYFAILYYLEX_PARAMYYPARSE_PARAMyystypeyyltype
  • アクションの末尾に欠落しているセミコロンが自動的に追加されることはなくなりました。
  • Autoconf バージョン 2.69 以前では、Bison 拡張を使用する場合オプション -Wno-yacc(AM_)YFLAGS に渡す必要があります (BZ#1306000)。

システムのデフォルト CA バンドルがコンパイル時のデフォルト設定や mutt の設定でデフォルトとして設定される

以前のバージョンでは、LS/SSL 経由で新しいシステムに接続する場合、mutt のメールクライアントがユーザーに対し、証明書を保存することを要求しました。今回の更新により、システムの認証局 (CA) バンドルが mutt でデフォルトで設定されます。その結果、mutt はユーザーに対する証明書の承認または拒否を求めるプロンプトなしに、有効な証明書で SSL/TLS 経由でホストに接続できるようになりました (BZ#1388511)。

objdump の混合リストの生成がスピードアップ

以前のバージョンでは、DWARE デバッグ情報を解析し、ソースコードを見つけるために objdump ツールで使用される BFD ライブラリーのパフォーマンスには制限がありました。その結果、objdump の速度は、ソースコードの混合リストの生成や逆アセンブルの際に大幅に遅くなりました。BFD ライブラリーのパフォーマンスが向上したことにより、objdump によるソースコードの混合リストの生成や逆アセンブルの速度が速くなりました (BZ#1366052)。

ethtoolfjes ドライバーからの可読形式の出力に対応

ethtool ユーティリティーの機能が拡張し、fjes ドライバーの可読形式のレジスターダンプ出力が提供されるようになりました。その結果、ethtool のユーザーによる Fujitsu Extended Socket Network Device ドライバーの検査がより容易になりました (BZ#1402701)。

ecj がバージョン 4.5.2 にリベース

ecj パッケージがアップストリームバージョン 4.5.2 にアップグレードされ、以前のバージョンに対してバグ修正と機能拡張が数多く追加されました。とくに、バージョン 8 の Java 言語に追加された機能サポートが充実しました。その結果、Java 8 機能を使用した Java コードのコンパイルが失敗しなくなりました。これには Java ランタイム環境によって提供されるシステムクラスなど、Java 8 機能を使用しないコードがこれらの機能を使用するコードを参照するケースも含まれます (BZ#1379855)。