天天看點

系統設計基礎知識(六)—緩存區

作者:喜歡編碼的社畜

緩沖區的主要目的是進行流量整形,将大量的小規模I/O組織成穩定的少量大規模I/O,進而減少響應次數。換句話說,緩沖區用于平衡系統兩端的處理速度。比如你不能用一點點資料寫入硬碟,而是積累一定量的資料,一起寫入一個塊。

cache和buffer的存儲結構不同。

系統設計基礎知識(六)—緩存區

緩沖區是一塊記憶體,用于存儲與外部存儲器交換的資料。CPU 不能直接與外部存儲器通信。對于外部存儲器,讀寫速度要慢得多。緩沖區用于存儲兩個不同速度或不同優先級的裝置之間的資料傳輸。是以,緩沖區可以減少程序間通信的等待時間。當存儲速度較快的裝置與存儲速度較慢的裝置通信時。為了從存儲速度較慢的裝置存儲資料,系統會先将資料存儲在緩沖區中,然後在存儲速度較快的裝置達到一定級别時再讀取緩沖區資料。同時,存儲速度更快的裝置可以完成其他任務。

例如,二進制地形 (BT) 格式用于存儲高程網格。BT下載下傳需要較長時間挂機,電腦可能24小時連續運作,但是BT下載下傳的資料是零散的,這也展現在硬碟寫入上,因為硬碟是機械尋址裝置。這種碎片化的寫入會導緻硬碟長期高負荷機械運動,導緻硬碟過早老化和損壞。是以,新釋出的BT軟體将緩沖區的概念應用于記憶體。資料暫時寫入緩沖區,最大到一定大小(512M),然後一次性寫入硬碟。這種方法大大減少了硬碟的高負荷機械運動。

例如,如果您線上觀看視訊,視訊播放器會在開始時将幾秒鐘的視訊資源預加載到緩沖區中。您消耗視訊的速率是視訊資源的正常播放。在這種情況下,視訊可以流暢播放。如果網速強,會下載下傳更多的視訊資源并積累,直到緩沖區滿,暫時停止加載,等待部分緩沖區清空,重新開始加載。即使視訊的下載下傳速度波動,您觀看的視訊在播放速率方面也是穩定的。

例如,當您有資源寫入硬碟時,硬碟的最小寫入大小通常是一個塊,通常為 4KB。是以,4KB的資料會先存入緩沖區,然後再寫入硬碟,而不是每次都準備一個位元組的資料。此時,磁盤以每次 4KB 的速率消耗資料。

在網絡連接配接過程中,由于網絡速度的原因,核心中維護的傳輸控制協定(TCP) 連接配接可能有大量資料寫入 TCP 緩沖區。這是因為socket對應的應用程式可能無法及時消費資料。

緩存是介于 CPU 和記憶體之間的一種存儲,通過考慮 CPU 和記憶體的讀寫速度,根據局部性原則配置設定資料來增加通路時間。例如,對于空間局部性,系統會将資料添加到記憶體塊旁邊的緩存中。對于時間局部性,将應用最不常用(LFU)來從緩存中删除資料。

系統設計基礎知識(六)—緩存區

讀緩沖區和寫緩沖區

系統設計基礎知識(六)—緩存區

讀緩沖區的資料并不總是有效的,而是實時生成的。每當緩沖區已滿或緩沖區被主動重新整理時,都會觸發讀取。對于小資料,這樣可以減少讀取次數。對于大資料,這個讀取的資料量是根據緩沖區大小進行歸一化的。這意味着必須首先讀取饋送到緩沖區的資料。這是一個明顯的順序通路功能。

寫緩沖區是對應的讀緩沖區。對于小資料寫入,需要填滿寫緩沖區。對于大資料,大資料會被劃分成緩沖區大小,分批寫入。對于特定裝置,一次寫入 4K 是最有效的。将小資料累積到緩沖區中的4K,一次寫入或将大資料分成4K為每個分片,多次寫入。

各種緩沖技術

單緩沖

系統設計基礎知識(六)—緩存區
  • 僅使用一個緩沖區
  • 生産者将一個資料塊生成到緩沖區中。消費者消耗緩沖區。一旦緩沖區再次為空,下一個資料塊将被移動到緩沖區。
  • 大多數時候,連接配接總是使用緩沖區。
  • 單個緩沖區的目标是提供絕對 I/O 一緻性,確定 I/O 性能,并盡可能減少記憶體使用量。

雙緩沖

系統設計基礎知識(六)—緩存區
  • 隻使用了兩個緩沖區
  • 生産者在緩沖區 1 中生成一個資料塊。而消費者同時使用緩沖區 2。是以,無需等待填充緩沖區。當緩沖區 1 滿時,将緩沖區 1 交換到緩沖區 2,消費者消費緩沖區 1 的資料。
  • 它也被稱為緩沖區交換
  • 由于生産者和消費者不在同一個緩沖區上操作,它可以盡可能地減少鎖定時間。在一小部分時間内,它們仍然可以在同一個緩沖區上操作
  • 然而,過程的複雜性增加了。如果程序執行 I/O 的快速突發,它可能是有缺陷的。

圓形緩沖器

系統設計基礎知識(六)—緩存區
  • 僅當使用超過 2 個緩沖區時。
  • 緩沖區的集合可以稱為循環緩沖區或環形緩沖區
  • 生産者隻能在緩沖區 (i) 中的資料等待消費時填滿緩沖區 (ni)
  • 根據維基百科的“循環緩沖區”,有緩沖區長度固定、先進先出、将元素移到緩沖區時其他元素的位置不變等3個特性。
  • 使用循環緩沖區而不是雙緩沖将提高資料傳輸率。它适用于執行快速 I/O 突發的程序。
系統設計基礎知識(六)—緩存區

如果你發現我的任何文章有幫助或有用,麻煩點贊或者轉發。 謝謝!

繼續閱讀