8.11. コンパイラーおよび開発ツール
システムアップグレードの中断後に ldconfig
がクラッシュしなくなりました
以前は、システムアップグレードの中断後、/usr/lib64
ディレクトリーに残された不完全な共有オブジェクトを処理する際に、ldconfig
ユーティリティーがセグメンテーション違反で予期せず終了していました。この更新により、ldconfig
はシステムのアップグレード中に書き込まれた一時ファイルを無視するようになりました。その結果、システムアップグレードの中断後に ldconfig
がクラッシュしなくなりました。
glibc
は malloc
アリーナのチューニングに設定されたプロセッサーの数を使用するようになる
以前は、glibc
はスレッドごとの CPU アフィニティーマスクを使用して、malloc
の最大アリーナ数を調整していました。その結果、スレッドアフィニティーマスクをシステム内の CPU の小さなサブセットに制限すると、パフォーマンスが低下する可能性があります。
glibc
は、最大アリーナ数を決定するために設定された CPU の数を使用するように変更されました。その結果、スレッドごとの CPU アフィニティーマスクが制限された状態で実行されている場合でも、アプリケーションはより多くのアリーナを使用するため、パフォーマンスの低下は発生しなくなります。
Jira:RHEL-17157[1]
依存関係のサイクルに関係する共有オブジェクトに dlclose
を使用するアプリケーションとの glibc
互換性が向上しました
以前は、glibc
の dlclose
関数を使用して依存関係サイクル内の共有オブジェクトをアンロードすると、そのオブジェクトの ELF デストラクターが、他のすべてのオブジェクトがアンロードされるまで呼び出されない場合がありました。ELF デストラクターの実行が遅くなることで、アプリケーションでクラッシュやその他のエラーが発生しました。これは、最初にアンロードした共有オブジェクトの依存関係がすでに初期化解除されていることが原因でした。
この更新では、glibc
が修正され、他の ELF デストラクターを実行する前に、アンロードする直近のオブジェクトの ELF デストラクターを呼び出すようになりました。その結果、依存関係サイクルに関係する共有オブジェクトに dlclose
を使用するアプリケーションとの互換性が向上し、クラッシュが発生しなくなりました。
Jira:RHEL-2491[1]
make
はディレクトリーの実行を思考しなくなる
以前は、make
は実行しようとしている実行可能ファイルが、実際に実行可能ファイルであることを確認していませんでした。その結果、パスに実行可能ファイルと同じ名前のディレクトリーが含まれている場合、make
は代わりにそのディレクトリーを実行しようとしました。この更新により、make
は実行可能ファイルを検索するときに追加のチェックを行うようになりました。その結果、make
はディレクトリーを実行しようとしなくなりました。
glibc
ワイド文字書き込みパフォーマンスの向上
以前は、glibc
のワイド stdio
ストリーム実装では、デフォルトのバッファーサイズがワイド文字の書き込み操作に十分な大きさであるとは扱われず、代わりに 16 バイトのフォールバックバッファーが使用されていたため、パフォーマンスに悪影響がありました。この更新により、バッファー管理が修正され、書き込みバッファー全体が使用されるようになりました。その結果、glibc
ワイド文字書き込みパフォーマンスが向上します。
Jira:RHEL-19862[1]
glibc
getaddrinfo
関数が ncsd
キャッシュ情報を正しく読み取るようになる
以前は、glibc
の getaddrinfo
関数のバグにより、リストアドレス情報構造体に空の要素が返されることがありました。この更新により、getaddrinfo
関数が修正され、ncsd
キャッシュデータを正しく読み取り、変換できるようになり、結果として正しいアドレス情報が返されるようになりました。
依存関係のサイクルに関係する共有オブジェクトに dlclose
を使用するアプリケーションとの glibc
互換性が向上しました
以前は、glibc
の dlclose
関数を使用して依存関係サイクル内の共有オブジェクトをアンロードすると、そのオブジェクトの ELF デストラクターが、他のすべてのオブジェクトがアンロードされるまで呼び出されない場合がありました。ELF デストラクターの実行が遅くなることで、アプリケーションでクラッシュやその他のエラーが発生しました。これは、最初にアンロードした共有オブジェクトの依存関係がすでに初期化解除されていることが原因でした。
この更新では、glibc
が修正され、他の ELF デストラクターを実行する前に、アンロードする直近のオブジェクトの ELF デストラクターを呼び出すようになりました。その結果、依存関係サイクルに関係する共有オブジェクトに dlclose
を使用するアプリケーションとの互換性が向上し、クラッシュが発生しなくなりました。
キャッシュ有効期限情報の不一致により ncsd
の起動が失敗しなくなる
以前は、永続キャッシュファイル内のキャッシュ有効期限情報が一貫していないため、glibc
Name Service Switch Caching Daemon (nscd
) の起動に失敗する可能性がありました。この更新により、ncsd
はタイミング情報が一貫していないキャッシュエントリーを削除対象としてマークし、スキップするようになりました。その結果、キャッシュ有効期限情報の不一致により ncsd
の起動が失敗することがなくなりました。
一貫して高速な glibc
スレッドローカルストレージパフォーマンス
以前は、glibc
ダイナミックリンカーは、dlopen()
関数を使用して TLS を持つ共有オブジェクトがロードされた後、特定のスレッドローカルストレージ (TLS) メタデータを調整しなかったため、TLS アクセスが遅くなっていました。この更新により、ダイナミックリンカーは、dlopen()
呼び出しによって発生した TLS の変更に対して、TLS メタデータを更新するようになりました。その結果、TLS アクセスは一貫して高速になります。