Tembolok (komputer)

**Tembolok** atau **memori singgahan** () adalah komponen perangkat keras atau perangkat lunak yang menyimpan data sehingga permintaan di masa mendatang untuk data tersebut dapat dilayani lebih cepat; data yang disimpan dalam mungkin merupakan hasil dari penghitungan sebelumnya atau salinan data yang disimpan di tempat lain. Sebuah *cache hit* terjadi ketika data yang diminta dapat ditemukan di tembolok, sementara *cache miss* terjadi jika tidak bisa. Cache hit disajikan dengan membaca data dari tembolok, yang lebih cepat daripada menghitung ulang hasil atau membaca dari penyimpanan data yang lebih lambat; dengan demikian, semakin banyak permintaan yang dapat dilayani dari tembolok, semakin cepat kinerja sistem.

Agar hemat biaya dan memungkinkan penggunaan data yang efisien, tembolok harus relatif kecil. Namun demikian, tembolok telah membuktikan dirinya di banyak area komputasi, karena aplikasi komputer biasa mengakses data dengan tingkat lokalitas referensi yang tinggi. Pola akses tersebut menunjukkan lokalitas temporal, di mana data yang diminta telah diminta baru-baru ini, dan lokalitas spasial, di mana data yang diminta disimpan secara fisik dekat dengan data yang telah diminta.

## Motivasi

Ada trade-off yang melekat antara ukuran dan kecepatan (mengingat bahwa sumber daya yang lebih besar menyiratkan jarak fisik yang lebih jauh) tetapi juga tradeoff antara mahal, teknologi premium (seperti SRAM) vs lebih murah, komoditas yang mudah diproduksi secara massal (seperti DRAM atau hard disk).

Buffering yang disediakan oleh tembolok menguntungkan baik latensi maupun throughput (bandwidth):

### Latensi
Sumber daya yang lebih besar menimbulkan latensi yang signifikan untuk akses - mis. dibutuhkan ratusan siklus clock untuk prosesor 4&nbsp;GHz modern untuk mencapai DRAM. Hal ini diatasi dengan membaca dalam potongan besar, dengan harapan bacaan selanjutnya akan berasal dari lokasi terdekat. Prediksi atau prefetching eksplisit mungkin juga menebak dari mana bacaan di masa mendatang akan berasal dan membuat permintaan sebelumnya; jika dilakukan dengan benar latensi akan dilewati sama sekali.

### Lewatan
Penggunaan tembolok juga memungkinkan melewati yang lebih tinggi dari sumber daya yang mendasarinya, dengan menggabungkan beberapa butiran halus transfer menjadi permintaan yang lebih besar dan lebih efisien. Dalam kasus sirkuit DRAM, ini dapat dilayani dengan memiliki bus data yang lebih luas. Misalnya, pertimbangkan sebuah program yang mengakses bita dalam ruang alamat 32-bit, tetapi dilayani oleh bus data off-chip 128-bit; akses bita individu yang tidak di-cache hanya akan memungkinkan 1/16 dari total bandwidth yang akan digunakan, dan 80% dari pergerakan data akan menjadi alamat memori, bukan data itu sendiri. Membaca potongan yang lebih besar mengurangi sebagian kecil dari bandwidth yang diperlukan untuk mentransmisikan informasi alamat.

## Operasi
Perangkat keras mengimplementasikan tembolok sebagai blok memori untuk penyimpanan sementara data yang kemungkinan besar akan digunakan lagi. Unit pemrosesan sentral uq) dan hard disk drive (HDD) sering menggunakan tembolok, seperti halnya peramban web dan peladen web.

Tembolok terdiri dari kumpulan entri. Setiap entri memiliki *data* terkait, yang merupakan salinan dari data yang sama di beberapa *penyimpanan cadangan*. Setiap entri juga memiliki *label*, yang menentukan identitas data di penyimpanan pendukung di mana entri tersebut adalah salinannya. Pemberian label memungkinkan algoritme berorientasi tembolok simultan berfungsi dalam mode berlapis-lapis tanpa gangguan relai diferensial.

Ketika klien tembolok (CPU, peramban web, sistem operasi) perlu mengakses data yang dianggap ada di penyimpanan cadangan, tembolok terlebih dahulu diperiksa. Jika entri dapat ditemukan dengan label (tag) yang cocok dengan data yang diinginkan, data dalam entri yang digunakan. Situasi ini dikenal sebagai cache hit. Misalnya, program peramban web mungkin memeriksa tembolok lokalnya pada diska untuk melihat apakah program tersebut memiliki salinan lokal dari konten halaman web di URL tertentu. Dalam contoh ini, URL adalah label, dan konten halaman web adalah datanya. Persentase akses yang menghasilkan klik tembolok dikenal sebagai **hit rate** atau **hit ratio** tembolok.

Situasi alternatif, ketika tembolok diperiksa dan ditemukan tidak berisi entri apa pun dengan label yang diinginkan, disebut cache miss. Ini membutuhkan akses data yang lebih mahal dari penyimpanan pendukung. Setelah data yang diminta diambil, biasanya data tersebut disalin ke dalam tembolok, siap untuk akses berikutnya.

### Kebijakan penulisan
Ketika sistem menulis data ke tembolok, pada titik tertentu ia harus menulis data itu ke penyimpanan cadangan juga. Waktu penulisan ini dikendalikan oleh apa yang dikenal sebagai *write policy*. Ada dua pendekatan menulis dasar:

* *Write-through*: penulisan dilakukan secara sinkron baik ke tembolok maupun ke penyimpanan cadangan.
* *Write-back* (disebut juga *write-behind*): awalnya, penulisan dilakukan hanya untuk tembolok. Penulisan ke penyimpanan pendukung ditunda hingga konten yang dimodifikasi akan segera diganti dengan blok tembolok lain.

Tembolok tulis-balik lebih kompleks untuk diterapkan, karena itu perlu melacak lokasi mana yang telah ditimpa, dan menandainya sebagai *kotor* untuk kemudian ditulis ke penyimpanan pendukung. Data di lokasi ini ditulis kembali ke penyimpanan pendukung hanya saat mereka dikeluarkan dari tembolok, efek yang disebut sebagai *lazy write*.

Kebijakan lain juga dapat memicu pengembalian data. Klien mungkin membuat banyak perubahan pada data di tembolok, dan kemudian secara eksplisit memberi tahu tembolok untuk menulis kembali data tersebut.

Karena tidak ada data yang dikembalikan ke pemohon pada operasi tulis, keputusan perlu dibuat pada kesalahan tulis, apakah data akan dimuat ke tembolok atau tidak. Ini ditentukan oleh dua pendekatan ini:

* *Write allocate* (disebut juga *fetch on write*): data di lokasi tulis yang terlewat dimuat ke tembolok, diikuti dengan operasi tulis hit. Dalam pendekatan ini, kesalahan tulis mirip dengan kesalahan membaca.
* *No-write allocate* (disebut juga *write-no-allocate* or *write around*): data di lokasi penulisan yang terlewat tidak dimuat ke tembolok, dan ditulis langsung ke penyimpanan pendukung. Dalam pendekatan ini, data dimuat ke tembolok pada read miss only.
Kebijakan write-through dan write-back dapat menggunakan salah satu dari kebijakan write-miss ini, tetapi biasanya keduanya dipasangkan dengan cara ini:

* Tembolok *write-back* menggunakan alokasi tulis, berharap untuk penulisan berikutnya (atau bahkan membaca) ke lokasi yang sama, yang sekarang disimpan dalam tembolok.
* Tembolok write-through menggunakan alokasi no-write. Di sini, penulisan selanjutnya tidak memiliki keuntungan, karena masih perlu ditulis langsung ke penyimpanan pendukung.
Entitas selain tembolok dapat mengubah data di penyimpanan cadangan, dalam hal ini salinan dalam tembolok mungkin menjadi kedaluwarsa atau *basi*. Alternatifnya, saat klien memperbarui data di tembolok, salinan data tersebut di tembolok lain akan menjadi basi. Protokol komunikasi antara pengelola tembolok yang menjaga konsistensi data dikenal sebagai protokol koherensi.

3

## Contoh tembolok perangkat keras

### Tembolok CPU

Memori kecil di atau dekat CPU dapat beroperasi lebih cepat daripada memori utama yang jauh lebih besar. Kebanyakan CPU sejak 1980-an telah menggunakan satu atau lebih tembolok, terkadang dalam level bertingkat; modern high-end tertanam, mikroprosesor desktop dan server mungkin memiliki sebanyak enam jenis tembolok (antara level dan fungsi),. Contoh tembolok dengan fungsi tertentu adalah D-cache dan I-cache dan buffer tepi tampilan terjemahan untuk MMU.

### Tembolok GPU
Unit pemrosesan grafis (GPU) sebelumnya sering kali memiliki temblok tekstur hanya baca yang terbatas, dan memperkenalkan tekstur swizzled urutan Morton untuk meningkatkan koherensi tembolok 2D. Cache miss akan memengaruhi kinerja secara drastis, mis. jika mipmapping tidak digunakan. Caching penting untuk memanfaatkan transfer 32-bit (dan lebih luas) untuk data tekstur yang sering kali hanya 4 bit per piksel, diindeks dalam pola yang kompleks oleh koordinat UV sembarang dan transformasi perspektif dalam pemetaan tekstur terbalik.

Saat GPU terbaru (terutama dengan shader komputasi GPGPU) mereka telah mengembangkan tembolok yang semakin besar dan semakin umum, termasuk tembolok instruksi untuk shader, yang menunjukkan fungsionalitas yang semakin umum dengan tembolok CPU. Misalnya, arsitektur GPU GT200 tidak menampilkan tembolok L2, sedangkan GPU Fermi memiliki tembolok level terakhir 768 KB, GPU Kepler memiliki tembolok level terakhir 1536 KB, dan GPU Maxwell memiliki tembolok level terakhir 2048 KB. -tingkat tembolok. Tembolok ini telah berkembang untuk menangani sinkronisasi primitif antara utas dan operasi atom, dan antarmuka dengan MMU gaya CPU.

### DSP
Digital signal processors juga telah digeneralisasi selama bertahun-tahun. Desain sebelumnya menggunakan memori scratchpad yang diumpankan oleh DMA, tetapi DSP modern seperti Qualcomm Hexagon sering kali menyertakan set tembolok yang sangat mirip ke CPU (misalnya, arsitektur Harvard yang dimodifikasi dengan L2 bersama, split L1 I-cache dan D-cache).

### Terjemahan tepi buffer
Unit manajemen memori (MMU) yang mengambil entri tabel halaman dari memori utama memiliki tembolok khusus, digunakan untuk merekam hasil terjemahan alamat virtual ke alamat fisik. Tembolok khusus ini disebut translation lookaside buffer (TLB).

## Tembolok dalam jaringan

### Information-centric networking
Information-centric networking (ICN) adalah pendekatan untuk mengembangkan infrastruktur Internet dari paradigma host-centric, berdasarkan konektivitas abadi dan prinsip ujung ke ujung, menjadi arsitektur jaringan di mana titik fokusnya adalah informasi (atau konten atau data) yang diidentifikasi. Karena kapabilitas tembolok yang melekat pada node di ICN, ini dapat dilihat sebagai jaringan tembolok yang terhubung secara longgar, yang memiliki persyaratan unik untuk kebijakan tembolok. Namun,  tembolok konten di mana-mana menghadirkan tantangan terhadap perlindungan konten terhadap akses tidak sah, yang membutuhkan perhatian dan solusi ekstra. Tidak seperti server proxy, di ICN tembolok adalah solusi tingkat-jaringan. Oleh karena itu, status tembolok berubah dengan cepat dan tingkat kedatangan permintaan yang lebih tinggi; selain itu, ukuran tembolok yang lebih kecil semakin memberlakukan jenis persyaratan yang berbeda pada kebijakan penggusuran konten. Secara khusus, kebijakan penggusuran untuk ICN harus cepat dan ringan. Berbagai replikasi tembolok dan skema penggusuran untuk arsitektur dan aplikasi ICN yang berbeda telah diusulkan.

#### Kebijakan

##### Time aware least recently used (TLRU)
Time aware Least Recently Used (TLRU) adalah varian LRU yang dirancang untuk situasi di mana konten yang disimpan di tembolok memiliki masa pakai yang valid. Algoritma ini cocok untuk aplikasi tembolok jaringan, seperti Information-centric networking (ICN), Content Delivery Networks (CDNs) dan jaringan terdistribusi secara umum. TLRU memperkenalkan istilah baru: TTU (Time to Use). Karena stempel waktu berbasis lokalitas ini, TTU memberikan kontrol lebih kepada administrator lokal untuk mengatur penyimpanan jaringan. Dalam algoritma TLRU, ketika sebuah konten tiba, node tembolok menghitung nilai TTU lokal berdasarkan nilai TTU yang ditetapkan oleh penerbit konten. Nilai TTU lokal dihitung dengan menggunakan fungsi yang ditentukan secara lokal. Setelah nilai TTU lokal dihitung, penggantian konten dilakukan pada subset dari total konten yang disimpan di node tembolok. TLRU memastikan bahwa konten hidup yang kurang populer dan kecil harus diganti dengan konten yang masuk.

##### Least frequent recently used (LFRU)
Least Frequent Recently Used (LFRU) skema penggantian tembolok menggabungkan manfaat skema LFU dan LRU. LFRU cocok untuk aplikasi temblok 'dalam jaringan', seperti Information-centric networking (ICN), Content Delivery Networks (CDNs) dan jaringan terdistribusi secara umum. Di LFRU, tembolok dibagi menjadi dua partisi yang disebut partisi privileged dan unprivileged. Penggantian partisi privileged dilakukan sebagai berikut: LFRU mengeluarkan konten dari partisi unprivileged, mendorong konten dari partisi privileged ke partisi unprivileged, dan terakhir memasukkan konten baru ke dalam partisi privileged. Dalam prosedur di atas, LRU digunakan untuk partisi yang memiliki hak istimewa dan skema LFU yang diperkirakan (ALFU) digunakan untuk partisi yang tidak memiliki hak, karenanya disingkat LFRU. Ide dasarnya adalah untuk menyaring konten populer secara lokal dengan skema ALFU dan mendorong konten populer ke salah satu partisi privileged.

## Tembolok perangkat lunak

### Tembolok disk

Sementara tembolok CPU umumnya dikelola sepenuhnya oleh perangkat keras, berbagai perangkat lunak mengelola tembolok lainnya. Tembolok halaman di memori utama, yang merupakan contoh tembolok disk, dikelola oleh kernel sistem operasi.

Meskipun buffer disk, yang merupakan bagian terintegrasi dari hard disk drive, terkadang secara salah disebut sebagai "cache disk", fungsi utamanya adalah menulis urutan dan membaca prefetching. Hit cache berulang relatif jarang, karena ukuran buffer yang kecil dibandingkan dengan kapasitas drive. Namun, pengontrol disk kelas atas sering kali memiliki tembolok terpasang sendiri dari blok data drive hard disk.

Terakhir, drive hard disk lokal yang cepat juga dapat menyimpan informasi dalam tembolok pada perangkat penyimpanan data yang lebih lambat, seperti server jarak jauh (tembolok web) atau tape drive lokal atau jukebox optik; skema seperti itu adalah konsep utama manajemen penyimpanan hierarkis. Selain itu, solid-state drive (SSD) berbasis flash cepat dapat digunakan sebagai tembolok untuk drive hard disk media rotasi yang lebih lambat, yang berfungsi bersama sebagai hybrid drive atau solid-state hybrid drive (SSHD).

### Tembolok Web

Peramban web dan server proxy web menggunakan peramban web untuk menyimpan respons sebelumnya dari server web, seperti halaman web dan gambar. Tembolok web mengurangi jumlah informasi yang perlu dikirim ke seluruh jaringan, karena informasi yang sebelumnya disimpan dalam tembolok sering kali dapat digunakan kembali. Ini mengurangi bandwidth dan persyaratan pemrosesan server web, dan membantu meningkatkan daya tanggap bagi pengguna web.

Peramban web menggunakan tembolok web internal, tetapi beberapa penyedia layanan Internet (ISP) atau organisasi juga menggunakan tembolok server proxy, yang merupakan tembolok web yang digunakan bersama di antara semua pengguna jaringan itu.

Bentuk lain dari tembolok adalah P2P caching, di mana file yang paling dicari oleh aplikasi peer-to-peer disimpan dalam tembolok ISP untuk mempercepat transfer P2P. Demikian pula, ada padanan desentralisasi, yang memungkinkan komunitas untuk melakukan tugas yang sama untuk lalu lintas P2P, misalnya, Corelli.

### Memoisasi

Tembolok dapat menyimpan data yang dihitung sesuai permintaan daripada diambil dari penyimpanan pendukung. Memoization adalah teknik pengoptimalan yang menyimpan hasil panggilan fungsi yang menghabiskan sumber daya dalam tabel pencarian, memungkinkan panggilan berikutnya untuk menggunakan kembali hasil yang disimpan dan menghindari komputasi berulang. Ini terkait dengan metodologi desain algoritma pemrograman dinamis, yang juga dapat dianggap sebagai alat caching.

### Tembolok lainnya
Daemon DNS BIND membuat tembolok pemetaan nama domain ke alamat IP, seperti halnya pustaka resolver.

Operasi tulis-tayang umum terjadi saat beroperasi pada jaringan yang tidak dapat diandalkan (seperti LAN Ethernet), karena kerumitan protokol koherensi yang sangat besar yang diperlukan antara beberapa tembolok tulis-balik saat komunikasi tidak dapat diandalkan. Misalnya, tembolok halaman web dan tembolok sistem berkas jaringan client-side (seperti yang ada di NFS atau SMB) biasanya hanya dapat dibaca atau ditulis secara khusus untuk menjaga protokol jaringan tetap sederhana dan dapat diandalkan.

Mesin pencari juga sering membuat halaman web yang telah mereka indeks tersedia dari tembolok mereka. Misalnya, Google menyediakan link "Cache" di samping setiap hasil pencarian. Ini terbukti berguna ketika halaman web dari server web tidak dapat diakses untuk sementara atau selamanya.

Jenis caching lainnya adalah menyimpan hasil yang dihitung yang kemungkinan akan dibutuhkan lagi, atau memoization. Sebagai contoh, ccache adalah program yang menyimpan keluaran kompilasi, untuk mempercepat proses kompilasi nanti.

Database caching dapat secara substansial meningkatkan lewatan aplikasi database, misalnya dalam pemrosesan indeks, kamus data, dan subset data yang sering digunakan.

Sebuah distributed cache menggunakan host jaringan untuk memberikan skalabilitas, keandalan, dan kinerja untuk aplikasi. Host dapat ditempatkan bersama atau tersebar di berbagai wilayah geografis.

## Buffer vs. tembolok
Semantik dari "buffer" dan "tembolok" tidak jauh berbeda; meski begitu, ada perbedaan mendasar dalam maksud antara proses caching dan proses buffering.

Pada dasarnya, caching menyadari peningkatan kinerja untuk transfer data yang sedang ditransfer berulang kali. Sementara sistem caching mungkin menyadari peningkatan kinerja pada transfer awal (biasanya menulis) item data, peningkatan kinerja ini disebabkan oleh buffering yang terjadi dalam sistem caching.

Dengan tembolok baca, item data harus telah diambil dari lokasi penyimpanannya setidaknya satu kali agar item data dapat dibaca berikutnya untuk mewujudkan peningkatan kinerja karena dapat diambil dari penyimpanan perantara tembolok (lebih cepat) daripada lokasi penyimpanan data. Dengan tembolok tulis, peningkatan kinerja penulisan item data dapat direalisasikan pada penulisan pertama item data berdasarkan item data segera disimpan dalam penyimpanan perantara tembolok, menunda transfer item data ke penyimpanannya yang berada di tahap selanjutnya atau terjadi sebagai proses latar belakang. Berlawanan dengan buffering yang ketat, proses caching harus mematuhi protokol koherensi tembolok (berpotensi didistribusikan) untuk menjaga konsistensi antara penyimpanan perantara tembolok dan lokasi tempat data berada. Buffering, di sisi lain,

* mengurangi jumlah transfer untuk data baru lainnya di antara proses komunikasi, yang mengamortisasi overhead yang terlibat untuk beberapa transfer kecil melalui transfer yang lebih sedikit dan lebih besar,
* menyediakan perantara untuk mengomunikasikan proses yang tidak mampu melakukan transfer langsung antara satu sama lain, atau
* memastikan ukuran atau representasi data minimum yang diperlukan oleh setidaknya salah satu proses komunikasi yang terlibat dalam transfer.
Dengan implementasi caching yang khas, item data yang dibaca atau ditulis untuk pertama kali secara efektif di-buffer; dan dalam kasus penulisan, sebagian besar mewujudkan peningkatan kinerja untuk aplikasi tempat penulisan berasal. Selain itu, bagian dari protokol caching tempat penulisan individual ditangguhkan ke sekumpulan penulisan adalah bentuk buffering.

Sebuah buffer adalah lokasi memori sementara yang secara tradisional digunakan karena instruksi CPU tidak dapat secara langsung menangani data yang disimpan di perangkat periferal. Dengan demikian, memori yang dapat dialamatkan digunakan sebagai tahap perantara. Selain itu, penyangga seperti itu mungkin dapat dilakukan ketika blok data yang besar dirakit atau dibongkar (seperti yang disyaratkan oleh perangkat penyimpanan), atau ketika data dapat dikirimkan dalam urutan yang berbeda dari yang dihasilkannya. Selain itu, seluruh buffer data biasanya ditransfer secara berurutan (misalnya ke hard disk), sehingga buffering itu sendiri terkadang meningkatkan performa transfer atau mengurangi variasi atau jitter dari latensi transfer dibandingkan dengan caching yang tujuannya adalah untuk mengurangi latensi. Manfaat ini ada bahkan jika data yang di-buffer ditulis ke buffer sekali dan dibaca dari buffer sekali.

Sebuah tembolok juga meningkatkan kinerja transfer. Sebagian dari peningkatan tersebut juga berasal dari kemungkinan bahwa beberapa transfer kecil akan digabungkan menjadi satu blok besar. Namun, peningkatan kinerja utama terjadi karena ada kemungkinan besar bahwa data yang sama akan dibaca dari tembolok beberapa kali, atau bahwa data tertulis akan segera dibaca. Satu-satunya tujuan tembolok adalah untuk mengurangi akses ke penyimpanan yang lebih lambat. Tembolok juga biasanya merupakan lapisan abstraksi yang dirancang agar tidak terlihat dari perspektif lapisan tetangga.

## Lihat pula

* Prefetching tembolok
* Algoritme tembolok
* Koherensi tembolok
* Pewarnaan tembolok
* Hierarki tembolok
* Cache-oblivious algorithm
* Cache stampede
* Model bahasa tembolok
* Tembolok database
* Bit kotor
* Buffer disk
* Manifes tembolok dalam HTML5
* Aturan lima menit
* Tampilan terwujud
* Pipeline burst cache
* File sementara

## Referensi

## Bacaan lanjutan
* "Caching in the Distributed Environment"
* Detik: Cache, Tepatkah Disebut Tembolok?