Write-back vs Write-Through caching?

93

Pemahaman saya adalah bahwa perbedaan utama antara kedua metode tersebut adalah bahwa dalam metode "tulis-melalui" data ditulis ke memori utama melalui cache segera, sedangkan dalam "menulis kembali" data ditulis dalam "waktu terakhir".

Kita masih harus menunggu memori di "waktu yang terakhir" jadi Apa manfaat "menulis melalui"?

Naftaly
sumber
@EricWang Saya pikir maksud Anda write backmemiliki kinerja yang lebih baik?
wlnirvana
@wlnirvana Ya, Anda benar, itu kesalahan klerikal saya. Saya akan menghapusnya, dan memasukkan komentar baru di sini untuk menghindari penyesatan di masa mendatang.
Eric Wang
6
Sederhananya, write backmemiliki kinerja yang lebih baik, karena menulis ke memori utama jauh lebih lambat daripada menulis ke cache cpu, dan datanya mungkin pendek selama (berarti mungkin berubah lagi lebih cepat, dan tidak perlu memasukkan versi lama ke dalam memori). Ini rumit, tetapi lebih canggih, sebagian besar memori di cpu modern menggunakan kebijakan ini.
Eric Wang
Saya melihat bahwa jawaban penjelasan telah diberikan. Saya menyarankan Anda untuk melihat tag Write-Allocate, Write-NoAllocate setelah membahas algoritma write-back.
Çağlayan DÖKME
Jawaban atas pertanyaan Anda adalah bahwa dengan write-through caching, ketika menulis dalam blok yang sama, hanya diperlukan satu penulisan ke memori utama. Lihat jawaban saya untuk detailnya.
qwr

Jawaban:

111

Manfaat write-through ke memori utama adalah menyederhanakan desain sistem komputer. Dengan write-through, memori utama selalu memiliki salinan baris terbaru. Jadi ketika pembacaan selesai, memori utama selalu dapat membalas dengan data yang diminta.

Jika write-back digunakan, terkadang data terbaru berada di cache prosesor, dan terkadang di memori utama. Jika data berada dalam cache prosesor, maka prosesor tersebut harus menghentikan memori utama dari membalas permintaan baca, karena memori utama mungkin memiliki salinan data yang sudah basi. Ini lebih rumit daripada menulis melalui.

Selain itu, tulis-tayang dapat menyederhanakan protokol koherensi cache karena tidak memerlukan status Modify . The Modify negara catatan bahwa cache harus menulis kembali baris cache sebelum membatalkan atau evicts baris. Dalam penulisan tembolok baris cache selalu dapat dibatalkan tanpa menulis kembali karena memori telah memiliki salinan baris terbaru.

Satu hal lagi - pada perangkat lunak arsitektur tulis-balik yang menulis ke register I / O yang dipetakan memori harus mengambil langkah ekstra untuk memastikan bahwa penulisan segera dikirim dari cache. Jika tidak, tulisan tidak akan terlihat di luar inti sampai garis dibaca oleh prosesor lain atau garis tersebut dikeluarkan.

Craig S. Anderson
sumber
7
Untuk I / O yang dipetakan memori, alamat tersebut biasanya dipetakan sebagai tidak di-cache. Write through juga dapat digunakan untuk meningkatkan keandalan (mis., Jika L1 hanya memiliki perlindungan paritas dan L2 memiliki ECC). Write through juga lebih populer untuk cache yang lebih kecil yang menggunakan no-write-alokasi (mis., Kesalahan tulis tidak mengalokasikan blok ke cache, berpotensi mengurangi permintaan untuk kapasitas L1 dan bandwidth L2 read / L1) karena sebagian besar perangkat keras persyaratan untuk menulis sudah ada untuk menulis seperti itu.
Paul A. Clayton
1
apakah mungkin untuk memeriksa apakah metode cache di inti saya adalah write-back atau write through?
ArtificiallyIntelligence
4
Mungkin menyesatkan untuk mengatakan bahwa menulis kembali lebih kompleks karena prosesor harus menghentikan memori utama untuk membalas permintaan baca. Lebih dari itu, cache melacak data apa yang merupakan data (tidak selaras dengan memori utama) dan apa yang tidak dengan menggunakan "bit kotor", sehingga dimungkinkan untuk tidak memeriksa memori utama sama sekali.
steviejay
@Shaowu "lshw" perintah yang menunjukkan kemampuan cache seperti "asynchronous internal write-back"
mug896
Saya masih tidak mengerti apa langkah sebenarnya yang digunakan dalam menulis balik, tetapi hanya tahu ini rumit ... Bisakah Anda memberikan sumber daya / detail lebih lanjut tentang itu?
qwerty9898
10

Mari kita lihat ini dengan bantuan sebuah contoh. Misalkan kita memiliki cache yang dipetakan langsung dan kebijakan tulis kembali digunakan. Jadi kami memiliki bit yang valid, bit kotor, tag, dan bidang data di baris cache. Misalkan kita memiliki operasi: tulis A (di mana A dipetakan ke baris pertama cache).

Apa yang terjadi adalah bahwa data (A) dari prosesor ditulis ke baris pertama cache. Bit yang valid dan bit tag ditetapkan. Bit kotor disetel ke 1.

Bit kotor hanya menunjukkan bahwa baris cache pernah ditulis sejak terakhir kali dibawa ke cache!

Sekarang misalkan operasi lain dilakukan: baca E (di mana E juga dipetakan ke baris cache pertama)

Karena kami memiliki cache yang dipetakan langsung, baris pertama dapat dengan mudah diganti dengan blok E yang akan dibawa dari memori. Tetapi karena blok yang terakhir dituliskan ke dalam baris (blok A) belum ditulis ke dalam memori (ditandai dengan bit kotor), maka pengontrol cache akan terlebih dahulu mengeluarkan penulisan kembali ke memori untuk mentransfer blok A ke memori, kemudian itu akan menggantikan baris dengan blok E dengan mengeluarkan operasi baca ke memori. bit kotor sekarang disetel ke 0.

Jadi kebijakan tulis kembali tidak menjamin bahwa pemblokiran tersebut akan sama di memori dan baris cache yang terkait. Namun, setiap kali baris akan diganti, tulis kembali dilakukan pada awalnya.

Kebijakan write through adalah kebalikannya. Menurutnya, memori akan selalu memiliki data yang up-to-date. Artinya, jika blok cache ditulis, memori juga akan ditulis sesuai. (tidak menggunakan potongan kotor)

Rajat
sumber
7

mungkin artikel ini bisa membantu anda link disini

Write-through: Penulisan dilakukan secara sinkron baik ke cache maupun ke penyimpanan cadangan.

Write-back (atau Write-behind): Penulisan dilakukan hanya ke cache. Blok cache yang dimodifikasi ditulis kembali ke penyimpanan, tepat sebelum diganti.

Write-through: Ketika data diperbarui, itu ditulis ke cache dan penyimpanan back-end. Mode ini mudah dioperasikan tetapi lambat dalam penulisan data karena data harus ditulis ke cache dan penyimpanan.

Write-back: Ketika data diperbarui, itu hanya ditulis ke cache. Data yang dimodifikasi ditulis ke penyimpanan ujung belakang hanya saat data dihapus dari cache. Mode ini memiliki kecepatan tulis data yang cepat tetapi data akan hilang jika listrik mati sebelum data yang diperbarui ditulis ke penyimpanan.

Shengmin Zhao
sumber
3

Write-back dan write-through mendeskripsikan kebijakan ketika hit tulis terjadi, yaitu ketika cache memiliki informasi yang diminta. Dalam contoh ini, kami menganggap satu prosesor sedang menulis ke memori utama dengan cache.

Write-through: Informasi ditulis ke cache dan memori, dan penulisan selesai jika keduanya telah selesai. Keuntungannya karena lebih sederhana untuk diterapkan, dan memori utama selalu konsisten (sinkron) dengan cache (untuk kasus uniprocessor - jika beberapa perangkat lain mengubah memori utama, maka kebijakan ini tidak cukup), dan kesalahan pembacaan tidak pernah menghasilkan penulisan ke memori utama. Kerugian yang jelas adalah bahwa setiap klik tulis harus melakukan dua penulisan, salah satunya mengakses memori utama yang lebih lambat.

Write-back: Informasi ditulis ke satu blok di cache. Blok cache yang dimodifikasi hanya ditulis ke memori ketika diganti (pada dasarnya, penulisan malas ). Bit khusus untuk setiap blok cache, bit kotor , menandai apakah blok cache telah dimodifikasi atau belum saat berada di cache. Jika bit kotor tidak diset, blok cache "bersih" dan kesalahan penulisan tidak harus menulis blok ke memori.

Keuntungannya adalah penulisan dapat terjadi pada kecepatan cache, dan jika menulis dalam blok yang sama, hanya diperlukan satu penulisan ke memori utama (ketika blok sebelumnya diganti). Kerugiannya adalah protokol ini lebih sulit untuk diterapkan, memori utama tidak konsisten (tidak sinkron) dengan cache, dan pembacaan yang mengakibatkan penggantian dapat menyebabkan penulisan blok kotor ke memori utama.

Kebijakan untuk kehilangan menulis dirinci di tautan pertama saya.

Protokol ini tidak menangani kasus dengan banyak prosesor dan banyak cache, seperti yang umum pada prosesor modern. Untuk ini, diperlukan mekanisme koherensi cache yang lebih rumit . Cache tulis-tayang memiliki protokol yang lebih sederhana karena penulisan ke cache segera tercermin dalam memori.

Sumber daya yang bagus:

qwr
sumber
0

Write-Back adalah cara yang lebih kompleks dan membutuhkan Cache Coherence Protocol (MOESI) yang rumit tetapi itu sepadan karena membuat sistem cepat dan efisien.

Satu-satunya keuntungan dari Write-Through adalah membuat penerapannya sangat sederhana dan tidak diperlukan protokol koherensi cache yang rumit.

Gaurav Toshniwal
sumber
1
WT masih membutuhkan protokol koherensi. Penyimpanan dari satu inti masih perlu membuat salinan di cache lain tidak valid sehingga mereka tidak terus membaca data lama tanpa batas. RMW atom membutuhkan beberapa dukungan khusus. Semua ini lebih mudah dengan WT, menurut saya, tetapi koherensi yang diperlukan masih agak rumit.
Peter Cordes
Atau mungkin Anda berbicara tentang sistem inti tunggal dengan hierarki cache L1 / L2 (dan mungkin lebih). Dalam hal ini, Anda tidak benar-benar harus menggunakan MESI / MOESI untuk cache dalam yang diambil melalui cache luar, kecuali Anda ingin mendukung DMA yang koheren cache yang dapat mengakses arah cache paling luar. Tetapi Anda masih membutuhkan koherensi untuk penulisan DMA untuk membatalkan cache bagian dalam.
Peter Cordes
1
Protokol koherensi cache hanya diperlukan jika perlu ada dukungan untuk beberapa cache / prosesor atau sesuatu yang mempengaruhi memori seperti DMA. Write-through memiliki kelebihan bahkan untuk sistem prosesor tunggal, yaitu kecepatan tulis.
qwr
Untuk DMA, OS dapat secara eksplisit membersihkan cache setelah I / O. Menjadi perangkat lunak kurang efisien.
qwr