Sayfa tablosu yürüyüşleri önbelleğe alınmış mı?


12

TLB yönetimine sahip bir mikroişlemcide (diyelim bir Intel x86-64), TLB eksikse ve işlemci sayfa tablosunda yürüyorsa, bu (çip dışı) bellek erişimi önbellek hiyerarşisinden (L1, L2, vb.) Geçiyorsa. )?


Elektronik tasarımla ilgisi yok. Soru kapatılacak.
Leon Heller

8
Belirli bir yongaların nasıl çalıştığını soruyor, bu yüzden konu hakkında olduğunu düşünüyorum.
Olin Lathrop

5
@OlinLathrop: Katılıyorum: Entegre bir devrenin düşük seviyeli detaylarının konuyla ilgili olduğunu düşünüyorum.
davidcary

Başka hiçbir şey olmasa bile, işlemcilerimizin işlevlerini hata ayıklamanın, iyi bir şekilde deterministik bir sistem tasarlamanın en önemli adımı olduğunu kabul etmeliyim. Bu, sınırlarımızdan birine yaklaşıyor, ancak içeride güçlü görünüyor.
Kortuk

Yanıtlar:


8

Evet, anlayabildiğim kadarıyla, Intel x86-64 işlemcilerinde, TLB eksik olduğunda ve işlemci sayfa tablosunda yürürken, bu yonga dışı bellek erişimleri önbellek hiyerarşisinden geçer.

Birkaç ayrıntıda hala biraz bulanıkım ve umarım başka bir cevap onları dolduracaktır - sayfa yürüyüşünü ayrıntılı olarak açıklayan bir Intel veya AMD kılavuzu yok mu? Benim anlayışım şudur:

  • Bazı adres kayıtlarındaki sanal adres önce fiziksel bir adrese dönüştürülmek için hızlı bir TLB'ye verilir - PC'deki adres L1 ITLB'ye, diğer kayıtlardaki adres L1 DTLB'ye teslim edilir .
  • Bu ilk arama kaçırırsa, denenen daha yavaş, daha büyük bir TLB seviyesi daha vardır. (Bu L2 TLB aynı zamanda bir ITLB ve DTLB'ye mi bölünmüş, yoksa birleşik bir TLB önbelleği mi? Başka TLB seviyeleri var mı - L3? L4?)
  • TLB araması tamamen başarısız olursa ve x86 ve x86-64 VHPT yürüteç devre dışı bırakılmışsa, CPU, işletim sistemi çekirdeği tarafından yakalanan bir TLB eksik hatası sinyali verir. Anladığım kadarıyla, x86 dışındaki tüm CPU'lar aynı şeyi yapıyorlar - TLB özlemlerini tamamen yazılımda ele alıyorlar. Etkinleştirilirse, x86 ve x86-64 işlemcilerin sonraki birkaç adımı işleyen donanım destekli VHPT tablo yürütücüsü vardır. (X86 ve x86-64 yongalarının VHPT'yi tamamen devre dışı bırakan bir biti var mı, yoksa bazı adres aralıkları için VHPT'yi etkinleştirebilecek ve diğer adres aralıkları için VHPT'yi devre dışı bırakabilecek çok sayıda bit var mı? Bu bitler nerede bulunur?)
  • TLB araması tamamen başarısız olursa, orijinal (muhtemelen kullanıcı modu) sanal adresi V1, V1 için fiziksel sayfa numarasını tutan PTE sayfa tablosu girişinin sanal adresi olan V2'ye dönüştürülür.
  • V2 yine sanal bir adres olduğu için, CPU normal sanaldan fiziksel adres çevirisine geçer, tek fark L1'i atlaması ve L2'ye doğru gitmesidir.
  • Donanım, sanal olarak V2'yi (neredeyse endeksli) L2 önbelleğinden PTE getirmeye paralel olarak TLB'deki sanal adresi arar.
  • V2 bir komutun adresi olmadığından, L1 komut önbelleğinden geçmez; ve V2 normal kullanıcı verilerinin adresi olmadığı için, L1 veri önbelleğinden geçmez. V2 başlangıçta L2 birleşik önbelleğine (birleşik talimat + veri + PTE önbelleği) beslenir. Bkz. "Önbellek hiyerarşisi örneği" .
  • L2 önbelleği (veya L3 veya sanal olarak dizine alınmış başka bir önbellek) PTE içeriyorsa, VHPT PTE'yi önbellekten alır ve TLB'ye V1 için PTE'yi yükler ve bu PTE'deki fiziksel adres, orijinal sanal adres V1'i fiziksel RAM adresine gönderir ve sonunda bu veri veya talimatı işletim sisteminden herhangi bir yardım almadan tamamen donanımda alır.
  • Sanal olarak dizine alınan önbelleğin tüm düzeyleri başarısız olursa, ancak bu ikinci TLB araması V2 için başarılı olursa, VHPT PTE'yi fiziksel olarak dizinlenmiş önbellekten veya ana bellekten alır, TLB'ye V1 için PTE'yi ve içindeki fiziksel adresi yükler. PTE, orijinal sanal adresi V1'i fiziksel RAM adresine çevirmek için kullanılır ve sonunda bu veri veya talimatı işletim sisteminden herhangi bir yardım almadan tamamen donanımda alır.
  • Bu ikinci TLB araması başarısız olursa, donanım VHPT yürüteç bir VHPT ÇEVİRME HATASINDAN vazgeçer.
  • Bir VHPT ÇEVİRİ HATASI oluştuğunda, CPU işletim sistemine kapanır. İşletim sistemi neyin yanlış gittiğini bulmalı ve işleri düzeltmelidir:
  • (a) belki de V2 içeren sayfa şu anda diske değiştirildiğinden, işletim sistemi RAM'e okur ve başarısız talimatı yeniden başlatır veya
  • (b) hatalı bir program, geçersiz bir konumu okumaya veya yazmaya veya yürütmeye çalışıyorsa ve işletim sistemi işlemi sonlandırıyorsa veya
  • (c) işletim sistemi yazarlarının çeşitli mekanizmaları yakalamak için bu mekanizmayı kullanmak için yaptıkları çeşitli püf noktaları - diske çıkarılabilecek V1 içeren sayfayı yükleyin; yeni programlarda hata ayıklamak için kullanılan çeşitli tuzaklar; doğrudan desteklemeyen CPU'larda "W ^ X" benzetimi yapmak; yazma üzerine kopyalamayı desteklemek; vb.

Thomas W. Barr, Alan L. Cox, Scott Rixner sayfa 2'deki diyagram. " MMU önbelleği tarafından kaydedilen girişler" ile "L2 veri önbelleği tarafından kaydedilen girişler" arasında bir çizgi çizen "Çeviri Önbelleğe Alma: Atla, Yürüme (Sayfa Tablosu) ". (Bu tamamen "Elektronik tasarım" için konu olan yeni CPU tasarlayan insanlar için yararlı bir kağıt olabilir ).

Stephane Eranian ve David Mosberger. "IA-64 Linux Çekirdeğinde Sanal Bellek" ve Ulrich Drepper. "Her programcının bellek hakkında bilmesi gerekenler" (Bu, ED için biraz konu dışı olan IA-64 sayfa tablosuyla ilgilenen işletim sistemleri yazan insanlar için yararlı bir kağıt olabilir - belki "işletim- sistem "etiketi veya " osdev "etiketi veya OSDev.org wiki bu konu için daha iyi bir yer olabilir).

Intel sayfa 533'teki Tablo A-10. "Intel® 64 ve IA-32 Architectures Yazılım Geliştirici Kılavuzu" "PAGE_WALKS.CYCLES ... sayfa yürüyüşlerinin çoğunun önbelleklerden memnun olup olmadığına dair ipucu verebilir veya L2 önbellek kaybına neden olabilir."


Cevabı seviyorum, ama muhtemelen iyi hak edilen bir oyu vererek rahat hissetmek için gerekli uzmanlığa sahip olmayan birçok kişiden biriyim. Diğer uzmanların doğruladığı gibi, zaten kazandığınız temsilcisi vereceğim.
Kortuk

Bunun doğru olduğuna inanmıyorum. TLB aramasıyla ilgili madde işareti 1 + 2 doğru AFAICT, ancak 3 değil. X86 (veya x86-64) üzerindeki sayfa tablosu yürüyüşleri yazılımda (istisna geçerlidir, daha sonra bakın) değil, donanımda işlenir. CPU, TLB kullanarak adresi çözemediğini belirlediğinde, kendisi CR3 kaydının işaret ettiği tablodan başlayarak sayfa tablolarını yürütecaktır. Yalnızca bu çözünürlük başarısız olursa, CPU'nun sayfa hatası işleyicisini çağırır. İstisna, belirli modlarda hiper yöneticinin misafirde oluşan bir sayfa hatasını çözeceği sanallaştırma uzantılarıdır.
Morty

Ben x86 yazılım TLB güncellemeleri yapmak için bir yol olduğunu sanmıyorum. Yumuşak TLB işlemeye izin veren invlpgISA'lar SW'nin TLB girişlerini değiştirmek için özel talimatlara sahiptir, ancak x86'nın belirli bir virt addr için herhangi bir TLB önbelleğini geçersiz kılmak dışında olduğunu düşünmüyorum. HW sayfa gösterimi o sanal adres için bir giriş bulamazsa veya girişin izinleri erişime izin vermezse, bir #PFistisna alırsınız . İşletim sistemi, sayfa tablosunu güncelleyerek (muhtemelen diskteki verileri sayfaladıktan sonra veya yazma üzerine kopyalama yaptıktan sonra) ve ardından devam eden yükün / deponun yeniden çalışmasını ve HW pagewalk'ın başarılı olmasını sürdürür.
Peter Cordes


4

Bunun bir bilgisayar mimarisi stackexchange'e, elektronik bir stackexchange'e ait olduğunu kabul etme eğilimindeyim, ancak burada olduğu için:

@davidcary doğru.

Bazı tarihler:

Intel x86 sayfa tablosu yürüyüşleri P5, yani Pentium'a kadar önbelleğe alınmadı. Daha doğrusu, sayfa tablosu yürüme belleği erişimleri önbelleğe alınmadı, önbellek atlandı. O zamana kadar çoğu makine yazma yoluyla olduğundan, önbellekle tutarlı değerler aldılar. Ama önbellekleri gözetlemediler.

P6, diğer adıyla Pentium Pro ve AFAIK sonraki tüm işlemci sayfa tablosu yürüyüşlerinin önbelleğe erişmesine ve önbellekten çekilen bir değer kullanmasına izin verildi. Böylece, geri yazma önbellekleriyle çalıştılar. (Elbette sayfa tablolarını, örneğin MTRR'ler tarafından tanımlanan önbelleğe alınamayan bir belleğe yerleştirebilirsiniz. Ancak, işletim sistemlerinde hata ayıklamak için yararlı olsa da, bu büyük bir performans kaybıdır.)

Bu arada, bu "sayfa tablosu yürüme belleği erişimleri veri önbelleklerine erişebilir" den ayrıdır "sayfa tablosu girişleri bir TLB Ttranslation Lookaside Buffer'da saklanabilir (önbelleğe alınabilir)." Bazı makinelerde TLB'ye "Çeviri Önbelleği" denir.

İlgili diğer bir konu, sayfa tablolarının iç düğümlerinin, örneğin PDE-önbellek gibi TLB benzeri veri yapılarında önbelleğe alınabilmesidir.

Önemli bir fark: veri önbelleği uyumludur ve gizlidir. Ancak TLB ve PDE önbellekleri gözetlenmez, yani tutarlı değildir. Sonuç olarak, sayfa tabloları tutarsız TLB'lerde ve PDE önbelleklerinde vb. Önbelleğe alınabileceğinden, yazılımın sayfa tablosu girişleri, önbellek değiştirildi. En azından "tehlikeli" bir şekilde değiştirildiğinde, RW-> R-> I'den gidildiğinde veya adresleri değiştirirken.

Yeni bir tutarlı olmayan TLB benzeri önbellekleme türü eklendiğinde, bazı işletim sistemlerinin bozulduğunu söylemek doğru olur, çünkü bunun yapılmadığı varsayımları vardı.


Yeni bir kompozisyon kemer. se teklifi "3 ay önce" başladı. Sanırım daha önce alanın dışına çıkmayan bir tane daha vardı51 (yeterli takipçi yok mu?).
Paul A. Clayton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.