-
free 的輸出包含物理記憶體 mem 和交換分割槽的具體用法,如總記憶體、已用記憶體、快取、可用記憶體等。 其中 cache 是緩衝區和快取的總和。
buffer 和 cache 的區別在於:
簡單來說,緩衝區是磁碟資料的快取,而快取是檔案資料的快取,用於讀取和寫入請求。
緩衝區和快取快取分別快取磁碟和檔案系統的讀取和寫入資料。
磁碟是一種塊裝置,可以劃分為不同的分割槽; 在分割槽上建立乙個檔案系統,並將其掛載到可以讀取和寫入檔案的目錄中。
其實在Linux中,“一切都是檔案”,而文中提到的“檔案”是普通檔案,磁碟是塊裝置檔案。
在讀取和寫入公共檔案時,它們會經過檔案系統,檔案系統負責與磁碟進行互動。 在讀寫磁碟或分割槽時,會跳過檔案系統,這稱為“裸IO”。 這兩種讀寫方法使用的快取是不同的,這就是本文提到的快取和緩衝區的區別。
-
兩者都是RAM中的資料。 簡單來說,緩衝區即將寫入磁碟,快取是從磁碟讀取的。
快取是儲存讀取的資料,如果在重新讀取時命中(找到它需要的資料),則不要讀取硬碟,如果它沒有命中讀取的硬碟。 資料根據讀取頻率進行組織,將最常閱讀的內容放在最容易找到的位置,不再讀取的內容會不斷排名靠後,直到它被刪除。
快取實際上不是緩衝檔案,而是緩衝塊,它們是磁碟 IO 操作的最小單位(在 Linux 中,它們通常為 1kb)。 這樣,目錄、超級塊、其他檔案系統筆記本資料、非檔案系統磁碟資料都可以被緩衝。
如果快取的大小是固定的,那麼快取太大就不是乙個好主意,因為它會使可用記憶體太小而無法進行交換操作(這也很慢)。 為了最有效地利用實際記憶體,Linux 會自動使用所有可用記憶體作為緩衝區,當程式需要更多記憶體時,它會自動減小緩衝區的大小。
緩衝區基於磁碟讀寫設計,集中分散的寫入操作,減少磁碟碎片和硬碟的重複搜尋,從而提高系統效能。 Linux 有乙個守護程式,可以定期清空緩衝區內容(即寫入磁碟),也可以通過 sync 命令手動清除。 下面是乙個示例:
我這裡有乙個ext2 USB快閃記憶體驅動器,裡面有乙個3m ***,但是USB快閃記憶體驅動器的燈沒有跳動,過了一會兒(或手動進入同步)USB快閃記憶體驅動器的燈跳了。 解除安裝裝置會清空緩衝區,因此有時解除安裝裝置需要幾秒鐘。
緩衝區由各種程序分配,並由程序和系統一起管理。 它用於輸入佇列等操作,作為需要讀取多個欄位的程序的簡單示例,在完全讀取所有字段之前,程序將以前讀取的字段放入緩衝區中。
快取通常用於磁碟 IO 請求,如果多個程序想要訪問乙個檔案,則快取該檔案以備下次訪問時使用,從而提供系統效能。
綜上所述,可以理解為快取系統管理,而緩衝區是由程序和系統共同管理的。
-
這種形式比以前使用fieldcache實現前向搜尋的版本更高效、更節省記憶體。 倒排索引將字段記憶體劃分為乙個術語列表,每個術語對應乙個文件列表,這種結構使查詢速度非常快,因為與術語對應的文件文件可用。 但是,當您將其用於統計、排序和突出顯示時,您需要通過文件號找到它,並且欄位的值變得不那麼有效。
以前,fieldcache 是用來在例項啟動時提前將倒排索引的值載入到記憶體中,但問題是如果文件太多,會造成大量的預載入時間,也會占用寶貴的記憶體資源。
索引後來引入了一種新機制,docvalues,它可以理解為正向索引,它是面向列儲存的。
-
詳細說明 Linux 中用於檢視記憶體的 free 命令。
free 命令用於檢視記憶體使用情況,比 top 命令便宜。
free –m
total used free shared buffers cached
mem: 1002 769 232 0 62 421
buffers/cache 286 715
swap 1153 0 1 153
注意:在理解 free 命令的輸出時,有必要區分兩個概念:第一行 (mem) 用於作業系統,緩衝區和快取用於作業系統的記憶體。
第二行 (- + buffers cache) 用於應用程式,對於應用程式,緩衝區和快取都屬於可用記憶體。
所以:第一行(mem):
總計:表示系統可以使用的物理記憶體總量為1002。
used表示分配的記憶體為769,包括已使用的286個緩衝區和快取記憶體,62個未使用的緩衝區記憶體和421個未使用的快取記憶體,即769=62+421+286
free:表示分配的物理記憶體為232;
buffers:系統已分配且未使用的緩衝區記憶體62;
cached:已分配但未使用的快取記憶體 421;
第二行 (- + buffers cache);
used:應用程式實際使用的緩衝區和快取記憶體為 286;
free:應用可以使用的記憶體為715,包括:已分配但未使用的緩衝記憶體62,已分配但未使用的快取記憶體421,尚未分配的記憶體232,即:
另乙個:Linux 中緩衝區和快取的區別:
buffer:要寫入硬碟的資料儲存器;
cache:讀入記憶體的資料的記憶體;
-
頁面快取和緩衝區快取一直是兩個容易混淆的概念,網上有很多人在爭論和猜測這兩種快取有什麼區別,最終還沒有乙個統一正確的結論。 如果我們能理解這兩個快取的本質,那麼在分析IO問題時,我們可能會更自如。
頁面快取實際上是乙個檔案系統快取,它是檔案的快取,檔案級別的資料被快取到頁面快取中。 檔案的邏輯層需要對映到實際的物理磁碟,此對映由檔案系統完成。 當頁面快取的資料需要重新整理時,頁面快取中的資料被移交給緩衝區快取,但這種處理在核心版本之後變得非常簡單,沒有真正的快取操作。
緩衝區快取是磁碟塊的快取,即在沒有檔案系統的情況下,直接在磁碟上操作的資料會快取在緩衝區快取中,例如檔案系統的元資料會快取在緩衝區快取中。
簡單來說,頁面快取用於快取檔案資料,緩衝區快取用於快取磁碟資料。 如果你有檔案系統,如果你對檔案進行操作,資料會快取到頁面快取中,如果你直接使用dd等工具讀寫磁碟,資料會快取到緩衝區快取中。
另外,在檔案系統層,會給每個裝置分配乙個def blk ops檔案操作方法,就是裝置的操作方法,每個裝置的inode下都會有乙個基數樹,快取資料的頁面會放在這個基數樹下。 頁數將顯示在頂部程式的緩衝區列中。 如果裝置做了乙個檔案系統,那麼就會生成乙個 inode,這個 inode 會分配 ext3 ops 等操作方法,這些方法就是檔案系統的方法,這個 inode 下面還有乙個基數樹,其中會快取檔案的頁面頁面,快取的頁數會統計在最上面程式的快取列中。
從上面的分析可以看出,核心中的緩衝區快取和頁面快取在處理上是一致的,但是在概念上存在差異,頁面快取是用於檔案快取的,緩衝區是用於磁碟塊資料快取的,僅此而已。
-
快取:快取是一種位於 CPU 和主記憶體之間的儲存。 因為CPU的速度遠高於主記憶體,CPU直接從記憶體中獲取資料等待一段時間,快取儲存了CPU剛剛使用或回收的部分資料,當CPU再次使用該部分資料時, 可以從快取中直接呼叫,從而減少CPU的等待時間,提高系統的效率。
快取分為一級快取(L1快取)和二級快取(L2快取),L1快取整合在CPU內部,L2快取早期一般是焊接在主機板上的,現在也整合在CPU內部,常用容量為256KB或512KB二級快取。
buffer:緩衝區,用於儲存在速度不同步或優先順序不同的裝置之間傳輸的資料的區域。 緩衝區允許程序減少彼此之間的等待時間,因此當從慢速裝置讀取資料時,快速裝置的操作不會中斷。
buffer 和 cache: in free(兩者都占用記憶體):
buffer:用作緩衝區快取的記憶體,是塊裝置的讀寫緩衝區。
cache:頁面快取的記憶體,檔案系統的快取
如果 cache 的值較大,則表示快取中儲存的檔案數較大。 如果可以快取經常訪問的檔案,則磁碟將具有非常小的讀取 IO BI。