Windows Debugging 210

Hep cachelemekten bahsederiz. Dördüncü bölüm, Management Mechanisms da Registry den söz ederken: ‘’ Bellek verimligi ile beraber elbette disk erisimi de önemli. Her hive erisimini bir disk erisimine çevirmemek için, configuration manager, cache manager üzerinden 256 yi geçmemek sartiyla hive larin 16KB lik view larini ihtiyaca göre fiziki bellege mapler. 256 dolunca yeni view yükleyebilmek için, en az kullanilan view u unload ederiz. Bunu limitlemek zorundayiz, çünkü bu view lar paged pool belleginden kullanirlar’’ der.

Ya da yedinci bölüm, I/O sisteminden bahsederken: ‘’ Örnegin isletim sistemi mapped file I/O özelligini sunar. Bu IRP yapisini kullanmaz. Burada disk de duran bir dosya bir processin sanal adres bölgesine maplenir. Diskde duran dosya RAM de durabildigi için, bunun avantaji elbet hizdir ve bu sekilde isletim sistemi cacheleme özelligini de kazanmis olur. Bunu I/O systemi memory manager in yardimi ile gerçeklestirir’’ seklinde geçer.

Ayrica s.50 de Cache manager in Executive de oldugunu da görebilmistik. Peki cache ne? Kitabin Glossary sinde s.1155 de güzel bir özet bulabiliriz: executive deki cache manager in bütün file sistemlerin kullanimina sundugu cache hizmetidir.
Cacheleme basitçe verilerin daha hizli erisimi için daha hizli medyumda tutulmasidir. Windows da bu örnegin diskteki verinin RAM de tutulmasidir.

En temel problem Cache Coherency dir. Örnegin RAM de cachelenmis bilgiyi, iki farkli process kendi sanal adres bölgelerine maplediklerinde, verinin farkli yerlerde tutulan kopyalarindaki degisiklikler kopyalar arasinda eslenmelidir. Mapped file özelligi sayesinde burada Windows bu kopyalari esit tutabilmektedir. Kisaca veri aslinda zaten RAM de bir yerde tutulur ve degisiklikler, her ne kadar processler kendi sanal adreslerinde degisiklik yaptiklarini düsünselerde, sadece RAM de yapilir.

Ayrica burada da bir optimizasyon yapilmaktadir. 256KB lik view lar maplenmektedir. Bunlar aslinda sistem alaninin sanal adres bölgesinde virtual address control block yapilarinda yer alirlar. Böylece bütün dosyayi RAM e almaya gerek kalmaz, sadece dosya içinde isimiz olan bölümleri alabilme sansimiz olur. Bu da daha efektif optimizasyonlari mümkün kilar. Örnegin daha akilli read ahead yapilabilir. Yani bir dosyanin cachelenmis bölümlerini bildigimiz için gelecek IO larinda bunlara yapilacagini örnegin varsayabilecegimiz durumlar olusabilir. Fizikten taniyabildiginiz principle of locality uygulanir.

Bunun tersi, IO sonrasi da write back cache, yani lazy write dir. Çok sayida küçük IO lar yapacagimiza, bütün IO yu cache de yapariz ve bitmis gösteririz ve sonra bunlari bir sefer de örnegin diske flush ederiz.
Ayrica NTFS stream leri de cachelenebilir.

Cachelenemin en ünlü avantaji veri korumasidir. Veri aktarimi arti loglamalar ile güvenli yapilabilir. Yani örnegin güç kaybinda cache logundan son diske yazamadigimiz veri degisikligini bulabiliriz ve yeniden diske aktarabiliriz.

Yedinci bölümden DMA yi hatirliyor musunuz? ‘’ IO verisinin IRP olustururken isletim sistemi nasil buffer layacagini bilmeli. Buffered I/O da, çagiranin bufferindan veri kernelin non paged pool da bu IO için olusturulan esit boyutlu bir buffer a kopyalanir. Okumada da veri (aygittan) non paged pool daki buffer üzerinden çagiranin bufferina kopyalanir. IRP sonlandiginda non paged pool daki buffer alani da serbest birakilir. Direct I/O da callerin bufferini kilitleyip bunu RAM e mapleriz. Örnegin DMA, direct memory Access yapabilen sürücüler ile bu sekilde çalisilir: RAMe yüklenmis buffer alani MDL, memory desriptor list ile tarif edilir ve sürücü bu bilgileri aygita yönlendirir. Böylece donanimsal altyapinin sundugu imkân ile DMA in en büyük özelligi mümkün olur: CPU devreye alinmadan, aygit direk bellek ile çalisabilir. Isletim sistemi iki buffer türünü de yapmamaya karar verebilir. Örnegin aygit sürücüsü buffer lamayi kendisi yönetiyor olabilir.’’
Network kopyalamalarinda ayni mantigi kullanabiliriz. Yani RAM deki cache sayfalarina direk fiziki adresten erisim verebiliriz.

Yine kitabin yedinci bölümünden belki fast I/O yu hatirliyorsunuz. IRP süz IO. IO manager, file sistem sürücüsünün fast IO routinindeki kod u çalistirip, bu cache manager ile nelerin cachelenmis oldugunu indirek olsada sorulatabiliyor. Cachelenmis bilgiler arasinda fast IO yapabiliyoruz ve bu sadece bellek islemi oldugundan IRP e ihtiyacimiz olmuyor.

Bütün bu islemlerde bir temel sorun geriye kalir. Cache in boyutundan vs. kitap söz ediyor, ama bence en ilginci cache in hizidir. Burada Write throttling den bahsederiz. Her türlü sorunlari engellemek için cachelenmis ama sadece cache de kopyasi degismis, yani dirty olan sayfalara ve bos ram e bakariz. Ram az oldugu durumlarda dirty cache sayfalarini diske flush ederiz.

Cache mekanizmalarini detaylari ile kitabin onuncu bölümünden okuyabilirsiniz.

Windows Internals 5th ed. chapter 10 ‘Cache Manager’ dan söz ettik:
https://technet.microsoft.com/en-us/sysinternals/bb963901
Windows Internals 6th Edition’in ilk bölümü yayinlandi:
https://technet.microsoft.com/en-us/sysinternals/bb963901
Yazarlardan Mark Russinovich hakkinda bilgi:
https://en.wikipedia.org/wiki/Mark_Russinovich

Basar Güner
Sr. Support Engineer, Microsoft

https://www.microsoft.com/surface/en/us/default.aspx
https://cdn-smooth.ms-studiosmedia.com/news/mp4_mq/06182012_Surface_750k.mp4