Koherensi dan Sinkronisasi Cache
Pada bab ini, kita akan membahas protokol koherensi cache untuk mengatasi masalah inkonsistensi multicache.
Masalah Koherensi Cache
Dalam sistem multiprosesor, ketidakkonsistenan data dapat terjadi di antara level yang berdekatan atau dalam level yang sama dari hierarki memori. Misalnya, cache dan memori utama mungkin memiliki salinan objek yang sama yang tidak konsisten.
Karena beberapa prosesor beroperasi secara paralel, dan beberapa cache secara independen mungkin memiliki salinan berbeda dari blok memori yang sama, ini menciptakan cache coherence problem. Cache coherence schemes membantu menghindari masalah ini dengan mempertahankan status seragam untuk setiap blok data yang di-cache.
Misalkan X adalah elemen data bersama yang telah direferensikan oleh dua prosesor, P1 dan P2. Pada awalnya, tiga salinan X konsisten. Jika prosesor P1 menulis data baru X1 ke dalam cache, dengan menggunakanwrite-through policy, salinan yang sama akan segera ditulis ke dalam memori bersama. Dalam kasus ini, terjadi inkonsistensi antara memori cache dan memori utama. Ketika sebuahwrite-back policy digunakan, memori utama akan diperbarui ketika data yang dimodifikasi dalam cache diganti atau tidak valid.
Secara umum, ada tiga sumber masalah inkonsistensi -
- Berbagi data yang dapat ditulis
- Proses migrasi
- Aktivitas I / O
Protokol Bus Snoopy
Protokol Snoopy mencapai konsistensi data antara memori cache dan memori bersama melalui sistem memori berbasis bus. Write-invalidate dan write-update kebijakan digunakan untuk menjaga konsistensi cache.
Dalam hal ini, kami memiliki tiga prosesor P1, P2, dan P3 yang memiliki salinan elemen data 'X' yang konsisten di memori cache lokalnya dan di memori bersama (Gambar-a). Prosesor P1 menulis X1 dalam memori cache-nya menggunakanwrite-invalidate protocol. Jadi, semua salinan lainnya dibatalkan melalui bus. Ini dilambangkan dengan 'I' (Gambar-b). Blok yang tidak divalidasi juga dikenal sebagaidirty, yaitu mereka tidak boleh digunakan. Ituwrite-update protocolmemperbarui semua salinan cache melalui bus. Dengan menggunakanwrite back cache, salinan memori juga diperbarui (Gambar-c).
Peristiwa dan Tindakan Cache
Peristiwa dan tindakan berikut terjadi pada eksekusi akses memori dan perintah pembatalan -
Read-miss- Ketika prosesor ingin membaca sebuah blok dan tidak ada di cache, terjadi kesalahan baca. Ini memulai abus-readoperasi. Jika tidak ada salinan kotor, maka memori utama yang memiliki salinan yang konsisten, memasok salinan ke memori cache yang meminta. Jika salinan kotor ada di memori cache jarak jauh, cache itu akan menahan memori utama dan mengirim salinan ke memori cache yang meminta. Dalam kedua kasus tersebut, salinan cache akan memasuki status valid setelah kesalahan pembacaan.
Write-hit - Jika salinan kotor atau reservednegara bagian, penulisan dilakukan secara lokal dan status baru kotor. Jika status baru valid, perintah write-invalidate disiarkan ke semua cache, membuat salinannya tidak valid. Saat memori bersama ditulis, status yang dihasilkan disimpan setelah penulisan pertama ini.
Write-miss- Jika prosesor gagal menulis di memori cache lokal, salinan harus berasal dari memori utama atau dari memori cache jarak jauh dengan blok kotor. Ini dilakukan dengan mengirimkan fileread-invalidateperintah, yang akan membatalkan semua salinan cache. Kemudian salinan lokal diperbarui dengan keadaan kotor.
Read-hit - Baca-hit selalu dilakukan di memori cache lokal tanpa menyebabkan transisi status atau menggunakan bus snoopy untuk pembatalan.
Block replacement- Salinan yang kotor harus ditulis kembali ke memori utama dengan metode penggantian blok. Namun, jika salinan dalam status valid atau cadangan atau tidak valid, tidak ada penggantian yang akan dilakukan.
Protokol Berbasis Direktori
Dengan menggunakan jaringan multistage untuk membangun multiprosesor besar dengan ratusan prosesor, protokol cache snoopy perlu dimodifikasi agar sesuai dengan kemampuan jaringan. Penyiaran menjadi sangat mahal untuk dilakukan dalam jaringan multistage, perintah konsistensi dikirim hanya ke cache yang menyimpan salinan blok. Ini adalah alasan untuk pengembangan protokol berbasis direktori untuk multiprosesor yang terhubung ke jaringan.
Dalam sistem protokol berbasis direktori, data yang akan dibagikan ditempatkan di direktori umum yang menjaga koherensi di antara cache. Di sini, direktori bertindak sebagai filter tempat prosesor meminta izin untuk memuat entri dari memori utama ke memori cache-nya. Jika entri diubah, direktori memperbaruinya atau membuat cache lain tidak valid dengan entri itu.
Mekanisme Sinkronisasi Perangkat Keras
Sinkronisasi adalah bentuk komunikasi khusus di mana alih-alih kontrol data, informasi dipertukarkan antara proses komunikasi yang berada di prosesor yang sama atau berbeda.
Sistem multiprosesor menggunakan mekanisme perangkat keras untuk mengimplementasikan operasi sinkronisasi tingkat rendah. Kebanyakan multiprosesor memiliki mekanisme perangkat keras untuk menerapkan operasi atom seperti operasi baca, tulis, atau baca-ubah-tulis memori untuk mengimplementasikan beberapa primitif sinkronisasi. Selain operasi memori atom, beberapa interupsi antar prosesor juga digunakan untuk tujuan sinkronisasi.
Koherensi Cache di Mesin Memori Bersama
Mempertahankan koherensi cache adalah masalah dalam sistem multiprosesor ketika prosesor berisi memori cache lokal. Ketidakkonsistenan data antara cache yang berbeda dengan mudah terjadi di sistem ini.
Area perhatian utama adalah -
- Berbagi data yang dapat ditulis
- Proses migrasi
- Aktivitas I / O
Berbagi data yang dapat ditulis
Ketika dua prosesor (P1 dan P2) memiliki elemen data yang sama (X) di cache lokalnya dan satu proses (P1) menulis ke elemen data (X), karena cache tersebut adalah cache lokal write-through P1, memori utamanya adalah juga diperbarui. Sekarang ketika P2 mencoba membaca elemen data (X), ia tidak menemukan X karena elemen data dalam cache P2 telah kedaluwarsa.
Proses migrasi
Pada tahap pertama, cache P1 memiliki elemen data X, sedangkan P2 tidak memiliki apa pun. Proses pada P2 pertama kali menulis pada X dan kemudian bermigrasi ke P1. Sekarang, proses mulai membaca elemen data X, tetapi karena prosesor P1 memiliki data yang kedaluwarsa, proses tidak dapat membacanya. Jadi, proses pada P1 menulis ke elemen data X dan kemudian bermigrasi ke P2. Setelah migrasi, proses di P2 mulai membaca elemen data X tetapi menemukan versi X yang kedaluwarsa di memori utama.
Aktivitas I / O
Seperti yang diilustrasikan pada gambar, perangkat I / O ditambahkan ke bus dalam arsitektur multiprosesor dua prosesor. Pada awalnya, kedua cache berisi elemen data X. Saat perangkat I / O menerima elemen X baru, perangkat I / O tersebut menyimpan elemen baru secara langsung di memori utama. Sekarang, saat P1 atau P2 (anggap P1) mencoba membaca elemen X, salinannya sudah usang. Jadi, P1 menulis ke elemen X. Sekarang, jika perangkat I / O mencoba mentransmisikan X, salinannya sudah usang.
Uniform Memory Access (UMA)
Arsitektur Uniform Memory Access (UMA) berarti memori bersama sama untuk semua prosesor di sistem. Kelas populer dari mesin UMA, yang biasa digunakan untuk server (file-), disebut Symmetric Multiprocessors (SMP). Di SMP, semua sumber daya sistem seperti memori, disk, perangkat I / O lainnya, dll. Dapat diakses oleh prosesor dengan cara yang seragam.
Akses Memori Non-Seragam (NUMA)
Dalam arsitektur NUMA, ada beberapa cluster SMP yang memiliki jaringan internal tidak langsung / bersama, yang terhubung dalam jaringan pengiriman pesan yang dapat diskalakan. Jadi, arsitektur NUMA secara logis membagi arsitektur memori yang didistribusikan secara fisik.
Dalam mesin NUMA, pengontrol-cache dari sebuah prosesor menentukan apakah referensi memori lokal ke memori SMP atau jarak jauh. Untuk mengurangi jumlah akses memori jarak jauh, arsitektur NUMA biasanya menerapkan prosesor caching yang dapat menyimpan data jarak jauh ke dalam cache. Tetapi ketika cache terlibat, koherensi cache perlu dipertahankan. Jadi sistem ini juga dikenal sebagai CC-NUMA (Cache Coherent NUMA).
Cache Only Memory Architecture (COMA)
Mesin COMA mirip dengan mesin NUMA, dengan satu-satunya perbedaan bahwa memori utama mesin COMA bertindak sebagai cache yang dipetakan langsung atau set-asosiatif. Blok data di-hash ke suatu lokasi di cache DRAM sesuai dengan alamatnya. Data yang diambil dari jarak jauh sebenarnya disimpan di memori utama lokal. Selain itu, blok data tidak memiliki lokasi rumah tetap, mereka dapat dengan bebas bergerak di seluruh sistem.
Arsitektur COMA sebagian besar memiliki jaringan penerusan pesan hierarkis. Sakelar di pohon seperti itu berisi direktori dengan elemen data sebagai sub-pohonnya. Karena data tidak memiliki lokasi rumah, data harus dicari secara eksplisit. Ini berarti bahwa akses jarak jauh memerlukan traversal di sepanjang sakelar di pohon untuk mencari data yang diperlukan di direktori mereka. Jadi, jika sakelar di jaringan menerima beberapa permintaan dari subpohonnya untuk data yang sama, itu menggabungkannya menjadi satu permintaan yang dikirim ke induk sakelar. Ketika data yang diminta kembali, sakelar mengirimkan banyak salinannya ke subpohonnya.
COMA versus CC-NUMA
Berikut adalah perbedaan antara COMA dan CC-NUMA.
COMA cenderung lebih fleksibel daripada CC-NUMA karena COMA secara transparan mendukung migrasi dan replikasi data tanpa memerlukan OS.
Mesin COMA mahal dan rumit untuk dibuat karena mereka membutuhkan perangkat keras manajemen memori non-standar dan protokol koherensi lebih sulit untuk diterapkan.
Akses jarak jauh di COMA sering kali lebih lambat daripada di CC-NUMA karena jaringan pohon perlu dilintasi untuk menemukan data.