Dalam sistem multiprosesor kontemporer, biasanya memiliki satu atau dua tingkat cache yang
terkait dengan setiap prosesor. Organisasi ini sangat penting untuk dicapai kinerja yang wajar.
Namun, hal itu menciptakan masalah yang dikenal sebagai cache. masalah koherensi. Inti dari
masalahnya adalah ini: Beberapa salinan sama data dapat ada di berbagai cache secara
bersamaan, dan jika prosesor diizinkan untuk memperbarui salinan mereka sendiri secara bebas,
tampilan memori yang tidak konsisten dapat terjadi. Di Bab 4 kita mendefinisikan dua kebijakan
penulisan umum:
• Tulis kembali: Operasi penulisan biasanya dibuat hanya untuk cache. Memori utama hanya
dimutakhirkan ketika garis cache yang sesuai dihapus dari cache.
• Write through: Semua operasi penulisan dibuat ke memori utama dan juga ke cache,
memastikan bahwa memori utama selalu valid.
Jelas bahwa kebijakan balas dendam dapat mengakibatkan ketidakkonsistenan. Jika dua
cache berisi baris yang sama, dan baris diperbarui dalam satu cache, cache lainnya akan tanpa
sadar memiliki nilai yang tidak valid. Selanjutnya membaca ke jalur produksi yang tidak valid
hasil tidak valid. Bahkan dengan kebijakan write-through, ketidakkonsistenan dapat terjadi
kecuali cache lainnya memantau lalu lintas memori atau menerima pemberitahuan langsung dari
memperbarui.
Pada bagian ini, kami akan secara singkat mensurvei berbagai pendekatan untuk
koherensi cache masalah dan kemudian fokus pada pendekatan yang paling banyak digunakan:
MESI (dimodifikasi / eksklusif / dibagi / tidak valid) protokol. Versi protokol ini digunakan pada
implementasi Pentium 4 dan PowerPC.
Untuk setiap protokol koherensi cache, tujuannya adalah untuk membiarkan lokal yang
baru saja digunakan variabel masuk ke cache yang sesuai dan tetap di sana melalui banyak
membaca dan menulis, saat menggunakan protokol untuk menjaga konsistensi dari variabel
bersama yang mungkin berada di beberapa cache sekaligus. Pendekatan koherensi cache
umumnya telah dibagi menjadi pendekatan perangkat lunak dan perangkat keras. Beberapa
implementasi mengadopsi strategi yang melibatkan elemen perangkat lunak dan perangkat keras.
Namun demikian,klasifikasi ke dalam pendekatan perangkat lunak dan perangkat keras masih
bersifat instruktif dan umumnya digunakan dalam mensurvei strategi koherensi cache.
Pendekatan yang paling sederhana adalah untuk mencegah variabel data yang dibagi di-
cache Ini terlalu konservatif, karena struktur data bersama mungkin eksklusif digunakan selama
beberapa periode dan mungkin hanya dapat dibaca secara efektif selama periode lainnya.
Pendekatan yang lebih efisien menganalisis kode untuk menentukan periode aman
untuk variabel bersama. Kompiler kemudian memasukkan instruksi ke dalam kode yang
dihasilkan untuk menegakkan koherensi cache selama periode kritis. Sejumlah teknik telah
dikembangkan untuk melakukan analisis dan untuk menegakkan hasil; Lihat [LILJ93] dan
[STEN90] untuk survei.
Selain itu, pendekatan ini transparan bagi programmer dan kompiler, mengurangi
beban pengembangan perangkat lunak. Skema perangkat keras berbeda dalam sejumlah hal,
termasuk di mana keadaannya informasi tentang jalur data diadakan, bagaimana informasi itu
diatur, di mana koherensi ditegakkan, dan mekanisme penegakannya. Secara umum, skema
perangkat keras dapat dibagi menjadi dua kategori: protokol direktori dan protokol snoopy.
Ketika tindakan pembaruan dilakukan pada baris cache bersama, itu harus diumumkan
ke semua cache lainnya dengan mekanisme siaran. Setiap pengontrol cache dapat melakukannya
“Mengintip” di jaringan untuk mengamati notifikasi yang disiarkan ini, dan bereaksi demikian.
Protokol Snoopy idealnya cocok untuk multiprosesor berbasis bus, karena bus bersama
menyediakan sarana sederhana untuk penyiaran dan pengintaian. Namun, karena salah satu
tujuan dari penggunaan cache lokal adalah untuk menghindari akses bus, perawatan harus
diambil bahwa peningkatan lalu lintas bus yang diperlukan untuk penyiaran dan pengintaian
tidak membatalkan keuntungan dari penggunaan cache lokal. Dua pendekatan dasar untuk
protokol snoopy telah dieksplorasi: write invalidate dan menulis pembaruan (atau menulis
siaran).
Dengan protokol write-invalidate, di sana dapat terdiri dari beberapa pembaca tetapi
hanya satu penulis pada satu waktu. Awalnya, sebuah garis dapat dibagikan di antara beberapa
cache untuk tujuan membaca. Ketika salah satu dari cache ingin melakukan menulis ke baris,
pertama-tama mengeluarkan pemberitahuan yang membatalkan baris itu di baris lain cache,
membuat baris eksklusif untuk cache penulisan. Setelah garis eksklusif, maka memiliki prosesor
dapat membuat penulisan lokal yang murah sampai beberapa prosesor lain membutuhkannya
baris yang sama.
Tidak satu pun dari kedua pendekatan ini yang lebih unggul dari yang lain dalam
semua keadaan.Kinerja tergantung pada jumlah cache lokal dan pola memori membaca dan
menulis. Beberapa sistem menerapkan protokol adaptif yang digunakan baik mekanisme write-
invalidate maupun write-update.
Protokol MESI
Untuk memberikan konsistensi cache pada SMP, cache data seringkali mendukung protokol
dikenal sebagai MESI. Untuk MESI, cache data mencakup dua bit status per tag, sehingga
setiap baris dapat dalam satu dari empat negara:
• Dimodifikasi: Baris dalam cache telah dimodifikasi (berbeda dari utama
memori) dan hanya tersedia di cache ini.
• Eksklusif: Baris dalam cache sama dengan yang ada di memori utama dan tidak
hadir dalam cache lainnya.
• Dibagi-pakai: Baris dalam cache sama dengan yang ada di memori utama dan mungkin
hadir dalam cache lain.
• Tidak Valid: Baris dalam cache tidak berisi data yang valid.
Tabel 17.1 merangkum arti dari empat negara. Gambar 17.6 menampilkan a
diagram keadaan untuk protokol MESI. Ingatlah bahwa setiap baris cache memiliki bit state-nya
sendiri dan karenanya realisasi dari diagram state-nya sendiri. Gambar 17.6a menunjukkan
transisi yang terjadi karena tindakan yang diprakarsai oleh prosesor yang terpasang ke cache ini.
Gambar 17.6b menunjukkan transisi yang terjadi karena peristiwa yang sedang terjadi
mengintai di bus umum. Presentasi diagram keadaan terpisah ini untuk prosesor- tindakan yang
diprakarsai dan diprakarsai bus membantu untuk memperjelas logika protokol MESI.
Kapan saja garis cache berada dalam satu keadaan. Jika acara selanjutnya dari terlampir
prosesor, maka transisi ditentukan oleh Gambar 17.6a dan jika acara berikutnya adalah dari bus,
transisi ditentukan oleh Gambar 17.6b. Mari kita lihat transisi ini lebih detail.
BACA LEWATKAN Ketika terjadi kesalahan baca dalam cache lokal, prosesor
memulai a memori baca untuk membaca garis memori utama yang berisi alamat yang hilang. Itu
Prosesor memasukkan sinyal pada bus yang memberitahukan semua unit prosesor / cache
lainnya mengintip transaksi. Ada sejumlah hasil yang mungkin:
• Jika satu cache lainnya memiliki salinan bersih (tidak dimodifikasi sejak dibaca dari memori)
baris dalam keadaan eksklusif, ia mengembalikan sinyal yang menunjukkan bahwa ia berbagi ini
baris. Prosesor yang merespons kemudian mentransisikan status salinannya dari eksklusif untuk
dibagikan, dan prosesor yang memulai membaca baris dari memori utama dan mentransisikan
baris dalam cache dari yang tidak valid ke yang dibagikan.
• Jika satu atau lebih cache memiliki salinan baris yang bersih dalam status bersama, masing-
masing mereka memberi sinyal bahwa ia berbagi garis. Prosesor yang memulai membaca baris
dan mentransisikan baris dalam cache dari tidak sah menjadi dibagikan.
• Jika satu cache lain memiliki salinan yang dimodifikasi dari baris, maka cache itu memblokir
memori membaca dan menyediakan baris ke cache yang meminta melalui shared bis. Cache
yang merespons kemudian mengubah jalurnya dari diubah menjadi dibagikan.1 baris yang
dikirim ke cache yang meminta juga diterima dan diproses oleh memori controller, yang
menyimpan blok dalam memori.
• Jika tidak ada cache lain yang memiliki salinan baris (bersih atau diubah), maka tidak ada
sinyal dikembalikan. Prosesor yang memulai membaca garis dan mentransisikan garis di
dalamnya cache dari tidak valid ke eksklusif.
BACA HIT Ketika hit baca terjadi pada baris yang saat ini ada di cache lokal, the
Prosesor hanya membaca item yang diperlukan. Tidak ada perubahan negara: Negara tetap
dimodifikasi, dibagikan, atau eksklusif.
Pertama, beberapa cache lain mungkin memiliki salinan baris ini yang dimodifikasi
(status = modifikasi). Dalam hal ini, prosesor yang diperingatkan memberi sinyal prosesor yang
memulai prosesor yang lain memiliki salinan baris yang dimodifikasi. Prosesor yang memulai
menyerahkan bus dan menunggu. Prosesor lain mendapatkan akses ke bus, menulis cache yang
dimodifikasi.
kembali ke memori utama, dan mengubah status jalur cache menjadi tidak valid (karena
prosesor yang memulai akan memodifikasi baris ini).
Selanjutnya, memulai prosesor lagi akan mengeluarkan sinyal ke bus RWITM dan
kemudian membaca baris dari memori utama, modifikasi baris di cache, dan tandai baris di
keadaan yang dimodifikasi. Skenario kedua adalah bahwa tidak ada cache lain yang memiliki
salinan yang dimodifikasi dari yang diminta baris. Dalam hal ini, tidak ada sinyal yang
dikembalikan, dan prosesor yang memulai mulai membaca di baris dan memodifikasinya.
Sementara itu, jika satu atau lebih cache memiliki salinan bersih dari baris dalam status bersama,
masing-masing cache membuat salinannya tidak valid, dan jika satu cache memiliki salinan garis
yang bersih dalam status eksklusif, salinannya tidak valid.
MENULIS HIT Ketika hit menulis terjadi pada baris saat ini di cache lokal, efeknya
tergantung pada kondisi saat itu dari baris itu di cache lokal:
Strateginya adalah memperluas protokol MESI (atau protokol koherensi cache apa pun)
ke cache L1. Dengan demikian, setiap baris dalam cache L1 termasuk bit untuk menunjukkan
negara. Intinya, tujuannya adalah sebagai berikut: untuk setiap baris yang ada di keduanya L2
cache dan L1 cache yang sesuai, status garis L1 harus melacak status garis L2. Cara sederhana
untuk melakukan ini adalah untuk mengadopsi kebijakan write-through di Internet L1 cache;
dalam hal ini write through adalah untuk L2 cache dan bukan ke memori. Kebijakan L1 write-
through memaksa setiap modifikasi ke jalur L1 ke L2 cache dan karenanya membuatnya terlihat
oleh cache L2 lainnya. Penggunaan L1 ditulis melalui
kebijakan mensyaratkan bahwa konten L1 harus merupakan bagian dari konten L2. Ini pada
gilirannya menunjukkan bahwa asosiatif cache L2 harus sama atau lebih besar daripada asosiasi
L1. Kebijakan menulis L1 digunakan dalam IBM
S / 390 SMP.
Jika cache L1 memiliki kebijakan write-back, hubungan antara kedua cache lebih
kompleks. Ada beberapa pendekatan untuk menjaga koherensi. Untuk contoh, pendekatan yang
digunakan pada Pentium II dijelaskan secara rinci dalam [SHAN05].