Pada mikroprosesor dengan manajemen TLB perangkat keras (katakanlah Intel x86-64) jika miss TLB terjadi dan prosesor sedang berjalan di halaman tabel, apakah ini (off-chip) memori mengakses melalui hirarki cache (L1, L2, dll. )?
Pada mikroprosesor dengan manajemen TLB perangkat keras (katakanlah Intel x86-64) jika miss TLB terjadi dan prosesor sedang berjalan di halaman tabel, apakah ini (off-chip) memori mengakses melalui hirarki cache (L1, L2, dll. )?
Jawaban:
Ya, sejauh yang saya tahu, pada prosesor Intel x86-64, ketika miss TLB terjadi dan prosesor sedang berjalan di halaman tabel, akses memori off-chip melewati hierarki cache.
Saya masih sedikit kabur pada beberapa detail, dan saya harap jawaban lain akan mengisinya - bukankah ada manual Intel atau AMD yang menggambarkan halaman berjalan dalam detail yang luar biasa? Pemahaman saya adalah:
Diagram di halaman 2 dari Thomas W. Barr, Alan L. Cox, Scott Rixner. "Caching Terjemahan: Lewati, Jangan Berjalan (Tabel Halaman)" yang menarik garis antara "Entri yang disimpan oleh cache MMU" dan "entri yang disimpan oleh cache data L2". (Ini mungkin makalah yang berguna bagi orang yang mendesain CPU baru , yang benar-benar sesuai topik untuk "Desain elektronik").
Stephane Eranian dan David Mosberger. "Memori Virtual di Kernel Linux IA-64" dan Ulrich Drepper. "Apa yang harus diketahui oleh setiap programmer tentang memori" (Ini mungkin merupakan makalah yang berguna bagi orang yang menulis sistem operasi yang berhubungan dengan tabel halaman IA-64, yang sedikit tidak sesuai topik untuk ED - mungkin Stack Overflow dengan "operating- tag "sistem atau " osdev " atau wiki OSDev.org akan menjadi tempat yang lebih baik untuk topik itu).
Tabel A-10 pada Halaman 533 dari Intel. "Manual Pengembang Perangkat Lunak Arsitektur Intel® 64 dan IA-32" "PAGE_WALKS.CYCLES ... dapat memberi petunjuk apakah sebagian besar halaman-berjalan dipenuhi oleh cache atau menyebabkan kehilangan cache L2."
invlpg
untuk membatalkan caching TLB apa pun untuk addr tambahan yang diberikan. Jika trotoar HW tidak menemukan entri untuk alamat virtual itu, atau izin entri tidak memungkinkan akses, Anda mendapatkan #PF
pengecualian. OS menangani itu dengan memperbarui tabel halaman (mungkin setelah paging dalam data dari disk, atau melakukan copy-on-write), dan kemudian melanjutkan sehingga load / store yang bermasalah akan kembali berjalan dan trotoar HW akan berhasil.
Saya cenderung setuju bahwa ini termasuk dalam stackexchange arsitektur komputer, bukan stackexchange elektronik, tetapi karena ini ada di sini:
@davidcary benar.
Beberapa sejarah:
Intel x86 page table walks TIDAK di-cache hingga P5, alias Pentium. Lebih tepatnya, akses memory table table walk tidak di-cache, melewati cache. Karena sebagian besar mesin hingga saat itu adalah write-through, mereka menerima nilai yang konsisten dengan cache. Tapi mereka tidak mengintip cache.
P6, alias Pentium Pro, dan AFAIK semua pemroses tabel berjalan selanjutnya diizinkan untuk mengakses cache, dan menggunakan nilai yang ditarik dari cache. Jadi, mereka bekerja dengan cache write-back. (Tentu saja Anda dapat menempatkan tabel halaman dalam memori yang tidak dapat dipadamkan, didefinisikan, misalnya oleh MTRR. Tapi itu adalah kerugian kinerja yang besar, meskipun dapat berguna untuk debugging OS.)
By the way, ini "mengakses tabel berjalan memori dapat mengakses cache data" terpisah dari "entri tabel halaman dapat disimpan (di-cache) dalam TLB Ttranslation Lookaside Buffer)." Pada beberapa mesin, TLB disebut "Terjemahan Cache".
Masalah terkait lainnya adalah bahwa interior node dari tabel halaman mungkin di-cache dalam lebih banyak lagi struktur data mirip TLB, misalnya cache PDE.
Satu perbedaan utama: cache data adalah koheren, dan diintip. Tetapi cache TLB dan PDE tidak diintip, yaitu tidak koheren. Intinya adalah bahwa, karena tabel halaman mungkin di-cache dalam TLB dan koheran PDE yang tidak koheren, dll, perangkat lunak harus secara eksplisit menyiram entri individual atau grup massal (seperti, seluruh TLB), ketika entri tabel halaman yang mungkin sudah begitu cache diubah. Setidaknya ketika diubah dengan cara "berbahaya", pergi dari RW-> R-> I, atau mengubah alamat.
Saya pikir itu adil untuk mengatakan bahwa setiap kali jenis baru caching non-koheren seperti TLB telah ditambahkan, beberapa OS telah rusak, karena itu memiliki asumsi tersirat bahwa ini tidak dilakukan.