Hep cachelemekten bahsederiz. Dördüncü bölüm, Management Mechanisms da Registry den söz ederken: ‘’ Bellek verimliği ile beraber elbette disk erişimi de önemli. Her hive erişimini bir disk erişimine çevirmemek için, configuration manager, cache manager üzerinden 256 yı geçmemek şartıyla hive ların 16KB lık view larını ihtiyaca göre fiziki belleğe mapler. 256 dolunca yeni view yükleyebilmek için, en az kullanılan view u unload ederiz. Bunu limitlemek zorundayız, çünkü bu view lar paged pool belleğinden kullanırlar’’ der.

Ya da yedinci bölüm, I/O sisteminden bahsederken: ‘’ Örneğin işletim sistemi mapped file I/O özelliğini sunar. Bu IRP yapısını kullanmaz. Burada disk de duran bir dosya bir processin sanal adres bölgesine maplenir. Diskde duran dosya RAM de durabildiği için, bunun avantajı elbet hızdır ve bu şekilde işletim sistemi cacheleme özelliğini de kazanmış olur. Bunu I/O systemi memory manager ın yardımı ile gerçekleştirir’’ şeklinde geçer.

Ayrıca s.50 de Cache manager ın Executive de olduğunu da görebilmiştik. Peki cache ne? Kitabın Glossary sinde s.1155 de güzel bir özet bulabiliriz: executive deki cache manager ın bütün file sistemlerin kullanımına sunduğu cache hizmetidir.
Cacheleme basitçe verilerin daha hızlı erişimi için daha hızlı medyumda tutulmasıdır. Windows da bu örneğin diskteki verinin RAM de tutulmasıdır.

En temel problem Cache Coherency dir. Örneğin RAM de cachelenmiş bilgiyi, iki farklı process kendi sanal adres bölgelerine maplediklerinde, verinin farklı yerlerde tutulan kopyalarındaki değişiklikler kopyalar arasında eşlenmelidir. Mapped file özelliği sayesinde burada Windows bu kopyaları eşit tutabilmektedir. Kısaca veri aslında zaten RAM de bir yerde tutulur ve değişiklikler, her ne kadar processler kendi sanal adreslerinde değişiklik yaptıklarını düşünselerde, sadece RAM de yapılır.

Ayrıca burada da bir optimizasyon yapılmaktadır. 256KB lik view lar maplenmektedir. Bunlar aslında sistem alanının sanal adres bölgesinde virtual address control block yapılarında yer alırlar. Böylece bütün dosyayı RAM e almaya gerek kalmaz, sadece dosya içinde işimiz olan bölümleri alabilme şansımız olur. Bu da daha efektif optimizasyonları mümkün kılar. Örneğin daha akıllı read ahead yapılabilir. Yani bir dosyanın cachelenmiş bölümlerini bildiğimiz için gelecek IO larında bunlara yapılacağını örneğin varsayabileceğimiz durumlar oluşabilir. Fizikten tanıyabildiğiniz principle of locality uygulanır.

Bunun tersi, IO sonrası da write back cache, yani lazy write dır. Çok sayıda küçük IO lar yapacağımıza, bütün IO yu cache de yaparız ve bitmiş gösteririz ve sonra bunları bir sefer de örneğin diske flush ederiz.
Ayrıca NTFS stream leri de cachelenebilir.

Cachelenemin en ünlü avantajı veri korumasıdır. Veri aktarımı artı loglamalar ile güvenli yapılabilir. Yani örneğin güç kaybında cache logundan son diske yazamadığımız veri değişikliğini bulabiliriz ve yeniden diske aktarabiliriz.

Yedinci bölümden DMA yı hatırlıyor musunuz? ‘’ IO verisinin IRP oluştururken işletim sistemi nasıl buffer layacağını bilmeli. Buffered I/O da, çağıranın bufferından veri kernelin non paged pool da bu IO için oluşturulan eşit boyutlu bir buffer a kopyalanır. Okumada da veri (aygıttan) non paged pool daki buffer üzerinden çağıranın bufferına kopyalanır. IRP sonlandığında non paged pool daki buffer alanı da serbest bırakılır. Direct I/O da callerın bufferını kilitleyip bunu RAM e mapleriz. Örneğin DMA, direct memory Access yapabilen sürücüler ile bu şekilde çalışılır: RAMe yüklenmiş buffer alanı MDL, memory desriptor list ile tarif edilir ve sürücü bu bilgileri aygıta yönlendirir. Böylece donanımsal altyapının sunduğu imkân ile DMA ın en büyük özelliği mümkün olur: CPU devreye alınmadan, aygıt direk bellek ile çalışabilir. İşletim sistemi iki buffer türünü de yapmamaya karar verebilir. Örneğin aygıt sürücüsü buffer lamayı kendisi yönetiyor olabilir.’’
Network kopyalamalarında aynı mantığı kullanabiliriz. Yani RAM deki cache sayfalarına direk fiziki adresten erişim verebiliriz.

Yine kitabın yedinci bölümünden belki fast I/O yu hatırlıyorsunuz. IRP süz IO. IO manager, file sistem sürücüsünün fast IO routinindeki kod u çalıştırıp, bu cache manager ile nelerin cachelenmiş olduğunu indirek olsada sorulatabiliyor. Cachelenmiş bilgiler arasında fast IO yapabiliyoruz ve bu sadece bellek işlemi olduğundan IRP e ihtiyacımız olmuyor.

Bütün bu işlemlerde bir temel sorun geriye kalır. Cache in boyutundan vs. kitap söz ediyor, ama bence en ilginci cache in hızıdır. Burada Write throttling den bahsederiz. Her türlü sorunları engellemek için cachelenmiş ama sadece cache de kopyası değişmiş, yani dirty olan sayfalara ve boş ram e bakarız. Ram az olduğu durumlarda dirty cache sayfalarını diske flush ederiz.

Cache mekanizmalarını detayları ile kitabın onuncu bölümünden okuyabilirsiniz.


Windows Internals 5th ed. chapter 10 ‘Cache Manager’ dan söz ettik:
http://technet.microsoft.com/en-us/sysinternals/bb963901
Windows Internals 6th Edition’ın ilk bölümü yayınlandı:
http://technet.microsoft.com/en-us/sysinternals/bb963901
Yazarlardan Mark Russinovich hakkında bilgi:
http://en.wikipedia.org/wiki/Mark_Russinovich

Başar Güner
Sr. Support Engineer, Microsoft

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