6.1 tlb
如前所說,tlb也是一種cache,用於存放頁表項的cache,方便快速完成邏輯位址到實體地址的轉換。
6.2 大頁
但是乙個常規頁4k,假設乙個程式用了512頁,總共2mb,這就需要tlb裡至少方下512個頁表項才能保證每次都能命中,但tlb大小有限。所以為了減少tlb不命中的情況,可以使用大頁,以1g為單位進行分頁。
7.1 提出ddio的背景/原因
①隨著大資料和雲計算的**式增長,寬頻的普及以及個人終端網路資料的日益提高,對電信服務節點和資料中心的資料交換能力&網路頻寬提出了更高的要求;
②資料中心本身對虛擬化功能的需求也增加了網路頻寬需求,需要對內部伺服器資源進行公升級。
7.2 ddio的目的
①讓伺服器能更快處理網路介面的資料;
②提高系統整體的吞吐率,降低延遲;
③減少能源的消耗。
7.3 ddio改進
沒有ddio的情況下,處理乙個報文,cpu和網絡卡需要多次訪問記憶體,而記憶體又很慢,造成cpu長時間等待記憶體。
ddio讓外部網絡卡和cpu通過llc cache交換資料,繞過記憶體。但是報文要存在llc cache中,增加了對llc cache的容量需求。(*llc = last level cache)
7.4網絡卡讀寫資料資料
傳送報文,網絡卡讀資料,從cpu到網絡卡經過:
cpu ——> cache ——>記憶體 ——> pci ——> nic
cpu把報文寫到記憶體的時候,會觸發一次cache不命中,先把記憶體放到cache中。當cpu寫完後,要通知網絡卡來讀記憶體,但是網絡卡讀的這個記憶體,剛剛在cache中被修改過,這個對記憶體的讀請求很有可能還要到cache中,讓cache把新資料寫到記憶體中,才能被網絡卡讀到。
當有了ddio之後,cpu要寫記憶體的時候,就已經把對應記憶體預取到cache中了,cpu可以直接操作cache。而且cache可以直接送到pci匯流排上,被網絡卡讀到。
接收報文,網絡卡寫資料:
nic ——> pci ——> 記憶體 ——> cache ——> cpu
nic要寫記憶體的時候,如果這段內存在cache中,需要等待回寫,也就是說當後面cpu要讀報文內容的時候,只能從記憶體裡讀,因為nic寫記憶體的時候勢必會把記憶體位址從cache中拿回到記憶體裡。
引入ddio之後,網絡卡可以直接把報文寫入cache,如果要寫入的記憶體不再cache中,會在寫入後把這段記憶體放到cache中。這樣,cpu取資料的時候,就可以直接從cache中拿到了。
8.1 smp和numa
smp的缺點是:①所有處理器連在一根匯流排上,負擔重,系統匯流排成為效率瓶頸;②處理器與記憶體之間通訊延遲大。
numa的優點:本地記憶體頻寬更大,延遲更小;
缺點是訪問遠端記憶體效率低下。
8.2 dpdk與numa
為了適應numa,dpdk**裡做了這些處理:
①pre-corememory。每個核都有屬於自己的記憶體,經常訪問的資料結構有自己的備份。這樣既滿足了本地記憶體的需要,又可以避免cache一致性問題。
②本地裝置本地處理。如果乙個pci裝置在node0上,那這個裝置就由node0處理。比如:
q = rte_zmalloc_socked\t(「fm10k」,sizeof(*q), rte_cache_line_size, socket_id);
本文介紹了大頁機制,ddio技術,和numa架構。
CPU快取相關知識 cache
主要分成這麼幾個部分 基礎知識 快取的命中 快取的一致性 相關的 示例和延伸閱讀。其中會講述一些多核 cpu 的系統架構以及其原理,包括對程式效能上的影響,以及在進行併發程式設計的時候需要注意到的一些問題。這篇文章我會盡量地寫簡單和通俗易懂一些,主要是講清楚相關的原理和問題,而對於一些細節和延伸閱讀...
S3C2440 Cache相關知識總結
現在我們就來解決這最後一次訪存的低效率問題。同樣基於程式訪存的時空區域性性原理,我們在主存和cpu暫存器之間引入乙個高速 容量相對較小的儲存器,把正在執行的指令或待讀取的資料附近的一整塊資料都快取進這個高速的儲存器中,供cpu在近段時間內使用,從而極大地提高了程式的執行速度。對於這個快取記憶體,我們...
學習record相關知識
概念 當使用元組進行程式設計的時候,如果過於龐大的元素數量,將會很難記住。record提出來,是用於提供c語言裡面的一種類似structure的乙個有著固定數目字段的資料結構。記錄定義 record person,構造乙個record p1 person.例項 author erlang.hell ...