UIO 用戶空間下驅動程序的支持機制。DPDK使用UIO機制使網卡驅動程序運行在用戶態,並採用輪詢和零拷貝方式從網卡收取報文,提升收發報文的性能。node
Linux系統中通常的驅動設備都是運行在內核空間,而在用戶空間用應用程序調用便可,而UIO則是將驅動的不多一部分運行在內核空間,而在用戶空間實現驅動的絕大多數功能。使用UIO能夠避免設備的驅動程序須要隨着內核的更新而更新的問題。linux
編譯UIO緩存
sudo /sbin/modprobe uio
一個物理封裝的CPU(經過physical id區分判斷)能夠有多個核(經過core id區分判斷)。而每一個核能夠有多個邏輯cpu(經過processor區分判斷)。一個核經過多個邏輯cpu實現這個核本身的超線程技術。服務器
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
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
邏輯處理器數英文名是logical processors,即俗稱的「邏輯CPU數」,性能
cat /proc/cpuinfo| grep "processor"| wc -l
採用超線程便是可在同一時間裏,應用程序可使用芯片的不一樣部分。雖然單線程芯片每秒鐘可以處理成千上萬條指令,可是在任一時刻只可以對一條指令進行操做。而超線程技術可使芯片同時進行多線程處理,使芯片性能獲得提高。ui
雖然採用超線程技術能同時執行兩個線程,但它並不象兩個真正的CPU那樣,每一個CPU都具備獨立的資源。當兩個線程都同時須要某一個資源時,其中一個要暫時中止,並讓出資源,直到這些資源閒置後才能繼續。所以超線程的性能並不等於兩顆CPU的性能。spa
若是有兩個邏輯CPU具備相同的」core id」,那麼超線程是打開的。操作系統
CPU的親和性也就是cpu affinity機制,指的是進程要在指定的 CPU 上儘可能長時間地運行而不被遷移到其餘處理器, 經過處理器關聯能夠將虛擬處理器映射到一個物理處理器上 ,也就是說把一個程序綁定到一個物理CPU上。線程
並且在多核運行的機器上,每一個CPU自己本身會有緩存,緩存着進程使用的信息,而進程可能會被OS調度到其餘CPU上,如此,CPU cache命中率就低了。當一個進程或線程綁定CPU後,程序就會一直在指定的cpu跑,不會由操做系統調度到其餘CPU上,減小了cache miss,提升性能和效率。
查看系統是否支持NUMA機制:
grep -i numa /var/log/dmesg
查看輸出結果:
查看系統NUMA詳細信息:
numactl --hardware
一個物理cpu對應一個node,系統還會爲每一個node分配必定的大小的內存。也就是說若是服務器只有一個物理cpu,那麼就只有一個node0,領取系統所有的內存和cpu。我的的PC好像也只有一個CPU,因此只有node0。可是在大型的服務器上會有多個node,這時每一個node都會被分配到必定的內存。
CPU訪問自身直接attach內存(就是系統給每一個node分配的內存)對應的物理地址時,纔會有較短的響應時間,俗稱Local Access,如圖標識的」fast」,若是須要訪問其餘cpu attach的內存的數據時,就須要經過inter-connect通道來訪問,相比以前的訪問速度要慢一些,俗稱Remote Access ,如圖標識的」slow」,那麼在dpdk的使用過程當中,配置NUMA模式和NoNUMA模式是加快訪問速度的方法而已。