İşlemci önbelleği nedir, ne kadar önemli?
Önbellek, işlemcinin en önemli özelliklerinden biridir ve üreticilerin bize her zaman sağladığı bir bilgi parçasıdır. Elbette önbellek nedir ve ne işe yarar diye hiç düşünmemişsinizdir, bu şüpheleri gidermek için çok basit ve anlaşılır bir şekilde açıklamaya çalıştığımız bu makaleyi hazırladık.
Bu makalenin amacı, bu bellek sistemi ile ilgili kavramları araştırmak değil, onu açık ve anlaşılır bir şekilde açıklamaktır.
İşlemci önbelleği nedir?
Önbelleğin ne olduğunu görmeden önce bir işlemcinin bilgisayarlarımızda nasıl çalıştığını netleştirmemiz gerekiyor. Çok basit bir şekilde çalışması için ihtiyaç duyduğu veri ve talimatları RAM bellekten aldığını söyleyerek özetleyebiliriz.
İşlemcinin görevlerini yerine getirmek için bilgiye erişmesi gerektiğinde, bu bilgi RAM’den istenir ve bu bilgiyi işlemciye olabildiğince hızlı bir şekilde sağlar. Bu işlem anlık değildir, ancak zaman alır, gecikmeye bağlı olarak birkaç saat döngüsü, yalnızca birkaç nanosaniyedir, ancak bize hiçbir şey gibi görünse de, aslında bir dünyadır ve işlemci onu beklerken siz diğer hesaplamaları ve işlemleri yapma fırsatını kaybeder.
Bu sorunu çözmek için önbellek oluşturuldu, bu işlemcinin içindeki küçük bir bellek miktarından başka bir şey değil, önbelleğin amacı işlemci tarafından bilgiye olabildiğince hızlı erişim sağlamaktır. Önbellek işlemcinin içindedir, bu nedenle bilginin işlendiği yere ulaşmak için çok az seyahat etmesi gerekir, bu nedenle erişim süresi RAM durumunda olduğundan çok daha kısadır.
Bu belleğin miktarı RAM’e kıyasla çok azdır, mevcut bir üst düzey PC, GB veya daha fazla RAM düzeyinde kapasiteye sahip olabilir, ancak maksimum önbellek miktarı genellikle KB ve MB düzeyindedir. Bu, bellekteki verilere erişim süresi bellek miktarıyla orantılı olduğu için de önemlidir. Bu nedenle, önbelleğe erişim, RAM’e erişimden çok daha hızlıdır ve ayrıca daha yakındır ve verilerin daha az mesafe kat etmesi gerekir.
İşlemci önbellek düzeyleri
İşlemci önbelleği birkaç düzeyde düzenlenmiştir, çoğu mevcut işlemci bu belleğin üç düzeyine sahiptir, L1, L2 ve L3 önbellek olarak bilinir. Daha düşük seviyeler en hızlı olanlardır, ancak daha az kapasiteye sahiptirler, daha yüksek seviyeler ise kontrol ünitesinden biraz daha uzaktadır ve erişim için birkaç çevrim daha sürer, ancak daha büyük kapasiteye sahiptirler.
Ek olarak, L1 önbelleği genellikle yalnızca talimatların depolandığı L1 talimatına ve yalnızca veriler için veriler L1’e ayrılırken, L2 ve daha yüksek seviyeler birleştirilir, yani veriler ve talimatlar tarafından paylaşılır.
Çok çekirdekli işlemcilerdeki en yüksek seviyeler paylaşılabilir veya paylaşılamaz. Örneğin, 8 çekirdekli bir işlemci, her çekirdek için sekiz L1’e sahip olabilir, ancak yine de iki çekirdek için L2’yi paylaşır veya belki de L3, sekizin tümü tarafından paylaşılır.
Son olarak, önbellek işlemeyi hızlandırmak için iki temel kavramdan yararlanır: yerellik ve hız. Yani, gecikmeyi azaltmak için, RAM’de veya sistemin sanal belleğinde bir yerde aramak için işlem birimlerine veya çekirdeklere yakın bir yerde bulunur. Öte yandan, çok pahalı belleklerdir, bu nedenle çok büyük kapasiteleri yoktur, çünkü çok yüksek maliyetleri olacaktır çünkü bellek hücrelerinin diğer bellek türlerinin diğer hücrelerine kıyasla çok hızlı erişim süreleri vardır.
Size bir fikir vermek için, ana belleğe veya RAM’e erişmek, yaklaşık 50 ns’ye eşdeğer olan yaklaşık 100 saat döngüsü alabilir. Çok fazla görünmeyebilir, ancak işlemcinin düzinelerce talimatı yerine getirip beklemek zorunda kalabileceği 100 döngü vardır. Öte yandan, düşük gecikme süresi nedeniyle L1’e erişmek için artık 3-5 döngü arasında yapamazken, L2 için 8-20 döngü arasında ve L3 için 30-80 döngü arasında gidebilir. Bu, oldukça önemli bir performans artışına dönüşen bir zaman kazancı anlamına gelir.
Bellek hiyerarşisi nasıl çalışır?
Önbellek, CPU’nun aradığı bir veriyi veya talimatı içerdiğinde, bir başarı (hit) meydana geldiği, içermiyorsa bir ıska (kayıp) meydana geldiği söylenir. Bir sistemin isabet oranına ve ıskalama oranına bağlı olarak, az ya da çok performansa sahip olacaktır. Önbelleğin kapasitesi daha büyükse, aranan bir bilginin orada olma ve diğer farklı bilgileri depolamak için silinmemiş olma ihtimalinin daha yüksek olduğunu unutmayın. Bu yalnızca önbelleğin boyutuna değil, aynı zamanda kullanılan politikalara ve algoritmalara vb. bağlıdır.
3 seviye önbelleğe sahip bir CPU düşünelim ve bu CPU’nun bunları yürütmek için bir talimat ve bir veri parçası bulmak istediğini düşünelim. Aşağıdakiler olabilir:
- L1d ve L1i: CPU önce L1’de arayacaktır, eğer aradığı şey bulunursa, bir isabet üretilir ve veriler ve talimat hızlı bir şekilde elde edilir, çünkü önceki uygulamalardan orada bulunur. Bulunamazsa, bir arıza veya kayıp meydana gelir.
- L2: L1’de arıza meydana geldiğinde, CPU’nun yapacağı bir sonraki şey, veri ve talimat bulunursa L2’de arama yapmaktır (bu hafızanın birleşik olduğunu unutmayın). Burada bulunuyorsa, bir isabet üretilir ve yürütme için elde edilir. Aksi takdirde L2’de bir arıza olur ve bir sonraki seviyeye geçer.
- L3 (LLC): CPU, ihtiyaç duyduğu bilgiyi bu diğer seviyede arayacaktır, bir isabet bulunursa üretilir ve elde edilir, bulunamazsa bir kayıp üretilir.
- Ana bellek veya RAM & G/Ç: Aranan şeyin CPU LLC’de bulunmaması durumunda, CPU bunu RAM’de aramayı seçecektir, bu da daha yüksek gecikme süresi nedeniyle daha fazla döngü alacaktır. Orada olma ihtimali çok yüksek. Ancak, durum böyle olmayabilir…
- İkincil bellek (SWAP veya sanal bellek): ardından S.O. İşlemi, daha yüksek bir öncelikte aranan veri ve talimatla birlikte, takas belleğinden veya sanal bellekten RAM’e geçirmelisiniz. RAM’e yüklendikten sonra, CPU ona erişebilecektir. Bu nedenle, bu adım, en fazla sayıda bekleme döngüsünü içeren ve kaçınılması istenen adımdır.
Önbellek türleri
Önbellek türleri, aşağıdakiler gibi çeşitli parametreler dikkate alınarak kataloglanabilir.
Kullanımına bağlı olarak
Önbelleğin ne için kullanıldığına bağlı olarak aşağıdaki durumlar meydana gelebilir:
- Scratchpad Belleği: Bazı verilerin veya hesaplama işlemlerinin vb. geçici olarak saklanması için çok hızlı bir yerel bellek türüdür. Bu bellek bir L1’e benzer ve ALU’nun yanında bulunur.
- Kurban arabelleği: L1’de atılan veriler ve talimatlar için bir havuz görevi gören küçük boyutlu, tamamen ilişkilendirilebilir küçük bir önbellektir.
- Yardımcı önbellek: öncekine benzer, tamamen ilişkisel ve bir FIFO ikame algoritması ile.
- İz önbelleği veya L0: bunlar, talimat kod çözme birimine yakın olan ve bir dahaki sefere ihtiyaç duyulduklarında kodlarını çözmek zorunda kalmamak için son talimatlar tarafından oluşturulan mikro işlemleri depolamak amacıyla çok küçük hafızalardır.
- Diğerleri.
Değiştirme algoritmasına göre
Önbellekte diğerlerine yer açmak için verilerin ortadan kaldırılma şeklidir:
- Rastgele veya RR: sözde rastgele bir şekilde seçilir.
- LRU: en az güncel olanın yerine geçen zamansal yerellik ilkesiyle ilgilidir.
- FIFO: ilk giren ilk çıkar.
- MRU: En son erişilenin yerini alır.
- PLRU: İlişkili önbelleklerde, genellikle 4’ten fazla yolla, bu sözde LRU uygulanır.
- SLRU: Test segmenti ve korumalı segment olarak ikiye ayrılır, korunan olanın satırları en eskiden en yeniye doğru sıralanır ve bir segmentin satırları korunan satırın sonuna geçirilir, böylece erişim için ikinci bir fırsat.
- LFU: Bir sayaç ile ilk önce en az erişileni eler.
- Diğerleri.
Konum politikasına göre
Yazışma veya organizasyon düzeyine bağlı olarak:
- Doğrudan Eşleme: Ana belleğin her bloğuna belirli bir önbellek çerçevesi atanır.
- Tam İlişkili: Herhangi bir ana bellek konumu, herhangi bir önbellek konumunda saklanabilir.
- n-way İlişkili: Elbette bazı işlemcilerin açıklamalarında önbelleğin 4-yollu, 8-yollu vs. olduğunu görmüşsünüzdür, çünkü yollar bunlardır. Tek yönlü olması durumunda, bir ana bellek bloğunun her bir konumu yalnızca önbelleğin belirli bir konumunda saklanabilir. Daha fazla yolla, set düzeyinde doğrudan bir eşleme ve blok düzeyinde bir ilişkisel eşleme karıştırılır.
Yazma politikasına göre
- Yazma: hem önbelleği hem de ana belleği, süresi dolmuş veri olmaması ve böylece tutarlılığın korunması için değiştirir.
- Geri Yazma: Yalnızca önbellek yazılır ve yazılan satır değiştirilecekse, değiştirilmeden önce daha yüksek hiyerarşik seviyelerden bellekte de değiştirilir.
Özet ve sonuç olarak işlemci önbelleğinin bellek sistemi performans sorununun çözümü olduğunu söyleyebiliriz, işlemcinin daha yüksek genel performans elde etmek için ana bellek sistemi üzerinde yapması gereken okuma ve yazmaları hızlandırmaktan sorumludur.