Pull Request on 2026年09月08日

dotnet/runtimeにマージされたPull RequestをAIで日本語要約

注意点

このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。


目次

  1. #133428 [release/11.0][PERF] Add release/11.0 to trigger branches in perf.yml
  2. #133409 Document SseParser buffer limits for untrusted and parallel use
  3. #133392 [release/9.0-staging] Update dependencies from dotnet/icu
  4. #133377 [wasm][coreclr] Use NoWasmIntrinsics substitutions for interpreted-only library tests
  5. #133375 Exclude Runtime_129681 from WASM
  6. #133371 Retry peer-reset timeouts in socket disposal tests on BSD/Apple
  7. #133367 [wasm] Build a test-specific corerun for nine more runtime tests
  8. #133361 Limit the size of SNI parsed from ClientHello
  9. #133351 Fix discarding of NRE's when unboxing nullables in Mono and JIT
  10. #133330 Remove createdump PID argument
  11. #133281 [Wasm RyuJIT] Fix: Pass Call's struct type to Wasm ABI Classifier Instead of Dest Store Type
  12. #133272 JIT: guard negative-offset bounds inference against underflow
  13. #133256 [release/11.0] Fix SIMD MinMax constant special cases
  14. #133218 Generate ReadyToRun unboxing stubs for browser Wasm
  15. #133200 Stabilize ConnectAsync_Cancel_ThrowsCancellationException loopback test
  16. #133176 [release/11.0] Check for SIG_IGN and SIG_DFL before calling previous signal handler
  17. #133144 [release/11.0] Fix NativeAOT thread-static debug info
  18. #132908 [release/11.0] Increase spinning/polling aggressiveness in the thread pool in low-saturation scenarios
  19. #132819 [CI Test] CoreCLR interpreter without dynamic code compilation
  20. #132807 Enable Helix job monitor for runtime perf
  21. #132489 [Apple mobile] Stage the Helix R2R app payload outside the crossgen2 input directory
  22. #131675 Deduplicate Tar writer/entry helpers
  23. #130556 Set minimum ISAs when compiling native code

#133428 [release/11.0][PERF] Add release/11.0 to trigger branches in perf.yml

概要

release/11.0ブランチを.NET Perf Labの自動実行トリガーに追加するAzure Pipelines性能テストワークフローの設定更新です。これにより、release/11.0ブランチへのコミット時に性能テストが自動的に実行されるようになります。既存のrelease/10.0などの他のリリースブランチと同じトリガーパターンに合わせた設定です。

変更内容

  • eng/pipelines/performance/perf.yml: trigger.branches.includeリストにrelease/11.0を追加

パフォーマンスへの影響

影響なし(CI/CDワークフロー設定の変更)

関連Issue

なし

その他

  • 前例として#117994の同様の更新を参照
  • リスク評価:低リスク。設定が正しくない場合は自動実行で追加エラーが発生し、その場合は更新の削除が必要となる可能性がある

#133409 Document SseParser buffer limits for untrusted and parallel use

  • 作成者: @Copilot
  • 作成日時: 2026年09月08日 09:47:53(UTC)
  • マージ日時: 2026年09月08日 13:47:48(UTC)
  • ラベル: area-System.Net

概要

System.Net.ServerSentEventsのSseParserを使用する際に、信頼できないまたは大規模なSSEストリームを解析するときのメモリ使用量制御に関するドキュメント更新です。SseParserOptions.MaxBufferSizeの設定推奨と、複数パーサーを並列実行する際のメモリ管理ガイダンスを追加しました。

サンプルコード:

using System.Net.ServerSentEvents;
using System.Text;

using Stream stream = await client.GetStreamAsync("https://localhost:12345/sse");
SseParserOptions<string> options = new(static (_, bytes) => Encoding.UTF8.GetString(bytes))
{
    MaxBufferSize = 64 * 1024 * 1024
};

await foreach (SseItem<string> item in SseParser.Create(stream, options).EnumerateAsync())
{
    Console.WriteLine(item.Data);
}

変更内容

  • SseParserOptions.cs: MaxBufferSizeのXMLドキュメントを拡張し、信頼できないストリーム向けの設定推奨を追加
  • SseParser.cs: Create(...)オーバーロードのXMLドキュメントに、信頼できないソースではオプション引数付きオーバーロードを推奨する記述を追加
  • PACKAGE.md: パッケージレベルのガイダンスと64MiBバッファ上限を設定したサンプルを追加

パフォーマンスへの影響

影響なし(ドキュメント更新のみ、既存の動作に変更なし)

関連Issue

なし

その他

レビュー指摘: Copilotから2件の改善提案があります:

  1. SseParser.Create(Stream)で<remarks>ブロックが重複している
  2. PACKAGE.mdのサンプルコードで未定義のclientが参照されている(HttpClientインスタンスの定義が必要)

これらの修正が必要です。本変更は内部実装に影響はなく、ドキュメント専用の変更です。


#133392 [release/9.0-staging] Update dependencies from dotnet/icu

概要

dotnet/icu リポジトリの依存関係を更新するPull Requestです。Microsoft.NETCore.Runtime.ICU.Transport パッケージを 9.0.0-rtm.26419.1 から 9.0.0-rtm.26457.4 へ更新しています。

変更内容

  • eng/Version.Details.xml: ICU Transport パッケージのバージョン情報を更新(変更行数: +2/-2)
  • eng/Versions.props: ICU Transport パッケージのバージョンを更新(変更行数: +1/-1)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPull Requestは Maestro による自動依存関係更新です。dotnet/icu リポジトリの release/9.0 ブランチからの変更が自動的に反映されています。


#133377 [wasm][coreclr] Use NoWasmIntrinsics substitutions for interpreted-only library tests

概要

CoreCLR WebAssembly(ブラウザ)の解釈実行モード(PublishReadyToRun=false)でトリミングされたライブラリテストが起動時にPlatformNotSupportedExceptionをスローして失敗する問題を修正します。CoreCLR解釈実行エンジンはマネージドSIMDをサポートしていないため、System.Runtime.Intrinsicsのget_IsSupported()ガード条件がトリミング時にtrueで固定化されると、SIMDパスが無条件に実行可能になり、インタプリタが例外をスローします。本変更は、CoreCLR + 非ReadyToRun構成でのみILLinkNoWasmIntrinsics置換ファイルを選択し、ガード条件を保持することで問題を解決します。

変更内容

  • eng/testing/tests.wasm.targets: _WasmIntrinsicsSubstitutionsプロパティを新規作成し、ILLink置換ファイル選択ロジックを統一化。RuntimeFlavor=CoreCLRかつPublishReadyToRunが未設定の場合、NoWasmIntrinsics置換を適用するよう条件分岐を追加(+8/-2行)。

パフォーマンスへの影響

影響なし(ビルド・テスト実行段階のみの変更)

関連Issue

なし

その他

カバレッジの注記: この変更によりPublishReadyToRun=false構成テストのカバレッジが変更されます。SIMDパスが到達不可能になるため、非ReadyToRun構成ではマネージドSIMDのカバレッジが得られなくなります。ただしこれは解釈実行エンジンが実際に実行可能な内容と整合します。

検証済み: System.Runtime.InteropServices.JavaScript.Testsでブラウザ + CoreCLR + トリミング構成でテスト実行確認済み(Tests run: 476, Passed: 474, Skipped: 2, WASM EXIT 0)。ReadyToRun構成と同一の結果。修正前は起動時に中止され結果が得られませんでした。


#133375 Exclude Runtime_129681 from WASM

概要

WASM32プラットフォームではRegion GCが未対応であるため、Runtime_129681 GC回帰テストをWASM32から除外する変更。テストはサポートされているCoreClrターゲット上では引き続き有効に保持される。修正前はWASM上で0x8007000Eエラーでスタートアップが失敗していた。

変更内容

  • src/tests/GC/Regressions/Github/Runtime_129681/Runtime_129681.csproj: CLRTestTargetUnsupportedプロパティを追加し、$(TargetArchitecture) == 'wasm'条件下でテストをWASM32から除外。Region GC対応がないWASM32の制限を説明するコメント付き。

パフォーマンスへの影響

影響なし

関連Issue

#132871

その他

  • テスト実行結果:macOS arm64 Checked環境でのテスト実行は成功(exit code 100)
  • 変更はプロジェクト設定のみで、テストロジック自体は変更されていない
  • 既存のテスト除外パターンに従った標準的なアプローチ

#133371 Retry peer-reset timeouts in socket disposal tests on BSD/Apple

概要

BSD/Apple プラットフォームにおいて、TcpReceiveSendGetsCanceledByDispose ソケット廃棄テストが peer-reset タイムアウトで不安定になる問題を修正します。既存のリトライループを拡張して、Apple/FreeBSD の send パス上での peer-receive タイムアウトを処理し、新しいソケットでリトライできるようにしました。ローカル キャンセルまたは廃棄の待機タイムアウトは引き続き即座に失敗します。

変更内容

  • src/libraries/System.Net.Sockets/tests/FunctionalTests/SendReceive/SendReceive.cs
    • socket1 を using ステートメントでラップし、例外終了時も確実にリソースが解放されるよう改善
    • Apple/FreeBSD send パス上で peer-receive TimeoutException をアサーション失敗に変換し、既存のリトライループ(8回)が新しいソケットで再試行できるように対応
    • peer-reset アサーションを保持し、ローカル キャンセル/廃棄タイムアウトは即座に失敗

パフォーマンスへの影響

影響なし(テストコード のみの変更)

関連Issue

#131990

その他

  • 変更は テストコードのみ で、製品コードへの影響はありません
  • Helix macOS 27 ARM64 での検証: 174 イテレーション、18,792 ケース合格、0 スキップ
  • BSD TCP reset-validation の既知の問題に対応: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296594
  • 変更および説明は GitHub Copilot により生成されました

#133367 [wasm] Build a test-specific corerun for nine more runtime tests

概要

browser-wasm環境における9つのランタイムテストプロジェクトからWasmBuildTestCorerun=falseの opt-outを削除します。PR #131877でinterop generatorがP/Invoke surfaceを処理できるようになったため、これらのプロジェクトはテスト固有のcorerun.wasmをネイティブライブラリ連携させて構築できるようになり、__TestNativeAssetsLinkedフラグが設定されてPlatformDoesNotSupportNativeTestAssetsゲートが解除されます。

変更内容

  • 対象プロジェクト(9件):

    • Interop/StructMarshalling/PInvoke/NestedStruct
    • JIT/Directed/StructABI/StructABI
    • JIT/Directed/callconv/CdeclMemberFunction/CdeclMemberFunctionTest
    • JIT/Directed/callconv/PlatformDefaultMemberFunction/PlatformDefaultMemberFunctionTest
    • JIT/Directed/callconv/StdCallMemberFunction/StdCallMemberFunctionTest
    • JIT/Directed/callconv/ThisCall/ThisCallTest
    • JIT/Methodical/Methodical_others
    • JIT/SIMD/JIT.SIMD_r
    • JIT/SIMD/JIT.SIMD_ro
  • 各プロジェクトの.csprojファイルからWasmBuildTestCorerunプロパティとその説明コメント(計3〜8行)を削除

  • Vector3Interop.csに軽微な修正(17行追加、4行削除)

パフォーマンスへの影響

影響なし。このPRはテストビルド設定の変更であり、ランタイム性能には直接的な影響を与えません。

関連Issue

#131877、#131811

その他

  • 検証状況:41個のopt-outプロジェクトすべてがbrowser-wasm環境で構築されテスト実行済み。9つのプロジェクトがcorerun.wasmをリンクして成功、残り32個は別の理由でopt-outが必要なため保持
  • CI確認:browser_wasm runtime-test leg(coreclr Pri0 Runtime Tests Run browser wasm checked)でgreen確認。9つすべてがPri0テスト
  • ローカル検証:macOS/arm64 + node環境で全9プロジェクトが構築、リンク、実行完了(END EXECUTION - PASSED)

#133361 Limit the size of SNI parsed from ClientHello

  • 作成者: @rzikm
  • 作成日時: 2026年09月07日 15:20:37(UTC)
  • マージ日時: 2026年09月08日 08:13:48(UTC)
  • ラベル: area-System.Net.Security

概要

ClientHello のSNI (Server Name Indication) ペイロード解析時、DNS ホスト名の標準上限である255バイトを超える値の処理を改善しました。255バイトを超えるSNI値は不正な形式として扱い、管理されたstring割り当てを回避しつつ、TLSフレームは完全であると判定し続けます。

変更内容

  • TlsFrameHelper.cs: ClientHello解析時のSNIホスト名デコーディングに255バイトの最大長ガード条件を追加。超過時はSNIをnullとして返す(フレームパース自体は成功)。
  • TlsFrameHelperTests.cs: 255バイト(受理)と256バイト(拒否)のSNIペイロードの境界テストを追加。フレーム完全性(TryGetFrameInfoがtrueを返す)も検証。

パフォーマンスへの影響

影響なし。不正なサイズのSNI値に対して不要なmanaged string割り当てを回避することで、メモリ効率が向上する可能性があります。

関連Issue

#133348

その他

  • テスト実績: TlsFrameHelperTests 4,060件パス、System.Net.Security.Unit.Tests 117件パス(4件スキップ)
  • フレーム完全性セマンティクスを保持しているため、TlsSessionが追加入力を誤って待機することはありません。
  • 内部実装の改善であり、公開APIの変更はありません。

#133351 Fix discarding of NRE's when unboxing nullables in Mono and JIT

概要

VN(Value Number)ベースの定数フォールディング最適化がnullable型のunboxing時にNullReferenceExceptionを不正に破棄する問題を修正します。JIT と Mono インタープリタの両方で、box Nullable<T>; call GetType()のような操作が例外をスキップしていた問題を解決し、例外セットが操作数でカバーされていない場合に「throwing root」を保持するようにします。

変更内容

  • JIT VN最適化の修正(assertionprop.cpp, gentree.cpp)

    • 例外セットのカバレッジに基づいてroot副作用を保持する判定ロジックを追加
    • 未使用のGetType操作をNULLCHECKに削減する副作用抽出ヘルパーを実装
    • コンパイラに新しいヘルパーメソッドを宣言(compiler.h)
  • Mono インタープリタの修正(transform.c)

    • nullable型に対するbox; GetType最適化を明示的に無効化(#132732の修正を再適用)
  • 回帰テスト追加

    • Nullable<T>.GetType()の挙動テスト:null時は例外発生、非null時は基本型を返す
    • テストプロジェクト設定を更新

パフォーマンスへの影響

影響なし(安全性修正のため、パフォーマンス向上は記載なし)

関連Issue

#133207 #132732

その他

  • 互換性への影響:なし(バグ修正のため破壊的変更なし)
  • 留意点:Copilot レビューコメントにより、ループ/PHI シナリオで undefined VN ペアをガード無しで処理する可能性が指摘されています。広く使用されるJIT最適化コードパスの変更のため、最終的なメンテナーレビューが推奨されます

#133330 Remove createdump PID argument

概要

Linux/macOSのcreatedumpツールの動作をWindowsに合わせるため、ターゲットPID引数を削除し、常に親プロセスをダンプ対象とするように変更しました。セキュリティモデルの統一が目的です。

変更内容

  • src/coreclr/pal/src/thread/process.cpp: CoreCLR PALのcreatedumpコマンドライン構築からPID引数の構築・渡却を削除
  • src/coreclr/nativeaot/Runtime/unix/PalCreateDump.cpp: NativeAOT Unix ダンプ生成からアプリケーションPIDの渡却を削除(--nativeaotは最後の引数として残存)
  • src/coreclr/debug/createdump/createdumpmain.cpp: CLI解析/ヘルプテキスト更新。Unix系ではgetppid()をデフォルトとして親プロセスをターゲット化
  • docs/design/coreclr/botr/xplat-minidump-generation.md: ドキュメント更新。使用方法からPID引数を削除し、親プロセスのみをターゲット対象とする動作を記載

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Copilotレビュアーから、ユーザー向けヘルプ/ドキュメントおよびCLIエラーメッセージの改善提案あり。具体的には以下の軽微な修正が指摘されています:

  • ヘルプテキスト内の文法エラー:"Hostname return by gethostname()" → "Hostname returned by gethostname()"(複数箇所)
  • "親プロセスのみ"という動作をより明確に説明し、未知の引数に対する誤解を避けることを推奨

本変更は破壊的変更であり、createdumpに対してPID引数を渡すコードを使用している場合は動作を更新する必要があります。


#133281 [Wasm RyuJIT] Fix: Pass Call's struct type to Wasm ABI Classifier Instead of Dest Store Type

概要

WebAssembly RyuJIT で、単一レジスタで返される構造体を返す関数呼び出しの戻り値をストアする際、ABI 分類を宛先のストア型ではなく関数呼び出しの戻り値型に基づいて判定するように修正しました。これにより、戻り値の型と宛先の型で ABI 分類が異なるケース(例:Vector64<int> を V2<int> にキャストしてストアする場合)でも正しく処理されます。

変更内容

  • src/coreclr/jit/lower.cpp: LowerStoreSingleRegCallStruct 関数で、Wasm ABI 分類の入力を宛先のレイアウト型から関数呼び出しの戻り値クラスハンドル(call->gtRetClsHnd)に変更。ストアのリタイプは宛先の分類ではなく、呼び出しの Wasm ABI 低下後のプリミティブ型に基づいて実行。

パフォーマンスへの影響

影響なし

関連Issue

#133224

その他

Copilot レビューにより、Wasm 低下パスでまだ CORINFO_WASM_TYPE_VOID が発生できないとアサートされているが、インターフェース契約では "by-ref" と定義されており、有効な構造体形状で crossgen2 を中止させる可能性があると指摘されています。


#133272 JIT: guard negative-offset bounds inference against underflow

  • 作成者: @EgorBo
  • 作成日時: 2026年09月04日 22:44:56(UTC)
  • マージ日時: 2026年09月08日 18:46:50(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT範囲チェック最適化における符号なし比較の推論バグを修正します。負の定数オフセットを含む式に対して、オーバーフロー/アンダーフロー検証なしに下限境界を推論していた問題を改善し、オフセット加算がアンダーフローしないことの証明を要求するようにしました。

変更内容

  • src/coreclr/jit/rangecheck.cpp: MergeEdgeAssertionsWorkerの負オフセット推論ロジックを強化。下限値を推論する前に、定数下限の存在を確認し、lower + addOpCnsがオーバー/アンダーフローしないことを証明する条件を追加
  • src/tests/JIT/Regression/JitBlue/Runtime_133271/Runtime_133271.cs: アンダーフロー/ラップシナリオの回帰テストを追加。修正前はIndexOutOfRangeExceptionが誤って削除されるケースをカバー
  • src/tests/JIT/Regression/Regression_ro_2.csproj: 新しい回帰テストをプロジェクトに登録

パフォーマンスへの影響

影響なし。本変更は最適化ロジックの安全性向上であり、パフォーマンスに直接的な影響はありません。

関連Issue

#133271

その他

  • JITコンパイラのランタイム最適化パス(RangeCheck)における内部実装修正
  • 破壊的変更なし、公開APIへの影響なし
  • 範囲チェックが不正に削除される誤検出を防ぐ正確性向上

#133256 [release/11.0] Fix SIMD MinMax constant special cases

概要

xarch上のSIMD Min、Max、MinNumber、MaxNumberが定数ベクトルに通常の値とNaN/符号付きゼロが混在する場合に不正な結果を返す回帰バグを修正します。AVX-512パスではオペランド全体が誤って返される場合があります。JIT import時の定数分類とfixupテーブル構築をレーン単位で評価するよう変更し、混在するNaN/符号付きゼロケースを正しく処理します。

変更内容

  • src/coreclr/jit/simd.h: SIMD サイズ対応の評価ヘルパーと述語を追加し、レーン単位の特殊ケース検出に対応
  • src/coreclr/jit/gentree.h: GenTreeVecConにNaN/±0検出用ヘルパーを追加
  • src/coreclr/jit/gentree.cpp: レーン単位述語を使用してSIMD min/max のオペランド順序とfixupテーブル生成を改善(114行追加/53行削除)
  • src/libraries/Common/tests/System/GenericMathTestMemberData.cs: NaNペイロード/符号付きゼロを含むテストケース追加
  • src/tests/JIT/Regression/JitBlue/Runtime_133022/Runtime_133022.cs: 複数ベクトル幅とバリアント間での混在レーンNaN/符号付きゼロの回帰テスト追加
  • src/tests/JIT/Regression/Regression_ro_2.csproj: 新規回帰テストをプロジェクトに統合

パフォーマンスへの影響

影響なし。修正は JIT import時の定数分類とfixup生成に限定される内部実装変更です。

関連Issue

#133173(原PR)、#116804(回帰導入)

その他

  • リスク: 中程度。変更は JIT import時のSIMD定数分類に限定されますが、Min/Max コード生成全体に影響。float/double、Vector128/Vector256、オペランド順序、AVX-512有効/無効の設定で混在NaNと符号付きゼロケースをカバーしています。
  • テスト: 修正前JITでは回帰テスト失敗、修正後は成功。AVX-512有効/無効両方で検証済み。全13,082個のSystem.Runtime.Intrinsicsテストも両方の設定で合格。
  • 回帰: .NET 10開発時に#116804で導入。本backportは release/11.0向け。

#133218 Generate ReadyToRun unboxing stubs for browser Wasm

  • 作成者: @davidwrighton
  • 作成日時: 2026年09月04日 02:12:03(UTC)
  • マージ日時: 2026年09月08日 23:36:12(UTC)
  • ラベル: area-ReadyToRun

概要

WebAssembly向けReadyToRun(R2R)実行時において、メソッドごとのJIT生成アンボックス処理スタブを共有構造化Wasmスタブに置き換えます。これにより、アンボックス処理の実装が構造的署名キー(U、UG、UM)によって検出可能な共有スタブになり、コードサイズとメタデータサイズが大幅に削減されます。

変更内容

  • ランタイム(内部実装): Wasm向けアンボックス処理スタブの構造的署名キー生成と解決を実装(helpers.cpp/helpers.hpp)
  • ランタイム(ABI): Portable entrypoint直前にWasm固有メタデータ(ターゲットMethodDescとターゲット portable entrypoint)を保存するレイアウト追加(precode_portable.hpp)
  • Prestub処理: Wasmプラットフォームで共有スタブ+メタデータの公開をフック(prestub.cpp)
  • メモリ初期化: Portable entrypoint ラッパーの割り当て・初期化(method.cpp)
  • Crossgen2コンパイラ(内部実装): 共有Wasmアンボックス処理スタブノード生成(新規WasmUnboxingStubNode.cs)
  • テスト: R2R画像内での文字列検出可能なスタブキーの検証追加

パフォーマンスへの影響

メモリ削減(System.Private.CoreLib.dll Release版):

  • 総ファイルサイズ: -396,132 B (-1.45%)
  • コードセクション: -184,830 B (-1.36%)
  • データセクション: -67,131 B (-0.78%)
  • 名前テーブル: -138,660 B (-2.82%)
  • アンボックス処理スタブ: 1,195個のスタブから30個の共有スタブへ削減(-97.5%)

スタブ共有化により、実行時メモリフットプリント削減と可能性としてキャッシュ効率改善が期待されます。

関連Issue

なし

その他

破壊的変更の懸念事項(Copilotレビュー指摘):

  • WasmUnboxingStubNodeのCompareToImplが全順序付け(total ordering)を保証していない可能性がある
  • UnboxingStubPortableEntryPoint::SetStubTargetAndActualCodeでコントラクト不整合(LIMITED_METHOD_CONTRACTがSTANDARD_VM_CONTRACTを呼び出す)
  • GetUnboxingStubの失敗パスで出力パラメータが初期化されていない
  • Portable entrypointレイアウトが固定オフセットに依存しており、static_assert追加が必要

検証状況: build.cmd clr -c release -os browser および WasmVirtualMethodGenerics R2Rテスト実施済み


#133200 Stabilize ConnectAsync_Cancel_ThrowsCancellationException loopback test

  • 作成者: @steveisok
  • 作成日時: 2026年09月03日 19:59:49(UTC)
  • マージ日時: 2026年09月08日 18:56:24(UTC)
  • ラベル: area-System.Net.Http

概要

System.Net.WebSockets.Client.TestsのConnectAsync_Cancel_ThrowsCancellationExceptionテストの不安定性(#130439)を修正します。JIT-stressによるスケジューリング遅延により、キャンセルトークンがTCP接続確立前に発火し、サーバーがAcceptで無限ブロックされる問題を、クライアント/サーバー間の明示的な調整により解決します。

変更内容

  • CancelTest.Loopback.cs: ConnectAsync_Cancel_ThrowsCancellationExceptionを書き換え
    • 従来:壁時間ベースの競争条件(固定100msキャンセルトークン + 10秒遅延サーバー)
    • 新方式:TaskCompletionSourceによるハンドシェイク受信シグナルを導入し、サーバーが接続受け入れ・オープニングハンドシェイク要求を完全読み込み後にTCSを設定。クライアントはそのシグナルを待ってからキャンセルトークンを発火させる(決定的な調整)
    • SkipServerHandshakeResponse = trueでエコーサーバーをバイパスし、専用のLoopbackWebSocketServer.RunAsyncフロー構築

パフォーマンスへの影響

影響なし。テスト信頼性向上が目的で、ランタイム性能変更なし。

関連Issue

#130439(元の不安定性トラッキング)
#132031(関連するSendAsync_Cancel_Success修正)

その他

  • 検証実績:全10バリアント(SharedHandler/Invoker/HttpClient × HTTP/1.1、Invoker/HttpClient × HTTP/2、SSL有無)で一貫合格、System.Net.WebSockets.Client.Tests全685件中663件合格(22件は既存HTTP/2スキップ)
  • ストレステスト:JIT-stress有効下で100回の連続実行、失敗ゼロ
  • Copilot指摘事項:
    • サーバーシグナル待機時にタイムアウト/キャンセル保護不足(無限ハング可能性)
    • タイムアウトパスでConnectAsyncタスクが未観察状態で実行継続する可能性
    • 文法修正指摘("does the client cancels"→"does the client cancel")
  • 制限事項:DEBUG-only JIT-stressインストルメンテーションは-rc releaseビルドでは未実行だが、タイミング依存を構造的に除去(シグナル明示化)しているため信頼性は損なわれない

#133176 [release/11.0] Check for SIG_IGN and SIG_DFL before calling previous signal handler

概要

macOSにおいて、execve呼び出し時にシグナルハンドラのポインタがクリアされないままsa_flagsが残存する問題を修正します。ランタイムがシグナルを受信した際に、前のシグナルハンドラポインタがSIG_IGNまたはSIG_DFLを指している場合、それらの特殊値を呼び出す前にチェックして、セグメンテーションフォルトによるクラッシュを防ぎます。

変更内容

  • src/coreclr/pal/src/exception/signal.cpp: シグナルハンドラ呼び出し前にSIG_IGN/SIG_DFLの値をチェックするロジックを追加(7行追加、8行削除)
  • src/coreclr/nativeaot/Runtime/unix/PalUnix.cpp: 同様のチェックロジックをNativeAOTランタイムに追加(27行追加、8行削除)
  • ReadyToRun関連ファイル: ReadyToRunプロキシ型マップとタイプマップマネージャーの関連修正
  • crossgen2/Program.cs: クロスジェネレーター2の改善
  • 回帰テスト: GitHub_132581フォルダに新規追加(C++ネイティブテストとC#テストコード)

パフォーマンスへの影響

影響なし

関連Issue

#132900(元のPR) GitHub_132581(回帰テスト対象)

その他

  • 本PRはrelease/11.0-rc1へのバックポート
  • 顧客報告済みの問題(Customer Impactチェック済み)
  • リスク評価:低(変更内容が小規模で対象を絞ったもの)
  • 回帰テストにより、修正前は失敗、修正後は成功することを確認済み

#133144 [release/11.0] Fix NativeAOT thread-static debug info

概要

NativeAOT環境におけるthread-static変数のデバッグ情報生成に関する問題を修正するバックポートです。この修正により、thread-staticメンバーのデバッグ情報が正しく生成されるようになります。

変更内容

  • src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/UserDefinedTypeDescriptor.cs: thread-staticデバッグ情報の処理に関する変更(+6行/-3行)

パフォーマンスへの影響

影響なし

関連Issue

#133109(本修正のバックポート元)

その他

  • 本PRはrelease/11.0ブランチへのバックポート版です
  • 元のPR(#133109)の修正内容をrelease/11.0に適用したものです

#132908 [release/11.0] Increase spinning/polling aggressiveness in the thread pool in low-saturation scenarios

概要

低飽和度シナリオでのスレッドプール性能回帰を改善するため、ワーカースレッドの駐車/スピン機構を調整するバックポート (#132765 → release/11.0)。#128606で導入された高飽和度向けの最適化が、低飽和度の低遅延シナリオ(WebSocketsなど)で最大4倍のスループット低下を引き起こしていたため、不必要な駐車を抑制する戦略に変更。

変更内容

  • PortableThreadPool.WorkerThread.cs: スプリアスウェイク後の駐車判定に閾値ロジックを追加。アクティブワーカー数が十分にある場合のみ駐車を実行し、バースト処理に対応。
  • LowLevelLifoSemaphore.cs: デフォルトスピン数を増加し、複数シグナルが追加ウェイターの起動をトリガーできるよう改善。
  • Backoff.cs: 指数バックオフの最大スピン期間上限を削減。

パフォーマンスへの影響

改善が確認されている(低飽和度シナリオで重要):

  • WebSocket: ほぼ4倍のRPS改善(regression解消)
  • JSON(高・低・中接続数シナリオ): 各種条件で検証済み
  • Orchard、NuGet復元RPS: 改善確認

高飽和度シナリオへの悪影響は報告されていない。改善ポイントは、十分なワーカーが存在する場合のみ新しい駐車ポリシー(プロセッサ数の2/3以上のワーカーがいる場合)を適用することで、低遅延性と高スループットのバランスを取ること。

関連Issue

#132765(オリジナルPR)、#128606(回帰原因のPR)

その他

留意点: Copilot reviewが、大規模コア数マシン上でのintからshortへの暗黙的キャスト時のオーバーフロー可能性を指摘。閾値計算時のクランピングが必要な可能性あり。リスク評価は低いとされているが、この指摘への対応を確認推奨。


#132819 [CI Test] CoreCLR interpreter without dynamic code compilation

概要

macOS arm64 CoreCLR インタープリターの CI テスト カバレッジを拡張し、動的コード コンパイルが無効な環境での挙動を検証するための変更です。iOS/WebAssembly などの動的コンパイルが許可されない環境への対応をより正確に代理できるようにするため、-dynamiccodecompiled false フラグで実行するテスト構成を追加します。

変更内容

  • eng/pipelines/coreclr/libraries-interpreter.yml: macOS arm64 インタープリター用の新しい Helix ジョブを追加。動的コード コンパイルを無効化(-dynamiccodecompiled false)して実行
  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Runtime/CompilerServices/RuntimeFeatureTests.cs: RuntimeFeatureTests.DynamicCode_ContextSwitch テストを修正。実行時が動的コード コンパイルをサポートしているかどうかに基づいて、IsDynamicCodeCompiled の期待値を計算するよう改善(コンフィグ スイッチ値のみに依存しない)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

[!NOTE] Copilot レビュー時点で以下の懸念事項が指摘されています:

  1. パイプライン YAML でまだ元のインタープリター マトリックスが定義されており、新しいジョブと競合している可能性がある
  2. 新しい Helix ジョブが interpmode1 シナリオを省略しているため、実際にはインタープリター モードでの検証が行われない可能性がある

#132807 Enable Helix job monitor for runtime perf

  • 作成者: @mmitche
  • 作成日時: 2026年08月26日 23:25:04(UTC)
  • マージ日時: 2026年09月08日 16:00:26(UTC)
  • ラベル: area-Infrastructure

概要

dotnet-runtime-perf パイプラインで Helix Job Monitor を有効化し、Helix へのジョブ送信時にビルドエージェントを占有しないようにする変更です。モニタージョブが Helix の完了を追跡し、結果をレポートします。

変更内容

  • eng/pipelines/performance/perf.yml: enableHelixJobMonitor パイプライン変数を有効化し、/eng/common/core-templates/job/helix-job-monitor.yml ジョブを Build ステージに追加(540分のタイムアウト、allowNoHelixJobs: true を設定)
  • dotnet-runtime-perf-build パイプラインは変更なし(ビルドと成果物の公開のみで Helix に処理を送信しないため)

パフォーマンスへの影響

ビルドエージェントの効率向上。複数の Send job to Helix タスクが並行実行でき、エージェント占有時間を削減します。

関連Issue

なし

その他

  • 検証済み: パイプライン定義 702 と 1442 がそれぞれ perf.yml と perf-build.yml にマップされることを確認
  • dotnet-performance テンプレート内で send-to-helix-step.yml に到達するのは runtime-perf-jobs.yml のみであることを確認

#132489 [Apple mobile] Stage the Helix R2R app payload outside the crossgen2 input directory

概要

Apple mobile向けHelix R2Rコンパイルの再試行時における入力破損を修正するPRです。従来、publish/ディレクトリがcrossgen2の入出力として使われていたため、再試行時に前回の試行で生成された既コンパイルのILストリップアセンブリが再度crossgen2に入力され、「A method body required at runtime was stripped from the ReadyToRun image」というエラーで失敗していました。本修正により、publish/を常に安定したcrossgen2入力として維持し、R2R出力はobj/r2r-app-bundle-source/という中間ディレクトリに集約します。

変更内容

  • ProxyProjectForAOTOnHelix.proj: obj/R2R/をコンパイル前に再作成し、obj/r2r-app-bundle-source/をpublish/と現在のR2R出力から生成。AppleBuildDirとバンドルアイテムリストを新ディレクトリに指向。
  • Apple.Build.Tests: 新しいホストテスト。同一の一時ワーク項目ディレクトリ内でプロキシターゲットを2回実行し、publish/の不変性、バンドルパスの宣言順序、バンドルソースの内容、キルされた試行の出力削除などを検証。
  • パイプライン設定: apple_msbuildパスフィルタ変数を追加し、専用macOS x64ジョブでテストプロジェクトを実行。

パフォーマンスへの影響

影響なし(ビルドオーケストレーション層の修正であり、コンパイルパフォーマンスへの直接的な影響はなし)

関連Issue

#131922

その他

  • テスト検証: Apple.Build.Testsが1 passed, 0 failedで合格。
  • 実地検証: System.Net.Security.Unit.TestsをtvOS Helix環境で3回連続実行。全試行がR2Rリビルド、アプリ起動、テスト128到達でILストリップ/APP_CRASH失敗なし。
  • Copilot指摘による懸念: Directory.Build.propsの不完全なインポートチェーンにより、xUnit参照がクリーンビルド環境で未解決の可能性あり。src/libraries/Directory.Build.propsのインポートで対応推奨(Wasm.Build.Tests同様)。

#131675 Deduplicate Tar writer/entry helpers

概要

System.Formats.Tar ライブラリ内の重複したヘルパーメソッドをリファクタリングし、コード重複を削減します。プラットフォーム固有のファイル(Unix/Windows)に分散していた同一の実装をクロスプラットフォーム共有ファイルに統合し、保守性と可読性を向上させます。

変更内容

  • TarWriter.cs: プラットフォーム固有のTarWriter.Unix.csとTarWriter.Windows.csの重複した Format switch 式を、新しい CreateEntryForFormat ヘルパーメソッドに統合
  • TarEntry.cs: TarEntry.Unix.csとTarEntry.Windows.csの同一の ExtractAsHardLink 実装(両者とも File.CreateHardLink を呼び出すだけ)を共有ファイルに移動
  • TarHelpers.cs: GetCorrectTypeFlagForFormat メソッドをネストされた if/else から tuple パターンマッチング switch 式に簡潔化(動作は同等)
  • 削除: Unix/Windows 固有ファイルから不要なメソッド実装を削除(計18行削除)

パフォーマンスへの影響

影響なし。リファクタリングのみで、実行時の動作および実装ロジックは変わりません。

関連Issue

なし

その他

  • 内部実装(internalクラス)のリファクタリングであり、公開API への影響なし
  • コード行数削減により、メンテナンスの負担が軽減
  • Copilot レビューで承認推奨(コメント 0 件、Lite レベル)

#130556 Set minimum ISAs when compiling native code

概要

.NET 11のハードウェア最小要件に合わせて、ネイティブコード(C++)のコンパイル時にISA(Instruction Set Architecture)の最小要件を設定します。MSVCでは/archフラグ、Unix系ではGCCの-marchフラグを使用して、x64およびARM64アーキテクチャ向けのコンパイラ設定を統一します。

変更内容

  • eng/native/configurecompiler.cmake: ネイティブコンパイラの設定ファイルを修正(+32行/-24行)
    • MSVCのx64・ARM64ビルド向けのISA最小要件フラグ設定を追加
    • Unix系(GCC)のアーキテクチャフラグ設定を追加
    • 既存の不要な設定を削除・整理

パフォーマンスへの影響

ネイティブコンパイル時にISA最小要件を明示的に設定することで、コンパイラが対応するより新しい命令セットの最適化を活用できる可能性があります。詳細なベンチマーク結果は提供されていません。

関連Issue

なし

その他

この変更はランタイムのネイティブコンポーネント(C++コード)のコンパイル設定に影響し、ビルドシステムの内部実装に該当します。公開APIへの直接的な影響はありません。


目次