Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Ringkaskan pengetahuan yang berkaitan dengan cache cakera Linux

Ringkaskan pengetahuan yang berkaitan dengan cache cakera Linux

藏色散人
藏色散人ke hadapan
2021-10-29 16:16:431908semak imbas

Lajur tutorial sistem linux berikut akan memperkenalkan dan meringkaskan pengetahuan yang berkaitan tentang cache cakera Linux Saya harap ia akan membantu rakan yang memerlukan!

Prakata

Baru-baru ini saya mengalami kegagalan dalam talian yang berkaitan dengan cakera, jadi saya ingin meringkaskan pengetahuan tentang cache cakera Linux yang saya tidak tahu banyak tentang sebelum ini.

Secara umum, mungkin terdapat dua sebab untuk kemunculan cache cakera: yang pertama ialah kelajuan mengakses cakera jauh lebih perlahan daripada kelajuan mengakses memori Kelajuan capaian boleh dipertingkatkan dengan caching kandungan cakera dalam memori; yang kedua ialah Menurut prinsip lokaliti program, apabila data telah diakses, ia berkemungkinan boleh diakses semula dalam tempoh yang singkat, jadi caching kandungan cakera dalam memori boleh meningkatkan kelajuan program berjalan.

Prinsip lokaliti

Prinsip lokaliti program: Sesuatu program mempamerkan lokaliti apabila dilaksanakan, iaitu, dalam tempoh masa, pelaksanaan keseluruhan program adalah terhad kepada program bahagian tertentu daripada. Sejajar dengan itu, ruang storan yang diakses melalui pelaksanaan juga terhad kepada kawasan ingatan tertentu Secara khusus, lokaliti biasanya mempunyai dua bentuk: lokaliti temporal dan lokaliti spatial.

Lokasi sementara: lokasi memori yang dirujuk sekali akan dirujuk berkali-kali pada masa hadapan.

Lokasi ruang: Jika lokasi memori dirujuk, maka lokasi berdekatannya juga akan dirujuk pada masa hadapan.

Cache Halaman

Untuk mengurangkan operasi IO pada cakera, sistem Linux akan cache kandungan cakera terbuka, dan lokasi cache adalah memori fizikal, dan kemudian Tukar akses cakera kepada akses memori, meningkatkan kelajuan program dengan berkesan. Kaedah caching Linux menggunakan memori fizikal untuk cache kandungan pada cakera, yang dipanggil cache halaman.

Cache halaman terdiri daripada halaman fizikal dalam ingatan, dan kandungannya sepadan dengan blok fizikal pada cakera. Saiz cache halaman akan dilaraskan secara dinamik mengikut saiz memori percuma sistem Ia boleh mengembangkan saiz dengan menduduki memori, dan juga boleh mengecilkan dirinya untuk melegakan tekanan penggunaan memori.

Sebelum kemunculan mekanisme memori maya, sistem pengendalian menggunakan siri cache blok Walau bagaimanapun, selepas kemunculan memori maya, sistem pengendalian menguruskan IO dengan butiran yang lebih besar, jadi mekanisme cache halaman telah diterima pakai. Cache halaman adalah berdasarkan mekanisme caching berorientasikan fail.

Membaca cache halaman

Apabila sistem Linux membaca fail, ia akan terlebih dahulu membaca kandungan fail daripada cache halaman Jika cache halaman tidak wujud, sistem akan Mula-mula, kandungan fail dibaca dari cakera dan dikemas kini ke dalam cache halaman, dan kemudian kandungan fail dibaca dari cache halaman dan dikembalikan.

Proses umum adalah seperti berikut:

  • Proses memanggil fungsi perpustakaan dibaca untuk memulakan permintaan fail baca

  • Kernel menyemak senarai fail yang terbuka, memanggil antara muka baca yang disediakan oleh sistem fail

  • untuk mencari inod yang sepadan dengan fail, dan kemudian mengira halaman khusus untuk dibaca

  • melalui Inode mencari cache halaman yang sepadan 1) Jika nod cache halaman dipukul, kandungan fail dikembalikan secara langsung 2) Jika tiada cache halaman yang sepadan, pengecualian kesalahan halaman (kesalahan halaman) akan dihasilkan. Pada masa ini, sistem akan mencipta cache halaman kosong baharu dan membaca kandungan fail daripada cakera, mengemas kini cache halaman, dan kemudian ulangi langkah 4

  • baca fail dan kembalikan

Jadi, semua kandungan fail yang dibaca, tidak kira sama ada cache halaman pada mulanya dipukul, akhirnya akan datang terus daripada cache halaman.

Menulis ke cache halaman

Oleh kerana kewujudan cache halaman, apabila proses memanggil tulis, kemas kini pada fail hanya ditulis pada cache halaman fail , dan kemudian tandakan halaman yang sepadan sebagai kotor, dan keseluruhan proses telah berakhir. Kernel Linux secara berkala akan menulis halaman kotor kembali ke cakera dan kemudian mengosongkan bendera kotor.

Memandangkan operasi tulis hanya menulis perubahan pada cache halaman, proses tidak akan disekat sehingga cakera IO berlaku Jika komputer ranap pada masa ini, perubahan dalam operasi tulis mungkin tidak berlaku pada cakera. Oleh itu, untuk beberapa operasi tulis dengan keperluan yang ketat, seperti sistem data, adalah perlu untuk secara aktif memanggil fsync dan operasi lain untuk menyegerakkan perubahan pada cakera tepat pada masanya. Operasi baca adalah berbeza Baca biasanya menyekat sehingga proses membaca data Untuk mengurangkan kelewatan operasi membaca, sistem Linux masih menggunakan teknologi "pra-baca", iaitu, semasa membaca data dari cakera. kernel akan Baca lebih banyak halaman ke dalam cache halaman.

Benang Tulis Balik

Tulis balik cache halaman dilengkapkan oleh utas yang berasingan dalam kernel Benang tulis balik akan melakukan tulis balik dalam 3 situasi berikut.

  • apabila memori bebas berada di bawah ambang. Apabila memori kosong tidak mencukupi, sebahagian daripada cache perlu dikeluarkan Memandangkan hanya halaman tidak kotor boleh dikeluarkan, semua halaman kotor perlu ditulis semula ke cakera untuk mengubahnya menjadi halaman bersih yang boleh dikitar semula.

  • Apabila masa pemprosesan halaman kotor dalam ingatan melebihi ambang. Ini adalah untuk memastikan halaman yang kotor tidak kekal dalam ingatan selama-lamanya, mengurangkan risiko kehilangan data.

  • Apabila proses pengguna memanggil penyegerakan dan panggilan sistem fsync. Ini adalah untuk menyediakan proses pengguna dengan kaedah tulis balik paksa untuk memenuhi senario penggunaan dengan keperluan tulis balik yang ketat.

Pelaksanaan urutan tulis balik

名称 版本 说明
bdflush 2.6版本以前 bdflush 内核线程在后台运行,系统中只有一个 bdflush 线程,当内存消耗到特定阀值以下时,bdflush 线程被唤醒。kupdated 周期性的运行,写回脏页。 但是整个系统仅仅只有一个 bdflush 线程,当系统回写任务较重时,bdflush 线程可能会阻塞在某个磁盘的I/O上,导致其他磁盘的I/O回写操作不能及时执行。
pdflush 2.6版本引入 pdflush 线程数目是动态的,取决于系统的I/O负载。它是面向系统中所有磁盘的全局任务的。 但是由于 pdflush 是面向所有磁盘的,所以有可能出现多个 pdflush 线程全部阻塞在某个拥塞的磁盘上,同样导致其他磁盘的I/O回写不能及时执行。
flusher线程 2.6.32版本以后引入 flusher 线程的数目不是唯一的,同时flusher线程不是面向所有磁盘的,而是每个flusher线程对应一个磁盘

Kitar semula cache halaman

Logik penggantian cache halaman dalam Linux ialah pelaksanaan LRU yang diubah suai, juga dikenali sebagai strategi rantaian dua. Tidak seperti sebelum ini, Linux tidak lagi mengekalkan satu senarai terpaut LRU, tetapi mengekalkan dua senarai terpaut: senarai terpaut aktif dan senarai terpaut tidak aktif. Halaman dalam senarai aktif dianggap "panas" dan tidak akan ditukar, manakala halaman pada senarai tidak aktif boleh ditukar keluar. Halaman dalam senarai aktif mesti berada dalam senarai tidak aktif apabila ia diakses. Kedua-dua senarai terpaut dikekalkan oleh peraturan pseudo-LRU: halaman ditambah dari ekor dan dikeluarkan dari kepala, sama seperti baris gilir. Kedua-dua senarai terpaut perlu seimbang - jika senarai terpaut aktif menjadi terlalu besar dan melebihi senarai terpaut tidak aktif, maka halaman kepala senarai terpaut aktif akan dialihkan kembali ke senarai terpaut tidak aktif, di mana ia boleh dikitar semula semula. Strategi senarai pautan berganda menyelesaikan dilema hanya satu akses dalam algoritma LRU tradisional. Dan lebih mudah untuk melaksanakan semantik pseudo-LRU. Kaedah senarai pautan berganda ini juga dipanggil LRU/2. Yang lebih biasa ialah n senarai terpaut, jadi ia dipanggil LRU/n.

[Kajian yang disyorkan: "tutorial video linux"]

Ringkasan

Kegagalan dalam talian yang dihadapi kali ini Sebab asas ialah fail sementara digunakan untuk caching dalam logik perniagaan Jika fail sementara dipadamkan dalam tempoh masa yang singkat selepas ia dibuat, operasi pada fail akan dilakukan dalam cache halaman dan tidak akan ditulis semula kepada. cakera itu. Apabila program menghadapi masalah dan memperlahankan tindak balasnya, masa kemandirian fail sementara menjadi lebih lama, yang boleh menyebabkan ia ditulis semula ke cakera, menyebabkan tekanan cakera yang berlebihan dan menjejaskan keseluruhan sistem.

Atas ialah kandungan terperinci Ringkaskan pengetahuan yang berkaitan dengan cache cakera Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.im. Jika ada pelanggaran, sila hubungi admin@php.cn Padam