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


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


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

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

編譯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等於實際物理核數的話,就說明沒有啟動超線程,反之啟用超線程。

超線程

采用超線程即是可在同一時間里,應用程序可以使用芯片的不同部分。雖然單線程芯片每秒鍾能夠處理成千上萬條指令,但是在任一時刻只能夠對一條指令進行操作。而超線程技術可以使芯片同時進行多線程處理,使芯片性能得到提升。

雖然采用超線程技術能同時執行兩個線程,但它並不象兩個真正的CPU那樣,每個CPU都具有獨立的資源。當兩個線程都同時需要某一個資源時,其中一個要暫時停止,並讓出資源,直到這些資源閑置后才能繼續。因此超線程的性能並不等於兩顆CPU的性能。

如果有兩個邏輯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模式是加快訪問速度的方法而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM