UIO,大頁內存,CPU親和性,NUMA機制等

Linux環境下的UIO(Userspace I/O)


UIO 用戶空間下驅動程序的支持機制。DPDK使用UIO機制使網卡驅動程序運行在用戶態,並採用輪詢和零拷貝方式從網卡收取報文,提升收發報文的性能。node

Linux系統中通常的驅動設備都是運行在內核空間,而在用戶空間用應用程序調用便可,而UIO則是將驅動的不多一部分運行在內核空間,而在用戶空間實現驅動的絕大多數功能。使用UIO能夠避免設備的驅動程序須要隨着內核的更新而更新的問題linux

編譯UIO緩存

sudo /sbin/modprobe uio

CPU的物理核,邏輯核概念


一個物理封裝的CPU(經過physical id區分判斷)能夠有多個核(經過core id區分判斷)。而每一個核能夠有多個邏輯cpu(經過processor區分判斷)。一個核經過多個邏輯cpu實現這個核本身的超線程技術服務器

  • 能夠經過如下的命令來查看:
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
  • 查看CPU型號:
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

處理器核心數

processor cores,即俗稱的「CPU核心數」,也就是每一個物理CPU中core的個數
例如「Intel Core i3-2310M」是雙核處理器,它有2個「處理器核心數」。多線程

  • 能夠經過如下的命令來查看:
cat /proc/cpuinfo| grep "cpu cores"| uniq
  • 具備相同core id的CPU是同一個core的超線程

邏輯處理器數

邏輯處理器數英文名是logical processors,即俗稱的「邏輯CPU數」,性能

  • 邏輯核心處理器,就是虛擬物理核心處理器的一個超線程技術
  • 例如「Intel Core i3-2310M」支持超線程,一個物理核心能模擬爲兩個邏輯處理器,即一塊「Intel Core i3-2310M」有4個「邏輯處理器數」。
  • 能夠經過如下的命令來查看:
cat /proc/cpuinfo| grep "processor"| wc -l
  • SIBLING:SIBLING是內核認爲的單個物理處理器全部的超線程個數,也就是一個物理封裝中的邏輯核的個數。若是SIBLING等於實際物理核數的話,就說明沒有啓動超線程,反之啓用超線程。

超線程

採用超線程便是可在同一時間裏,應用程序可使用芯片的不一樣部分。雖然單線程芯片每秒鐘可以處理成千上萬條指令,可是在任一時刻只可以對一條指令進行操做。而超線程技術可使芯片同時進行多線程處理,使芯片性能獲得提高。ui

雖然採用超線程技術能同時執行兩個線程,但它並不象兩個真正的CPU那樣,每一個CPU都具備獨立的資源。當兩個線程都同時須要某一個資源時,其中一個要暫時中止,並讓出資源,直到這些資源閒置後才能繼續。所以超線程的性能並不等於兩顆CPU的性能。spa

若是有兩個邏輯CPU具備相同的」core id」,那麼超線程是打開的。操作系統

CPU親和性


CPU的親和性也就是cpu affinity機制,指的是進程要在指定的 CPU 上儘可能長時間地運行而不被遷移到其餘處理器, 經過處理器關聯能夠將虛擬處理器映射到一個物理處理器上 ,也就是說把一個程序綁定到一個物理CPU上。線程

並且在多核運行的機器上,每一個CPU自己本身會有緩存,緩存着進程使用的信息,而進程可能會被OS調度到其餘CPU上,如此,CPU cache命中率就低了。當一個進程或線程綁定CPU後,程序就會一直在指定的cpu跑,不會由操做系統調度到其餘CPU上,減小了cache miss,提升性能和效率。

NUMA機制


查看系統是否支持NUMA機制:

grep -i numa /var/log/dmesg

查看輸出結果:

  • 若是輸出結果爲:
    No NUMA configuration found
    說明numa爲disable
  • 若是不是上面的內容說明numa爲enable

查看系統NUMA詳細信息:

numactl --hardware

一個物理cpu對應一個node,系統還會爲每一個node分配必定的大小的內存。也就是說若是服務器只有一個物理cpu,那麼就只有一個node0,領取系統所有的內存和cpu。我的的PC好像也只有一個CPU,因此只有node0。可是在大型的服務器上會有多個node,這時每一個node都會被分配到必定的內存。

NUMA的基本原理

CPU訪問自身直接attach內存(就是系統給每一個node分配的內存)對應的物理地址時,纔會有較短的響應時間,俗稱Local Access,如圖標識的」fast」,若是須要訪問其餘cpu attach的內存的數據時,就須要經過inter-connect通道來訪問,相比以前的訪問速度要慢一些,俗稱Remote Access ,如圖標識的」slow」,那麼在dpdk的使用過程當中,配置NUMA模式和NoNUMA模式是加快訪問速度的方法而已。

相關文章
相關標籤/搜索