Prosesor modern umumnya menjalankan program di ruang alamat virtual. Operasi load atau store dapat dimulai dengan alamat virtual, sementara sistem memori pada akhirnya membutuhkan lokasi fisik dan izin akses. Page table menyimpan informasi pemetaan tersebut, tetapi menelusuri hierarkinya untuk setiap akses memori akan menambah pekerjaan yang besar.

Translation lookaside buffer, atau TLB, menyimpan translasi alamat yang baru digunakan di dekat prosesor. TLB hit menyediakan informasi pemetaan yang sudah di-cache tanpa full page-table walk. TLB miss memicu pekerjaan translasi tambahan meskipun data aplikasi yang diminta sudah berada di CPU cache.

Karena itu, caching translasi merupakan bagian tersendiri dari performa memori.

TLB menyimpan pemetaan halaman, bukan data aplikasi

Memori virtual biasanya membagi ruang alamat menjadi halaman. Sebuah page-table entry dapat mengaitkan halaman virtual dengan physical page frame sekaligus membawa atribut seperti izin akses.

Untuk ukuran halaman tetap yang sederhana, alamat dapat dipandang sebagai dua bagian:

alamat virtual = nomor halaman virtual + offset halaman

Translasi mengganti nomor halaman virtual dengan informasi yang mengidentifikasi physical page frame. Offset di dalam halaman tetap menjadi offset untuk memilih byte di dalam frame tersebut.

Sebuah TLB entry menyimpan pemetaan ini beserta atribut terkait. TLB tidak menyimpan byte yang berada pada alamat hasil translasi. Data cache dan instruction cache menjalankan tugas yang berbeda itu.

Karena itu, satu akses memori dapat hit pada satu struktur dan miss pada struktur lain. Translasi dapat hit di TLB sementara data yang diminta miss di data cache. Sebaliknya, translasi dapat miss di TLB meskipun data pada alamat fisik hasil translasi masih tersimpan di cache.

TLB hit menghindari page-table walk

Page table umumnya bersifat hierarkis. Prosesor atau sistem operasi tidak perlu menyimpan satu entry datar untuk setiap kemungkinan halaman virtual dalam satu array kontigu yang sangat besar. Beberapa level membuat wilayah alamat yang tidak digunakan membutuhkan lebih sedikit penyimpanan pemetaan.

Hierarki ini memiliki biaya: menyelesaikan translasi yang belum di-cache dapat membutuhkan pembacaan beberapa page-table entry. Hardware page walker pada arsitektur prosesor umum menangani sebagian besar proses ini secara otomatis untuk pemetaan biasa.

TLB hit melewati traversal berulang tersebut. Secara konseptual, fast path-nya:

halaman virtual -> lookup TLB -> physical page frame

Sementara miss mengambil jalur lebih panjang:

halaman virtual -> page-table walk -> pemetaan -> pengisian TLB

Page-table entry sendiri dapat memanfaatkan cache prosesor, sehingga TLB miss tidak berarti setiap langkah walk harus mencapai DRAM. Meski begitu, walk tetap memakai bandwidth cache, resource lookup, dan waktu yang dapat dihindari oleh TLB hit.

Jangkauan TLB bergantung pada jumlah entry dan ukuran halaman

Ukuran kapasitas yang berguna adalah TLB reach: jumlah memori virtual yang translasinya dapat direpresentasikan oleh sekumpulan TLB entry pada saat yang sama.

Jika TLB dapat menampung 64 translasi untuk halaman 4 KiB, jangkauan nominal sederhananya adalah:

64 * 4 KiB = 256 KiB

Angka ini tidak sama dengan kapasitas CPU cache. Sebuah workload dapat bekerja pada data yang muat dengan nyaman di cache besar tetapi menyentuh cukup banyak halaman berbeda hingga melampaui cakupan translasi TLB yang kecil.

Prosesor nyata dapat memiliki instruction TLB dan data TLB terpisah, beberapa level TLB, entry untuk beberapa ukuran halaman, penempatan set-associative, serta aturan sharing khusus arsitektur. Detail tersebut memengaruhi jangkauan efektif dan perilaku konflik.

Hubungan dasarnya tetap berguna: lebih banyak translasi yang di-cache atau halaman yang lebih besar dapat mencakup rentang alamat yang lebih luas sebelum translasi lama perlu diganti.

Halaman yang lebih besar meningkatkan jangkauan per entry

Misalkan satu TLB entry mewakili halaman 4 KiB. Jumlah entry yang sama untuk halaman 2 MiB mencakup ruang alamat virtual 512 kali lebih besar per entry.

Hal ini dapat mengurangi tekanan translasi pada wilayah memori besar yang alignment-nya sesuai. Sistem operasi dan aplikasi dapat menggunakan pemetaan halaman besar melalui mekanisme khusus platform, termasuk alokasi large page secara eksplisit atau promosi otomatis jika didukung.

Halaman besar juga memiliki trade-off. Ia membutuhkan wilayah fisik kontigu yang lebih besar pada granularitas terkait, dapat meningkatkan fragmentasi internal, serta mengubah biaya alokasi, reclamation, copy, dan migrasi. Pemetaan yang lebih besar juga dapat membuat satu translation entry mencakup data dengan karakteristik locality yang berbeda.

Karena itu, large page adalah pilihan resource dan layout, bukan sakelar performa universal.

TLB miss berbeda dari page fault

TLB miss tidak berarti halaman yang diminta tidak ada di memori fisik. Artinya hanya translasi yang dibutuhkan tidak ditemukan di translation cache yang relevan.

Jika page table memiliki pemetaan valid dengan izin yang sesuai, prosesor dapat menyelesaikan page-table walk, mengisi state translasi sebagaimana diperlukan, lalu melanjutkan eksekusi.

Page fault adalah peristiwa berbeda. Ia terjadi ketika translasi alamat menemukan kondisi yang membutuhkan penanganan sistem operasi, misalnya pemetaan yang saat itu tidak present atau akses yang bertentangan dengan izin halaman. Sistem operasi kemudian dapat mengambil tindakan sesuai pemetaan dan jenis fault.

Perbedaan ini penting saat membaca data performa. TLB miss yang sering dapat menambah biaya translasi alamat tanpa menghasilkan aliran major page fault yang melibatkan storage.

Izin ikut dibawa oleh state translasi

Translasi alamat bukan sekadar aritmetika dari satu nomor halaman ke nomor lainnya. Page-table entry juga menyandikan informasi kontrol yang digunakan untuk proteksi memori, sesuai arsitektur.

Translation entry yang di-cache dapat menyimpan informasi izin dan atribut yang dibutuhkan untuk pemeriksaan akses. Prosesor tidak boleh menganggap izin lama di cache tetap valid selamanya setelah software mengubah pemetaan terkait.

Karena itu, sistem operasi menggunakan mekanisme invalidasi dan sinkronisasi yang ditentukan arsitektur ketika mengubah pemetaan dengan cara yang mengharuskan state translasi di cache dibuang. Pada sistem multiprosesor, invalidasi dapat melibatkan core lain yang mungkin menyimpan entry terkait.

Koordinasi ini merupakan salah satu alasan perubahan pemetaan yang sering dapat lebih mahal daripada sekadar mengubah page-table entry di memori.

Pergantian proses memerlukan pengelolaan identitas translasi

Proses berbeda dapat menggunakan alamat virtual yang sama untuk halaman fisik yang berbeda. Karena itu, translasi yang di-cache harus dikaitkan dengan konteks ruang alamat yang benar.

Salah satu pendekatan adalah menginvalidasi TLB entry yang relevan ketika berpindah ruang alamat. Banyak arsitektur prosesor juga menyediakan address-space identifier atau tag sejenis. Tag semacam ini memungkinkan entry dari beberapa ruang alamat hidup berdampingan ketika hardware dan sistem operasi menggunakannya dengan benar.

Tagging dapat mengurangi state translasi yang harus dibuang saat context switch. Namun entry tidak menjadi valid selamanya: perubahan pemetaan, penggunaan ulang identifier, dan peristiwa arsitektural lain tetap membutuhkan aturan invalidasi yang benar.

Dampak praktisnya, biaya context switch sebagian bergantung pada desain translasi prosesor dan pengelolaan sistem operasi, bukan hanya pekerjaan menyimpan dan memulihkan register.

Pola akses dapat menciptakan tekanan translasi

Kode yang menyentuh satu lokasi pada masing-masing dari banyak halaman dapat membutuhkan banyak translasi sambil memindahkan relatif sedikit data aplikasi. Struktur sparse, hash table besar, buffer database, virtual machine, dan array ilmiah besar dapat menghasilkan page footprint yang penting terlepas dari locality cache pada tingkat byte.

Bayangkan loop yang membaca satu nilai 8-byte dari setiap halaman 4 KiB di sebuah wilayah besar. Setiap akses hanya memakai sedikit bandwidth data pada tingkat aplikasi, tetapi loop berputar melalui banyak halaman virtual. Kapasitas translation cache dapat menjadi relevan jauh sebelum total byte yang dibaca per iterasi terlihat besar.

Mengubah layout data kadang dapat memadatkan objek aktif ke lebih sedikit halaman. Pemetaan halaman besar dapat meningkatkan reach ketika biaya operasionalnya dapat diterima. Kedua pendekatan menargetkan locality pada tingkat halaman, bukan locality cache line biasa.

Translasi dan caching data adalah batas yang berbeda

Performa memori CPU dibentuk oleh beberapa lapisan cache dengan unit dan tujuan berbeda. Data cache dapat melacak cache line 64-byte, sementara TLB melacak pemetaan untuk halaman 4 KiB atau lebih besar. Kapasitas keduanya tidak dapat dibandingkan seolah-olah menyimpan resource yang sama.

Sebuah workload dapat memiliki locality cache line yang kuat tetapi page locality yang buruk, atau sebaliknya. Performance counter yang mengekspos event TLB dapat membantu memisahkan tekanan translasi dari cache miss biasa, meskipun nama event dan semantik persisnya berbeda antar keluarga prosesor.

Microbenchmark juga dapat memvariasikan jumlah halaman sambil mempertahankan jumlah byte berguna per halaman. Pengujian semacam ini perlu hati-hati karena prefetching, alokasi halaman, ukuran halaman, state cache, frekuensi prosesor, dan scheduling sistem operasi dapat memengaruhi hasil.

Poin strukturalnya jelas: alamat virtual membutuhkan state translasi sebelum akses memori dapat berlanjut melalui hierarki memori fisik. TLB menjaga pemetaan terbaru tetap dekat dengan hardware eksekusi, dan cakupannya yang terbatas membentuk batas performa yang berbeda dari kapasitas cache yang menyimpan instruksi dan data.