Cache (komputasi)
Caching adalah istilah yang digunakan dalam ilmu komputer. Ide di balik cache (diucapkan "cash" /ˈkæʃ/ KASH ) sangat sederhana: Sering kali, mendapatkan hasil perhitungan sangat memakan waktu, jadi menyimpan hasil perhitungan adalah ide yang bagus. Dua jenis media penyimpanan yang digunakan: Yang satu biasanya cukup besar, tetapi mengaksesnya "lambat"; yang lainnya dapat diakses lebih cepat, tetapi umumnya berukuran kecil. Ide yang sangat mendasar di balik caching adalah menggunakan media yang cepat diakses untuk memiliki salinan data. Tidak ada perbedaan antara salinan, dan yang asli. Mengakses data asli mungkin membutuhkan waktu yang lama, atau mungkin mahal untuk dilakukan (misalnya: hasil dari masalah yang sulit yang membutuhkan waktu lama untuk dipecahkan). Untuk alasan ini, akan jauh "lebih murah" untuk hanya menggunakan salinan data dari cache. Dengan kata lain, cache adalah tempat penyimpanan sementara yang memiliki salinan data yang sering digunakan. Ketika salinan data berada dalam cache ini, akan lebih cepat untuk menggunakan salinan ini daripada mengambil ulang atau menghitung ulang data asli. Hal ini akan membuat waktu rata-rata yang diperlukan untuk mengakses data menjadi lebih singkat. Menempatkan nilai baru ke dalam cache sering kali berarti bahwa nilai yang lebih lama perlu diganti. Ada beberapa ide yang berbeda (biasanya disebut "strategi") tentang bagaimana memilih nilai yang akan diganti.
Buffer sangat mirip dengan cache. Hal ini berbeda karena klien yang mengakses data dalam buffer mengetahui adanya buffer; buffer dikelola oleh aplikasi. Dengan cache, klien yang mengakses data tidak perlu menyadari adanya cache.
Aplikasi komputer yang umum mengakses data dengan cara yang sangat mirip. Misalkan data terstruktur ke dalam "blok", yang dapat diakses secara individual. Ketika sebuah aplikasi mengakses sebuah blok, maka aplikasi tersebut juga sangat mungkin mengakses (atau mereferensikan) sebuah blok yang "dekat" dengan blok aslinya. Ini dikenal sebagai lokalitas referensi. Ada berbagai jenis "lokalitas" seperti itu. Lokalitas referensi adalah salah satu alasan mengapa cache bekerja dengan baik di banyak bidang komputasi.
Agar dapat bekerja dengan baik, cache berukuran kecil, dibandingkan dengan keseluruhan jumlah data. Semakin besar cache, semakin lama waktu yang dibutuhkan untuk mencari entri. Cache yang lebih besar juga lebih mahal untuk dibangun.
Bagaimana cara kerja cache
Cache adalah blok memori untuk menyimpan data yang kemungkinan besar akan digunakan lagi. CPU dan hard drive sering menggunakan cache, seperti halnya browser web dan server web.
Sebuah cache terdiri dari banyak entri, yang disebut pool. Setiap entri menyimpan datum (sedikit data) yang merupakan salinan dari datum di tempat lain. Cache biasanya menggunakan apa yang disebut backing store. Backing store lambat atau mahal untuk diakses, dibandingkan dengan cache. Sebuah cache disk menggunakan hard disk sebagai backing store, sebagai contoh. Setiap entri juga memiliki sedikit informasi yang melekat, yang disebut tag. Tag ini digunakan untuk menemukan lokasi di mana data asli disimpan.
Cache untuk membaca
Sebuah klien (CPU, web browser, sistem operasi) ingin mengakses sedikit data, yang diyakini berada di backing store, pertama-tama klien akan memeriksa untuk melihat apakah datum dapat ditemukan di cache. Jika data dapat ditemukan dalam cache, klien dapat menggunakannya dan tidak perlu menggunakan memori utama. Hal ini dikenal sebagai cache hit. Jadi, misalnya, program web browser mungkin memeriksa cache lokalnya pada disk untuk melihat apakah ia memiliki salinan lokal dari isi halaman web pada URL tertentu. Dalam contoh ini, URL adalah tag, dan isi halaman web adalah datum.
Situasi lain yang bisa terjadi adalah datum dengan tag tidak dapat ditemukan dalam cache. Ini dikenal sebagai cache miss. Datum perlu diambil dari backing store. Biasanya, datum tersebut disalin ke dalam cache, sehingga pada waktu berikutnya, datum tersebut tidak perlu lagi diambil dari backing store.
Cache hanya memiliki ukuran yang terbatas. Untuk memberikan ruang bagi entri yang sebelumnya tidak di-cache, entri cache lain mungkin perlu dihapus dari cache. Aturan khusus digunakan untuk menemukan entri yang sebaiknya dihapus. Aturan-aturan ini biasanya disebut Heuristik. Heuristik yang digunakan untuk menemukan entri disebut kebijakan penggantian. Aturan yang sangat sederhana yang digunakan disebut Least recently used (atau LRU). Ini hanya mengambil entri yang paling lama digunakan. Heuristik lainnya terdaftar di algoritma cache ...
Cache untuk menulis
Cache juga bisa digunakan untuk menulis data; manfaatnya adalah klien bisa melanjutkan operasinya setelah entri ditulis ke cache; tidak harus menunggu sampai entri ditulis ke backing store.
Namun demikian, entri harus ditulis ke backing store pada suatu titik waktu. Waktu ketika hal ini terjadi dikendalikan oleh kebijakan tulis.
Dalam cache write-through, setiap entri ditulis ke backing store dengan segera, dan juga disimpan dalam cache.
Pilihan lainnya adalah hanya menulis ke cache, dan menulis ke backing store kemudian. Ini dikenal sebagai write-back (atau write-behind) cache. Cache menandai entri yang belum ditulis ke backing store; tanda yang digunakan sering disebut sebagai dirty flag. Sebelum entri dihapus dari cache, entri tersebut ditulis ke backing store. Ini dikenal sebagai lazy write. Sebuah miss dalam write-back cache (yang membutuhkan blok untuk diganti dengan blok yang lain) akan sering membutuhkan dua akses memori: satu untuk mendapatkan datum yang dibutuhkan, dan satu lagi untuk menulis data yang diganti dari cache ke penyimpanan.
Kebijakan caching juga dapat mengatakan bahwa datum tertentu harus ditulis ke cache. Klien mungkin telah membuat banyak perubahan pada datum di cache. Setelah selesai, mungkin secara eksplisit memberitahu cache untuk menulis kembali datum tersebut.
Alokasi tanpa-tulis adalah kebijakan cache di mana hanya bacaan yang di-cache. Hal ini menghindari kebutuhan untuk write-back atau write-through caching. Penulisan dilakukan ke backing store sepanjang waktu.
Klien bukanlah aplikasi yang mengubah data di backing store. Jika data berubah di backing store, salinan di cache akan ketinggalan zaman, atau basi. Atau, ketika klien mengupdate data di cache, salinan data tersebut di cache lain akan menjadi basi. Ada protokol komunikasi khusus yang memungkinkan manajer cache untuk berbicara satu sama lain untuk menjaga data tetap bermakna. Ini dikenal sebagai protokol koherensi.
Diagram cache memori CPU
Memilih entri yang akan diganti
Cache itu kecil, dan akan penuh, atau hampir penuh, hampir sepanjang waktu. Jadi, ketika nilai baru ditambahkan, nilai yang lama perlu dihapus. Ada beberapa cara yang berbeda di mana pemilihan ini bisa dilakukan:
- Pertama masuk Pertama keluar: Cukup ganti entri yang ditambahkan ke cache paling lama yang lalu
- Paling akhir digunakan: Ide ini mirip dengan FIFO di atas, tetapi ketika entri digunakan, timestamp/umurnya diperbarui.
- Paling jarang digunakan: Lagi-lagi, mirip dengan kasus FIFO, alih-alih menggunakan timestamp, gunakan penghitung, yang bertambah setiap kali entri digunakan
- Pilih entri secara acak
Sejarah
Kata cache pertama kali digunakan dalam komputasi pada tahun 1967, ketika sebuah artikel ilmiah dipersiapkan untuk dipublikasikan di IBM Systems Journal. Artikel tersebut adalah tentang peningkatan baru dari memori di Model 85. Model 85 adalah komputer dari lini produk IBM System/360. Editor Jurnal menginginkan kata yang lebih baik untuk buffer berkecepatan tinggi, yang digunakan dalam artikel tersebut. Dia tidak mendapat masukan, dan menyarankan cache, dari bahasa Perancis cacher, yang berarti "menyembunyikan". Artikel tersebut diterbitkan pada awal tahun 1968, dan para penulisnya dihormati oleh IBM. Karya mereka disambut secara luas dan ditingkatkan. Cache segera menjadi penggunaan standar dalam literatur komputer.
Di mana cache digunakan
Cache CPU
Memori kecil pada atau dekat dengan chip CPU dapat dibuat lebih cepat daripada memori utama yang jauh lebih besar. Kebanyakan CPU sejak tahun 1980-an telah menggunakan satu atau lebih cache. CPU general-purpose modern di dalam komputer pribadi mungkin memiliki sebanyak setengah lusin. Setiap cache mungkin dikhususkan untuk bagian yang berbeda dari tugas mengeksekusi program.
Cache disk
CPU cache umumnya dikelola sepenuhnya oleh perangkat keras, cache lainnya dikelola oleh berbagai jenis perangkat lunak. Sistem operasi biasanya mengelola page cache dalam memori utama. Pengguna di luar ilmu komputer biasanya menyebut cache ini sebagai memori virtual. Cache ini dikelola oleh kernel sistem operasi.
Hard drive modern memiliki buffer disk. Ini kadang-kadang disebut "disk cache", tetapi ini salah. Fungsi utama buffer ini adalah untuk mengatur penulisan disk, dan untuk mengatur pembacaan. Hit cache berulang jarang terjadi, karena buffer sangat kecil dibandingkan dengan ukuran hard drive.
Hard disk lokal lebih cepat dibandingkan dengan perangkat penyimpanan lainnya, seperti server jarak jauh, tape drive lokal, atau jukebox optik. Menggunakan hard disk lokal sebagai cache adalah konsep utama manajemen penyimpanan hirarkis.
Cache web
Browser web dan server proxy web menggunakan cache untuk menyimpan respons sebelumnya dari server web, seperti halaman web. Cache web mengurangi jumlah informasi yang perlu ditransmisikan melalui jaringan. Informasi yang sebelumnya disimpan dalam cache sering kali dapat digunakan kembali. Hal ini mengurangi bandwidth dan persyaratan pemrosesan server web, dan membantu meningkatkan daya tanggap bagi pengguna web.
Browser web modern menggunakan cache web built-in, tetapi beberapa penyedia layanan internet atau organisasi juga menggunakan server proxy caching. Ini adalah cache web yang dibagikan di antara semua pengguna jaringan itu.
Mesin pencari juga sering membuat halaman web yang telah diindeks tersedia dari cache mereka. Misalnya, Google menyediakan tautan "Cached" di samping setiap hasil pencarian. Hal ini berguna ketika halaman web untuk sementara tidak dapat diakses dari server web.
Caching dengan jaringan yang tidak dapat diandalkan
Operasi write-through umum terjadi di jaringan yang tidak dapat diandalkan (seperti LAN Ethernet). Protokol yang digunakan untuk memastikan data dalam cache tulis masuk akal ketika beberapa cache tulis digunakan sangat kompleks, dalam kasus seperti itu.
Misalnya, cache halaman web dan cache sistem file jaringan sisi klien (seperti yang ada di NFS atau SMB) biasanya hanya-baca atau tulis-melalui untuk menjaga protokol jaringan tetap sederhana dan dapat diandalkan.
Perbedaan antara buffer dan cache
Buffer dan cache tidak saling eksklusif; keduanya juga sering digunakan bersama-sama. Alasan mengapa keduanya digunakan berbeda. Buffer adalah lokasi dalam memori yang secara tradisional digunakan karena instruksi CPU tidak dapat secara langsung menangani data yang tersimpan dalam perangkat periferal. Memori komputer digunakan sebagai penyimpan perantara.
Selain itu, buffer seperti itu mungkin layak ketika blok data yang besar dirakit atau dibongkar (seperti yang diperlukan oleh perangkat penyimpanan), atau ketika data dapat dikirimkan dalam urutan yang berbeda dari yang dihasilkannya. Juga seluruh buffer data biasanya ditransfer secara berurutan (misalnya ke hard disk), sehingga buffering itu sendiri kadang-kadang meningkatkan kinerja transfer. Manfaat ini ada bahkan jika data buffer ditulis ke buffer sekali dan dibaca dari buffer sekali.
Cache juga meningkatkan performa transfer. Sebagian dari peningkatan yang sama berasal dari kemungkinan bahwa beberapa transfer kecil akan digabungkan ke dalam satu blok besar. Tetapi peningkatan kinerja utama terjadi karena ada kemungkinan besar datum yang sama akan dibaca dari cache beberapa kali, atau data yang ditulis akan segera dibaca. Satu-satunya tujuan Cache adalah untuk mengurangi akses ke penyimpanan yang lebih lambat. Cache juga biasanya merupakan lapisan abstraksi yang didesain untuk tidak terlihat dari perspektif lapisan tetangga. Dengan begitu, aplikasi atau klien mungkin tidak menyadari bahwa ada cache.
Pertanyaan dan Jawaban
T: Apa itu caching?
J: Caching adalah istilah yang digunakan dalam ilmu komputer yang mengacu pada praktik menyimpan salinan data yang sering digunakan untuk mengaksesnya lebih cepat daripada mengambil ulang atau menghitung ulang data asli.
T: Bagaimana cara kerja caching?
J: Caching bekerja dengan menggunakan dua jenis media penyimpanan, satu yang biasanya cukup besar tetapi lambat untuk diakses, dan satu lagi yang dapat diakses jauh lebih cepat tetapi umumnya lebih kecil. Gagasan di balik caching adalah menggunakan media yang cepat untuk menyimpan salinan data sehingga mengakses data asli membutuhkan waktu lebih sedikit atau lebih murah.
T: Apa yang dimaksud dengan buffer?
J: Buffer mirip dengan cache dalam hal menyimpan salinan data untuk akses yang lebih cepat, namun dengan buffer, klien yang mengakses data tahu bahwa ada buffer dan dikelola oleh aplikasi sedangkan dengan cache, klien tidak perlu menyadari adanya cache.
T: Apa yang dimaksud dengan lokalitas referensi?
J: Lokalitas referensi berarti bahwa ketika aplikasi mengakses blok tertentu dari data terstruktur, mereka juga cenderung mengakses blok lain yang dekat dengan yang awalnya diakses. Hal ini membantu cache bekerja dengan baik karena cache biasanya kecil dibandingkan dengan semua data yang tersedia.
T: Mengapa cache yang lebih besar membutuhkan waktu lebih lama untuk mencari entri?
J: Cache yang lebih besar membutuhkan waktu lebih lama karena mengandung lebih banyak informasi yang tersimpan dan oleh karena itu membutuhkan lebih banyak waktu untuk pencarian. Mereka juga lebih mahal karena memerlukan lebih banyak sumber daya untuk penyimpanan.
T: Bagaimana lokalitas bisa membantu membuat cache bekerja lebih baik?
J: Lokalitas membantu membuat cache bekerja lebih baik karena ketika aplikasi mengakses blok tertentu dari data terstruktur, mereka kemungkinan juga akan membutuhkan blok terdekat lainnya yang kemudian dapat dengan cepat diambil dari cache daripada harus mengambilnya dari tempat lain atau menghitung ulang lagi.