deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

.NET 11, x86-64-v2 ve Arm64 LSE işlemciler gerektiriyor; runtime'ın yerel async'si önizlemede

Microsoft'un RC 2 için güncellenen .NET 11 runtime dokümantasyonu, framework'ün x86-64-v2 öncesi donanımda çalışmayı reddedeceğini doğruluyor ve runtime tarafından yönetilen bir async önizlemesini ayrıntılarıyla anlatıyor.

.NET 11, x86-64-v2 ve Arm64 LSE işlemciler gerektiriyor; runtime'ın yerel async'si önizlemede

Microsoft, .NET 11 runtime'ında nelerin yer aldığını ayrıntılarıyla açıkladı ve en önemli değişiklik donanım tabanının yükseltilmesi oldu: runtime, on yılı aşkın süredir standart olan komut setlerinden yoksun CPU'larda artık çalışmayacak. Microsoft Learn dokümantasyonuna göre — release candidate 2 için son kez güncellendi ve şu anda Hacker News ana sayfasında görünür durumda — hem x86/x64 hem de Arm64 taban çizgileri yükseldi ve ReadyToRun (R2R) derleme hedefleri de bunlarla birlikte hareket etti.

x86/x64'de yükselen CPU taban çizgileri

Apple, Linux ve Windows platformlarında JIT ve AOT alt sınırı x86-64-v1'den x86-64-v2'ye taşınıyor. v1 yalnızca CMOV, CX8, SSE ve SSE2 garanti ederken, v2 buna ek olarak CX16, POPCNT, SSE3, SSSE3, SSE4.1 ve SSE4.2 garanti ediyor. Microsoft, Windows 11'in bu seviyeyi zaten gerektirdiğini, Windows 10'da resmi olarak desteklenen her x86/x64 CPU'nun da gerektirdiğini ve dışarıda kalan son çiplerin 2013 civarında üretici desteğinden çıktığını belirtiyor.

ReadyToRun hedefi ise Windows ve Linux'ta daha da ileri giderek x86-64-v2'den x86-64-v3'e taşınıyor ve AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT ve MOVBE'yi katıyor. Apple'ın R2R hedefi olduğu yerde kalıyor.

Arm64 işletim sistemine göre ayrışıyor

Arm64'deki değişiklikler platforma göre farklılaşıyor. Apple tarafında hiçbir değişiklik yok; M1 taban çizgisi korunuyor. Linux, armv8.0-a alt sınırını koruyor ve yalnızca AdvSimd komut setini uygulayan Raspberry Pi kartları gibi cihazlara verilen desteği sürdürüyor, ancak R2R hedefi artık LSE içeriyor; Microsoft, bunun bir uygulama başlatıldığında ek JIT işi gerektirebileceği konusunda uyarıyor. Windows ise taban çizgisini armv8.0-a artı LSE seviyesine yükseltiyor; bunu Windows 11 ve Windows 10'da resmi olarak desteklenen tüm Arm64 CPU'lar gerektiriyor ve Arm'ın SBSA sunucu mimarisi gereksinimleriyle tutarlı. Windows R2R hedefi armv8.2-a artı RCPC olarak belirlendi.

Eski makinelerde ne olur

Sonuç nettir. .NET 11 ile başlayarak runtime, yeni taban çizgilerinin altındaki donanımda başlamayı başarısız olur ve CPU'nun bir veya daha fazla taban komut setinden yoksun olduğunu kullanıcıya bildiren bir mesaj yazdırır. Desteklenen donanımda bile, ReadyToRun assembly'leri kullanan uygulamalarda, işlemci R2R hedefinin altında kaldığında ve daha fazla kodun jit'lenmesi gerektiğinde ek başlangıç yükü görülebilir.

Microsoft, motivasyonu bakım yükü olarak çerçeveliyor: çok eski silikonu desteklemek, artık kullanımda olması düşünülmeyen donanım için kod tabanına karmaşıklık katıyor ve AOT derlemesinin, modern cihazlarda performansı sınırlayabilecek daha eski bir ortak taban çizgisini hedeflemesini zorunlu kılıyor.

Runtime Async runtime'a taşınıyor

Diğer baş özelliği, async metotların sorumluluğunu derleyiciden runtime'ın kendisine devreden bir önizleme olan Runtime Async V2. Derleyici state machine sınıfları üretmek yerine, runtime askıya almayı ve sürdürmeyi doğrudan izliyor.

En görünür kazanç canlı stack trace'lerde. Microsoft'un örneğinde, derleyici üretimi state machine'lerle bir async çağrı zinciri altyapı girdileriyle dolu 13 kare üretirken, Runtime Async altında yalnızca gerçek metotları gösteren 5 kare ortaya çıkıyor.

Geliştiriciler proje dosyasında bir runtime-async feature flag ayarlayarak katılır ve net11.0 projelerinin bunu kullanmak için artık preview feature'ları etkinleştirmesi gerekmiyor. Özellikle .NET runtime kütüphaneleri de bu özellik açıkken derlenmiş durumda; geriye hiçbir derleyici üretimi state machine kalmamış ve Microsoft bunu modelin geniş kapsamlı işlevsel ve performans doğrulaması olarak nitelendiriyor. Ekip, verim ve kütüphane boyutu değişiklikleriyle ilgili olumlu ya da olumsuz geri bildirimleri davet ediyor.

Yanında iki destekleyici değişiklik daha geliyor. Türetilmiş bir metodun temel sınıftaki jenerik olmayan metodun yerine jenerik bir Task döndürdüğü kovaryant override'lar artık çağırma kuralını köprüleyen runtime tarafından üretilen bir thunk üzerinden çalışıyor; aynı düzeltme NativeAOT için de geçerli. Ayrıca, runtime-async metotlarının crossgen2 derlemesi sırasında inline edilmesini engelleyen kısıtlamalar kaldırıldı. Davranışı daha önce kontrol eden ortam değişkenleri yok oldu; proje bazında çıkmak artık UseRuntimeAsync değerini false yaparak yapılıyor.

Neden önemli

Donanım taban çizgisi, çoğu ekibin hissedeceği değişiklik. .NET iş yüklerini yeniden değerlendirilmiş eski sunucularda, uzun ömürlü gömülü x86 kutularda ya da yaşlanan ince istemcilerde çalıştıranlar, .NET 11'e yerinde yükseltmenin düpedüz başlamayı başaramadığını görebilir. Etkilenen silikon, Microsoft'un da belirttiği gibi kabaca on yıldır üretici desteğinin dışında; ama laboratuvarlarda, fabrikalarda ve sunucu odalarında hâlâ bol miktarda çalışıyor. Madalyonun diğer yüzünde, JIT ve AOT hatlarını v1 taban çizgisinden kurtarmak, üretilen kodun varsayılan olarak daha geniş komut setleri varsınmasına izin veriyor ve R2R hedeflerinin v3'e taşınması, vektörize kod yollarını daha fazla önceden derlenmiş binary'ye itmelidir. Runtime Async ise platformun uzun vadeli yönüne işaret ediyor: deney tutarsa, C# async'yi on yıldır karakterize eden stack trace gürültüsü ve hata ayıklama sürtünmesi kaybolmaya başlıyor.

  • #dotnet
  • #microsoft
  • #runtime
  • #async
  • #hardware-requirements