Selepas menyertai syarikat itu, saya faham apa itu Cache
forsword
Thing sebenarnya seperti ini. Saya melihat maklumat berikut :

Tugas saya ialah menjadikan peristiwa cache ini dikira secara normal, tetapi yang penting, saya tidak tahu apa maksud misses
、loads
ini sama sekali.
Saya hanya tahu bahawa kedua-duanya adalah cache, tetapi nama ini sangat serupa, apakah perbezaannya?
Atas sebab ini, saya merasakan bahawa saya perlu belajar tentang cache, dan pemahaman saya tentang cache, prestasi, dsb. bermula dari ini.
Berikut ialah beberapa pengetahuan konsep asas yang saya rumuskan semasa saya mempelajari cache, saya percaya ia akan membantu orang yang tidak memahami lapisan atau cache yang mendasari.
Pada asasnya, saya akan membimbing semua orang dalam bentuk soalan dan jawapan, kerana saya pernah melaluinya dengan banyak soalan.
1. Apakah itu Cache?
Pertama sekali, kita perlu tahu bahawa CPU tidak mengakses memori secara langsung, tetapi perlu melalui Cache terlebih dahulu.
Punca: Data dalam CPU disimpan dalam daftar Kepantasan mengakses daftar adalah sangat cepat, tetapi kapasiti daftar adalah kecil. Kapasiti memori adalah besar, tetapi kelajuannya perlahan. Untuk menyelesaikan masalah kelajuan dan kapasiti antara CPU dan memori, Cache diperkenalkan.
Cache terletak di antara CPU dan memori utama Apabila CPU mengakses memori utama, ia mula-mula mengakses Cache untuk melihat jika terdapat data sedemikian dalam Cache mengembalikannya ke CPU jika tiada data dalam Cache , dan kemudian mengakses memori utama.
.
Sebab: Cache akses CPU juga sangat pantas. Tetapi kita tidak boleh mencapai keserasian lengkap antara kelajuan dan kapasiti Jika kelajuan CPU mengakses cache adalah sama dengan kelajuan CPU mengakses daftar, ia bermakna bahawa cache adalah sangat cepat, tetapi kapasiti adalah sangat kecil kapasiti cache yang kecil tidak mencukupi untuk memenuhi keperluan kami, jadi Cache pelbagai peringkat telah diperkenalkan. Cache berbilang peringkat membahagikan Cache kepada berbilang peringkat L1, L2, L3, dsb.
Dalam urutan kelajuan, pesanannya ialah L1>L2>L3.
Mengikut kapasiti penyimpanan, pesanan adalah L3>L2>L1. L1 paling hampir dengan CPU dan L3 paling hampir dengan ingatan utama.
Biasanya L1 dibahagikan kepada cache arahan (ICache) dan cache data (<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: " operator mono consolas monaco menlo monospace break-all rgb>DCache
), dan cache L1 adalah peribadi kepada CPU, dan setiap CPU mempunyai cache L1.

ICache
)和data cache(DCache
),并且L1 cache是cpu私有的,每个cpu都有一个L1 cache。
3、“命中”和“缺失”是什么意思?
命中:CPU要访问的数据在cache中有缓存,称为“命中”,即cache hit
缺失:CPU要访问的数据在cache中没有缓存,称为“缺失”,即cache miss
cache hit
🎜🎜🎜missing🎜: Data yang akan diakses oleh CPU tidak dicache dalam cache, iaitu dipanggil "hilang", iaitu, cache miss
🎜4. Apakah talian cache?
garis cache
: tinggi kelajuan Cache line, membahagikan cache kepada banyak blok yang sama, dan saiz setiap blok dipanggil baris cache
. cache line
:高速缓存行,将cache平均分成相等的很多块,每一个块大小称之为cache line
。
cache line也是cache和主存之间数据传输的最小单位.
当CPU试图load一个字节数据的时候,如果cache缺失,那么cache控制器会从主存中一次性的load cache line大小的数据到cache中。例如,cache line大小是8字节。CPU即使读取一个byte,在cache缺失后,cache会从主存中load 8字节填充整个cache line。
CPU访问cache时的地址编码,通常由tag、index和offset三部分组成:

tag
(标记域):用于判断cache line缓存的数据的地址是否和处理器寻址地址一致。
- index
(索引域):用于索引和查找地址在高速缓存中的哪一行
-
offset
garisan cache juga merupakan unit terkecil pemindahan data antara cache dan memori utamaApabila CPU cuba memuatkan satu bait data, jika cache tiada, pengawal cache akan memuatkan data bersaiz baris cache daripada memori utama ke dalam cache pada satu masa. Sebagai contoh, saiz baris cache ialah 8 bait. Walaupun CPU membaca satu bait, selepas cache hilang, cache akan memuatkan 8 bait daripada memori utama untuk mengisi keseluruhan baris cache.
tag
(medan tag)🎜: digunakan untuk menentukan baris cache cache Sama ada alamat data konsisten dengan alamat alamat pemproses. 🎜🎜🎜🎜-index
(Medan indeks) 🎜: Digunakan untuk mengindeks dan mencari baris mana dalam cache alamat berada dalam 🎜offset
🎜 (offset) 🎜: Offset dalam talian cache. Kandungan baris cache boleh ditangani dengan perkataan atau bait 🎜🎜🎜🎜Hubungan antara baris cache dan tag, indeks, offset, dan lain-lain adalah seperti yang ditunjukkan dalam rajah: 🎜5. Adakah cache mengakses alamat maya atau alamat fizikal?
Kita tahu bahawa CPU mengakses memori bukan secara langsung, tetapi CPU mengeluarkan alamat maya, yang kemudiannya ditukar menjadi alamat fizikal oleh MMU, dan kemudian data diambil dari memori mengikut alamat fizikal . Jadi adakah cache mengakses alamat maya atau alamat fizikal?
J: Tidak semestinya. Ia boleh sama ada alamat maya, alamat fizikal, atau gabungan alamat maya dan fizikal.
Oleh kerana cache mempunyai pelbagai kaedah organisasi dalam reka bentuk perkakasan:
VIVT
Cache mayaVIVT
虚拟高速缓存:虚拟地址的index,虚拟地址的tag。PIPT
物理高速缓存:物理地址的index,物理地址的tag。VIPT
物理标记的虚拟高速缓存:虚拟地址的index,物理地址的tag。
6、什么是歧义和别名问题?
歧义(
homonyms
: indeks alamat maya, teg alamat maya.
PIPT code><strong style="color: black;">Cache fizikal 🎜: indeks alamat fizikal, teg alamat fizikal. </strong>
🎜🎜
VIPT code><strong style="color: black;">Cache maya teg fizikal 🎜: indeks alamat maya, teg alamat fizikal. </strong>
homonim
)🎜: Alamat maya yang sama sepadan dengan alamat fizikal yang berbeza🎜Alias (alias
)alias
):多个虚拟地址映射到了相同的物理地址(多个虚拟地址被称为别名)。
例如上述VIVT方式就会存在别名问题,那VIVT、PIPT和VIPT那个方式更好呢?
PIPT
其实是比较理想的,因为index和tag都使用了物理地址,软件层面不需要任何维护就能避免歧义和别名问题。
VIPT
的tag使用了物理地址,所以不存在歧义问题,但index是虚拟地址,所以可能也存在别名问题。
而VIVT
: banyak alamat maya dipetakan ke alamat fizikal yang sama (berbilang alamat maya dipanggil alias). Sebagai contoh, kaedah VIVT yang dinyatakan di atas akan mempunyai masalah alias yang lebih baik, VIVT, PIPT atau VIPT?
PIPT
sebenarnya lebih ideal. Kerana kedua-dua indeks dan teg menggunakan alamat fizikal, Tiada penyelenggaraan diperlukan pada peringkat perisian untuk mengelakkan kekaburan dan masalah alias.
DanVIPT
teg menggunakan fizik alamat, jadi tidak ada masalah kekaburan, tetapi indeks adalah alamat maya, jadi mungkin juga ada masalah alias.
VIVT
cara, kekaburan dan masalah alias wujud. Sebenarnya, yang asasnya digunakan dalam perkakasan sekarang ialah PIPT atau VIPT. VIVT terlalu banyak masalah, ia sudah menjadi sejarah dan tiada siapa yang akan menggunakannya. Di samping itu, kaedah PIVT tidak wujud, kerana ia hanya mempunyai kekurangan dan tiada kelebihan.
Penyusunan cache, serta isu kesamaran dan alias, adalah kandungan yang agak besar. Di sini anda hanya perlu tahu bahawa alamat yang diakses oleh cache boleh menjadi alamat maya, alamat fizikal, atau gabungan alamat maya dan alamat fizikal. Dan kaedah organisasi yang berbeza akan mempunyai masalah kekaburan dan alias.
🎜🎜🎜7. Strategi peruntukan cache? 🎜🎜 🎜🎜🎜🎜 merujuk kepada cara cache diperuntukkan apabila kehilangan cache berlaku. 🎜🎜Baca peruntukan: Apabila CPU
baca data, berlakucache
tiada, ini Dalam semua kes, garis cache
Cache daripada Data dibaca dari ingatan utama. CPU
读数据时,发生cache
缺失,这种情况下都会分配一个cache line
缓存从主存读取的数据。默认情况下,cache
都支持读分配。
写分配:当CPU写数据发生cache
缺失时,才会考虑写分配策略。当我们不支持写分配的情况下,写指令只会更新主存数据,然后就结束了。当支持写分配的时候,我们首先从主存中加载数据到cache line
中(相当于先做个读分配动作),然后会更新cache line
Secara lalai, cache
semua sokongan bacaan mengedarkan .
Tulis peruntukan: berlaku apabila CPU menulis data : rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all ;color: rgb(239, 112, 96);"> Strategi peruntukan tulis hanya akan dipertimbangkan apabila cache tiada. Apabila kami tidak menyokong peruntukan tulis, arahan tulis hanya akan mengemas kini data memori utama dan kemudian tamat. Apabila peruntukan tulis disokong, kami mula-mula memuatkan data dari memori utama ke baris cache
(bersamaan dengan melakukan peruntukan baca dahulu), dan kemudian kemas kini data dalam baris cache
.
8. Strategi kemas kini cache?
merujuk kepada cara operasi tulis harus mengemas kini data apabila cache mencecah.
🎜Tulis laluan🎜: Apabila CPU melaksanakan arahan kedai dan cache mencecah, kami mengemas kini data dalam cache dan mengemas kini data dalam memori utama. 🎜Data dalam cache dan ingatan utama sentiasa konsisten🎜. 🎜Tulis kembali : dikemas kini apabila CPU
执行store
指令并在cache
命中时,我们只更新cache
中的数据。并且每个cache line
中会有一个bit
位记录数据是否被修改过,称之为dirty bit
。我们会将dirty bit
置位。主存中的数据只会在cache line
被替换或者显示的clean
beroperasi. Oleh itu, data dalam memori utama mungkin merupakan data yang tidak diubah suai, manakala data yang diubah suai terletak dalam cache . Data dalam cache dan ingatan utama mungkin tidak konsisten.
Akhirnya
Mengenai cache, serta TLB, MESI, model ketekalan memori, dll., ia adalah sesuatu yang memerlukan pemendakan dan ringkasan untuk benar-benar menguasai.
Tetapi ramai orang mungkin tidak menggunakannya Hanya apabila ia berkaitan dengan isu prestasi dan apabila anda perlu meningkatkan kadar hit cache, anda akan tahu kepentingan pengetahuan ini.
Mengenai pengetahuan yang dibincangkan dalam artikel ini, saya merumuskan peta minda tentang pengetahuan asas cache:
Atas ialah kandungan terperinci Selepas menyertai syarikat itu, saya faham apa itu Cache. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Perkara itu sebenarnya seperti ini Pada masa itu, ketua saya memberi saya tugas pemantauan prestasi perkakasan Semasa proses menggunakan perf, saya memasukkan senarai perf arahan dan saya melihat maklumat berikut: Tugas saya adalah untuk membolehkan peristiwa cache ini. untuk dikira secara normal. Tetapi intinya, saya tidak tahu apa maksud kehilangan dan beban ini.

使用cache可以提高计算机运行速度这是因为Cache缩短了CPU的等待时间。Cache是位于CPU和主存储器DRAM之间,规模较小,但速度很高的存储器。Cache的功能是提高CPU数据输入输出的速率;Cache容量小但速度快,内存速度较低但容量大,通过优化调度算法,系统的性能会大大改善。

Cache dipanggil memori cache Ia adalah memori berkapasiti kecil berkelajuan tinggi antara unit pemprosesan pusat dan memori utama Ia biasanya terdiri daripada memori tempatan jenis ini untuk mengurangkan atau menghapuskan jurang antara CPU dan memori Kesan perbezaan kelajuan antara mereka terhadap prestasi sistem. Kapasiti cache kecil tetapi pantas, kelajuan memori rendah tetapi kapasiti besar Dengan mengoptimumkan algoritma penjadualan, prestasi sistem akan bertambah baik.

Prakata Caching secara berkesan boleh meningkatkan prestasi dan kestabilan sistem dengan menyimpan data yang kerap diakses dalam ingatan, mengurangkan tekanan pada sumber data asas seperti pangkalan data. Saya rasa semua orang telah menggunakannya lebih kurang dalam projek mereka, dan projek kami tidak terkecuali Walau bagaimanapun, apabila saya menyemak kod syarikat baru-baru ini, penulisannya sangat bodoh dan rendah adalah seperti berikut: publicUsergetById(Stringid) {Useruser=cache. getUser();if(user!=null){returnuser;}//Dapatkan pengguna daripada pangkalan data=loadFromDB(id);cahce.put(id,user);returnu

Berikut ialah tutorial untuk caching proksi terbalik nginx: Pasang nginx: sudoaptupdatesudoaptinstallnginx Konfigurasikan proksi terbalik: Buka fail konfigurasi nginx: sudonano/etc/nginx/nginx.conf Tambah konfigurasi berikut dalam blok http untuk mendayakan caching: http{...proxy_cache_path /var/cache/nginxlevels=1:2keys_zone=my_cache:10mmax_size=10ginactive=60muse_temp_path=off;proxy_cache

5 pilihan untuk cache caching nginx 1. Salah satu cache tradisional (404) Kaedah ini adalah untuk mengarahkan ralat 404 nginx ke bahagian belakang, dan kemudian gunakan proxy_store untuk menyimpan halaman yang dikembalikan oleh bahagian belakang. Konfigurasi: Lokasi/{root/home/html/;#Direktori rumah tamat tempoh1d;#Masa tamat tempoh halaman web error_page404=200/fetch$request_uri;#404 Dihalakan ke direktori /fetch} Lokasi/fetch/{#404 Diarahkan hereinternal ;#Menunjukkan bahawa direktori ini tidak boleh diakses secara langsung secara luaran

Ciri-ciri cache: Satu atau dua peringkat memori berkelajuan tinggi, berkapasiti kecil di antara CPU dan memori utama Maklumat itu hilang secara semula jadi apabila komputer dimatikan. Ciri-ciri ROM: ia hanya boleh membaca data dari memori, tetapi tidak boleh menulis maklumat ke dalamnya Data masih akan wujud selepas komputer dimatikan. Ciri-ciri ram: ia boleh membaca data dari memori dan menulis maklumat ke memori; ia digunakan untuk menyimpan arahan, program dan data yang diperlukan untuk menjalankan program secara semula jadi hilang apabila komputer dimatikan;

Butirannya adalah seperti berikut: 1. Mari kita bincangkan tentang apa itu cache berkod keras? Sebelum mempelajari SpringCache, saya sering menggunakan caching dengan cara berkod keras. Mari kita ambil contoh praktikal untuk meningkatkan kecekapan pertanyaan maklumat pengguna, kami menggunakan caching untuk maklumat pengguna Kod sampel adalah seperti berikut: @AutowireprivateUserMapperuserMapper;//Query users publicUsergetUserById(LonguserId){//Define cache; keyStringcacheKey= "userId_