零拷貝 頁快取的學習感悟

2021-10-09 07:13:55 字數 1890 閱讀 9914

a服務呼叫b服務的乙個資料傳輸介面,a服務在機器1上,b服務在機器2上,這個場景非常普遍,想想怎麼實現的?a服務在記憶體中開闢乙個位元組陣列byte1存你要傳輸的資料,然後將位元組byte1作為引數呼叫b服務的介面,b服務需要乙個byte2作為形參接收你的資料,byte2需要在b服務中開闢記憶體空間。當介面沒有呼叫完成之前同乙份資料在兩個不同的程序之間共存了2份,這兩個程序分別在不同的機器上。

作業系統也是乙個程式,它也有自己管理的記憶體位址空間,使用者程序也是乙個程式;使用者程序和作業系統核心程序間的互動可以模擬成兩個程式的互動

當使用者程序需要寫資料的時候:使用者程序自己記憶體中肯定有乙個buffer,作業系統接收你的資料也需要在記憶體中開闢乙個buffer,不同機器上的介面呼叫需要網路傳輸資料,但這裡的情況是需要將使用者buffer拷貝到核心buffer中,只是使用者程序的buffer在使用者態,作業系統的buffer在核心態,且使用者程序自己的記憶體位址空間是作業系統分配的,它和作業系統自己的核心位址空間都在一塊物理記憶體上,且都由作業系統管理(注意:這和上面個的例子,內存在不同物理機器上的區別),資料寫到作業系統核心buffer後,一般程式設計師都不會再關心了,由作業系統負責將資料同步到磁碟。

當使用者程序需要讀資料的時候:結合上面的例子當使用者程序讀取資料的時候,也就是將才做系統核心buffer的資料拷貝到使用者buffer中

知道了使用者程序和作業系統核心程序之間的資料互動,還需要繼續挖掘核心程序怎麼運算元據的,怎麼將資料同步到磁碟,怎麼講資料從磁碟讀到記憶體。

核心程序怎麼讀取磁碟中的資料:大家對redis快取肯定不陌生,應用查詢資料的時候先從redis中查詢資料,查不到資料的時候我們再從資料庫查詢,通過快取加速查詢效率,快取中一般放熱點資料提高命中率。系統核心讀取磁碟資料也可以同樣模擬,記憶體訪問速度非常快,磁碟訪問速度超級慢,現在要讀取磁碟中的資料,系統核心將磁碟中的資料快取到到核心的page cache中,這個page cache 的空間相比磁碟的巨量儲存肯定不大,只存了經常訪問的熱點資料,且有淘汰機制,使用者程序讀檔案的時候先從核心page cache中讀取,讀不到再到真實的物理磁碟中讀取。

核心程序寫資料到磁碟:核心程序將page cache 中的資料寫磁碟,可以理解為快取重新整理。

看完我上面的白話描述是不是感覺更好理解一點

計算機中資料互動的幾個角色

使用者程序buffer

作業系統核心程序中的 pagecache

虛擬檔案系統的buffer cache

物理磁碟中的資料塊 block

網路傳輸中的socket buffer

網絡卡傳輸資料的 buffer

其它外部裝置和系統核心做資料互動都各自有自己的buffer

零拷貝我理解的是通過一種技術減少各個角色之間資料交換的拷貝,因為資料都在當前作業系統中,同乙份資料來回不同的拷貝非常耗費計算機cpu和記憶體資源

nmap我理解:虛擬記憶體對映是解決記憶體空間不足的問題,如果記憶體足夠大,可以經所有磁碟中的資料都快取到核心記憶體中,然後使用者程序直接操作核心記憶體,速度肯定是最快的。但是實際物理記憶體只有幾個到幾十個g,磁碟可以到幾十t或更大。磁碟空間再怎麼大,它的位址空間是可以表示的,比如磁碟空間的位址是 000 - 1000 記憶體大小10 ,也就是最多可以快取大小為10的磁碟資料到記憶體中,我們搞乙個虛擬對映,假設記憶體中的空間位址也是 000 - 1000 但是只有000- 010是真實的對映,其它的都是虛擬的,當我訪問位址002的時候,直接從真實的對映位址返回資料,當我訪問088位址的時候,通過nmap對映表發現當前位址是乙個虛擬對映,記憶體中不存在088位址對應的資料,作業系統將000 -010 中的乙個位址002和088關聯上,將磁碟中的資料讀取002中(缺頁中斷),這個時候使用者程序就讀取到資料了

以上全是自己的白話理解,如有錯誤歡迎指正!

CUDA學習之零拷貝記憶體

當使用零拷貝記憶體來共享主機和裝置間的資料時,必須同步主機和裝置間的記憶體訪問,同時更改主機和裝置的零拷貝記憶體中的資料將導致不可預知的後果。有兩種常見的異構計算系統架構 整合架構和離散架構。在整合架構中,cpu和gpu整合在乙個晶元上,並且在實體地址上共享主存。在這種架構中,由於無須在pcie匯流...

討論 零拷貝和環形佇列快取佇列問題

討論 零拷貝和環形佇列快取佇列問題 windows下如何實現零拷貝?是不是windows下不需要考慮防止記憶體拷貝的問題,net的socket自動給封裝好了socket buffer就是最優的呀?零拷貝技術研究與實現 windows下如何實現 零拷貝 解決高速網路中的抓包瓶頸問題 很幽默的講解六種s...

網絡卡的零拷貝理解

jack 最近聽說了網路處理的 零拷貝 技術,覺得非常神奇,在網上查閱了很多資料。不過,並不是太明白 知其然,而不知其所以然。你能通俗地解釋一下嗎?我 這是乙個相對比較複雜的話題,說起來話就多了。本質上來說,其實就是80386的分頁管理變異而已。jack 分頁管理?這個跨度有點大,穿越了。我 你覺得...