Aracılığıyla paylaş


Filtre sürücüleri için BypassIO

BypassIO Hakkında

BypassIO özelliği, dosyalardan okumak için iyileştirilmiş bir G/Ç yolu sunar. Bu yol, Windows'ta yeni nesil oyunların yüklenmesi ve çalıştırılmasına yönelik G/Ç taleplerini karşılamaya yardımcı olan okuma işleminin CPU ek yükünü azaltır. BypassIO, Windows üzerinde DirectStorage'i destekleyen altyapının bir parçasıdır. Windows 11'den itibaren kullanılabilir.

Mini filtrelerin BypassIO için destek uygulaması ve BypassIO'yu mümkün olduğunca etkin tutmanız önemlidir. Filtre desteği olmadan, oyun performansı düşer ve son kullanıcılar için kötü bir oyun deneyimine neden olur.

Gelecekteki Windows sürümleri, oyun oynamanın ötesinde daha geniş uygulama kullanımları içerir.

BypassIO, tanıtıcı başına bir kavramdır. BypassIO isteğinde bulunurken, açık bir dosya tanıtıcısı için istekte bulunursunuz. BypassIO'nun bu dosya için diğer tanıtıcılar üzerinde hiçbir etkisi yoktur.

FSCTL_MANAGE_BYPASS_IO ve eşdeğer bir IOCTL_STORAGE_MANAGE_BYPASS_IO bu altyapının bir parçası olarak eklendi. Mini filtreler FSCTL_MANAGE_BYPASS_IO işlerken dosya sistemleri birim ve depolama yığınlarına IOCTL_STORAGE_MANAGE_BYPASS_IO gönderir. Bu denetim kodları tanınabilir olacak şekilde tasarlanmıştır: her ikisi de BypassIO isteğini başarısız olan sürücünün kimliğini ve veto etme nedenini döndürür.

Bu makalede, dosya sistemi filtresi ve depolama yığınları genelinde mimari ayrıntılar ve BypassIO'nun bir mini filtre sürücüsünde nasıl uygulanacaklarına ilişkin bilgiler sağlanmaktadır. Depolama sürücülerine özgü BypassIO bilgileri için bkz. Depolama sürücüleri için BypassIO.

BypassIO desteğinin kapsamı

Windows 11'den başlayarak BypassIO desteği aşağıdaki özellikleri içerir:

  • Yalnızca Windows istemci sistemlerinde destek. Sunucu sistemi desteği gelecek bir sürümde sunulacaktır.

  • Yalnızca NVMe depolama cihazlarında destek. Diğer depolama teknolojileri için destek gelecek bir sürümde sunulacaktır.

  • Yalnızca NTFS dosya sisteminde destek. Diğer dosya sistemleri için destek gelecek bir sürümde sunulacaktır.

  • Yalnızca önbelleğe alınmamış okuma desteği. Önbelleğe alınmamış yazma desteği gelecekteki bir sürümde sunulacaktır.

  • Yalnızca dosyalarda destek (dizin veya birim tanıtıcılarında desteklenmez).

BypassIO nasıl çalışır?

BypassIO özellikli bir FileHandle üzerinde NtReadFile'ı çağırdığınızda, işlem genellikle dosya sistemi yığınının, birim yığınının ve depolama yığınının tamamında geçiş yapan geleneksel G/Ç yığınından geçmez. Bunun yerine, işlem doğrudan G/Ç yöneticisinden (NTFS) dosya sistemine, ardından disk (classpnp) sürücüsüne ve ardından StorNVMe sürücüsüne akar. Tamamen BypassIO özellikli bir FileHandle ile:

  • İşlem tüm dosya sistemi filtrelerini atlar.
  • İşlem tüm birim yığını filtrelerini atlar.
  • İşlem, disk sürücüsünün üzerinde ve disk ile StorNVMe sürücüleri arasında bulunan tüm depolama yığını filtrelerini ve sürücülerini atlar.

Dosya sistemi filtre yığınının BypassIO'yu desteklediği ancak birim ve depolama yığınının desteklemediği senaryolarda:

  • IOS'lar filtre yığınını atlar.
  • Okuma G/Ç işlemleri hâlâ birim ve depolama yığınından geçiyor.

Bu destek düzeyi kısmi BypassIO olarak bilinir.

Okuma isteği için geleneksel I O yolunu gösteren görüntü.

Okuma isteği için I O'ya Atla yolunu gösteren resim.

BypassIO için DDI değişiklikleri ve eklemeleri

BypassIO desteği sağlamak için filtre sürücüleriyle ilgili aşağıdaki DDI'ler eklendi:

Ayrıca, aşağıdaki DDI'ler BypassIO'yu destekleyecek şekilde değiştirildi:

  • FSRTL_ADVANCED_FCB_HEADER yapısına bir BypassIoOpenCount alanı eklendi. Dosya sistemi, şu anda BypassIO'nun etkin olduğu bir akışta benzersiz FileObjects sayısını korumak için bu alanı kullanır. Bu alanın eklenmesi, yapı boyutunu artırır. Windows 11'den başlayarak kullanılacak yapı sürümü FSRTL_FCB_HEADER_V4.

Diğer işlemlerin BypassIO özellikli tanıtıcılar üzerindeki etkisi

Bir tanıtıcıda BypassIO'nun etkinleştirilmesi diğer tanıtıcıları etkilemez. Ancak, BypassIO özellikli tanıtıcı üzerindeki diğer işlemler, aşağıdaki senaryolarda olduğu gibi BypassIO kullanımını etkiler:

  • BypassIO'nun etkin ve çalışır durumda olduğu bir dosyada Tutamacı A açıksa ve birisi (örneğin, başka bir iş parçacığı veya işlem) önbellekli veya belleğe eşlenmiş GÇ gerçekleştirmek için Tutamacı B'yi açarsa, Tutamacı B kapatılana kadar BypassIO A tutamacı üzerinde geçici olarak askıya alınır. Sistem bunun yerine eski verilerin oluşmaması için geleneksel G/Ç yolunu kullanır. Sistem, tüm veri bölümleri ve önbellek eşlemeleri kaldırılana kadar bu tanıtıcıda geleneksel G/Ç yolunu kullanmaya devam eder. Sonuç olarak, BypassIO'nun sürdürülebilmesi için filtrelerin tanıtıcı dosyayı kapatması gerekir.

  • BypassIO özellikli bir dosya seyrek olarak işaretlenirse, tüm BypassIO işlemleri geleneksel G/Ç yolunu kullanmaya başlar.

  • BypassIO özellikli bir dosyayı dolandırmak, tüm BypassIO işlemlerinin geleneksel G/Ç yolunu kullanmasına neden olur. Dolandırma tamamlandıktan sonra sistem bu tutamaçta BypassIO yoluna geri döner.

Mini filtrelerde BypassIO desteği uygulama

INF veya MANIFEST dosyalarınızı güncelleştirme

Windows 11'den başlayarak, filtre geliştiricileri sürücünüzün INF veya MANIFEST dosyalarındaki SupportedFeatures'aSUPPORTED_FS_FEATURES_BYPASS_IO eklemelidir. (Tüm etkin filtreler için "SprtFtrs" değerlerini görmek için yükseltilmiş bir komut istemi yazabilirsiniz fltmc instances .)

Uyarı

BypassIO'yu hiçbir zaman desteklememiş bir filtre hala SupportedFeatures durumuna SUPPORTED_FS_FEATURES_BYPASS_IO eklemeli ve ardından nedenini belirterek filtrenin içine uygun şekilde veto etmelidir.

Mini filtrelerin BypassIO'yu vetolamayı mümkün olduğunca en aza indirmesi önerilir.

Mini filtre, BypassIO'nun etkinleştirildiği bir birime ekleniyorsa ancak bu mini filtre SupportedFeatures ayarını SUPPORTED_FS_FEATURES_BYPASS_IO içerecek şekilde güncelleştirmediyse, bu birimde gerçekleştirilen tüm BypassIO işlemleri hemen engellenir ve geleneksel G/Ç yoluna geri döner ve bu da oyun performansının düşmesine neden olur.

IRP_MJ_READ veya IRP_MJ_WRITE işlemlerini filtrelemeyen minifiltreler, SupportedFeatures içinde SUPPORTED_FS_FEATURES_BYPASS_IO eklemiş gibi, otomatik olarak BypassIO desteğini kabul eder.

FS_BPIO_OP_ENABLE ve FS_BPIO_OP_QUERY işlemleri, katılmayan bağlı bir mini filtre varsa yığında başarısız olur.

BypassIO istekleri için desteği uygulayın

Mini filtreler, FSCTL_MANAGE_BYPASS_IO denetim kodu aracılığıyla gönderilen BypassIO istekleri için destek eklemelidir. Ayrıntılar için bkz . BypassIO işlemlerini destekleme .

BypassIO'nın çalışıp çalışmadığını belirleme

Eklenen bir fsutil komutu, FSCTL_MANAGE_BYPASS_IO içeren ve FS_BPIO_OP_QUERY işlemini belirten bir komutu sunar. Görüntülenen sonuçlar BypassIO'yu engelleyen ilk sürücüyü ve nedenini belirler.

> fsutil bypassIo state /v <path>

Burada< yol> bir birim, dizin veya belirli bir dosya adı olabilir ve /v isteğe bağlı bir ayrıntılı bayraktır.

Bu ilk örnekte, WOF mini filtresi BypassIO'yu kabul etmez. Komut fsutil bypassIo state c:\ yürütülürken aşağıdaki çıkış elde edilir:

BypassIo on "c:\" is not currently supported.
Status: 506 (At least one minifilter does not support bypass IO)
Driver: wof.sys
Reason: The specified minifilter does not support bypass IO.

Bu ikinci örnekte BitLocker'ın etkinleştirildiği bir sistemde yürütülürken fsutil bypassIO state /v c:\ aşağıdaki çıkış elde edilir:

BypassIo on "c:\" is partially supported
    Volume stack bypass is disabled (fvevol.sys)
      Status:  495 (The specified operation is not supported while encryption is enabled on the target object)
      Reason:  BitLocker Drive Encryption is enabled.
    Storage Type:   NVMe
    Storage Driver: BypassIo compatible
    Driver Name:    stornvme.sys

NTFS'ye özgü davranış

Ntfs yerleşik dosyasında BypassIO'yu etkinleştirebilirsiniz; ancak dosya, yerleşik olduğu sürece geleneksel G/Ç yolunu alır. Dosyaya yapılan bir yazma işlemi dosyayı bellekte saklanamaz hale getirirse, sistem BypassIO yoluna geçer.

BypassIO etkin dosyasında NTFS sıkıştırmasını etkinleştiremezsiniz.

BypassIO etkin dosyasında NTFS şifrelemesini etkinleştirebilirsiniz. BypassIO duraklatıldı.

BypassIO yük boşaltma okuma/yazma işlemlerini etkilemez.