Crossbow架構分析

Crossbow架構分析

一、crossbow簡介

crossbow是solaris網絡虛擬化的實現,提供了在單個物理網卡上實現多個虛擬網絡設備,實現協議棧隔離,虛擬交換與流量控制等功能。主要實現功能有:

1.    網卡虛擬化,可以在特定的網卡及系統資源上建立虛擬網卡,虛擬網卡主要包括以下資源:Rx/Tx rings,DMA通道,內核隊列及線程,CPU,帶寬。其虛擬網卡宣稱無性能損耗。

2.    QoS,DiffServ,DDoS及Observerbility,通過特定的硬件資源(Rx/Tx rings,DMA通道等)及隔離的協議棧實現網絡隔離,可以實現網絡帶寬的limits and guarantees。通過硬件及軟件的識別可以截斷及丟棄DDoS攻擊。提供實時的網絡流量監控,可以監控每應用/zone的網絡流量情況。

3.    Scaling the networking stackwith threads, Cores and NICs,通過將不同的物理CPU與特定的硬件資源(Rx/Txrings)綁定,多線程的並行處理技術,資源之間的隔離保證了不需要加鎖或者同步機制,實現了網絡整體吞吐率的線性擴容。通過禁止網卡中斷,引入polling model在單CPU系統上可以實現網絡吞吐率40%~50%的提升。

二、crossbow架構

crossbow利用物理網卡的VMDq及SR-IOV特性實現了虛擬的MAC層,保證虛擬網卡數據的隔離性。Crossbow中有以下幾個定義:

1.    virtualization lans,一個虛擬路徑包括以下資源:硬件資源如Rx/Tx rings,中斷,MAC address slots,驅動資源如DMA bindings,包括內核的數據結構,鎖,線程及綁定的CPU資源等。軟硬件資源是每lan唯一的,這樣避免了資源競爭。

Hardwarebased-lan與softwarebased-lan,基於硬件的lan物理網卡必須支持多接受隊列,發送隊列可以共用。接收數據的流量控制基於硬件接收隊列的隔離實現,內核確知發送數據的來源,基於軟件可以做到發送隊列的流量控制。基於軟件的lan通過軟件實現了傳輸隊列(transmitrings,也稱爲softrings),接收數據的分發基於軟件實現。

2.    Virtual NIC, crossbow允許在一個lan上創建一個虛擬網絡設備,該網絡設備對上層協議看來與物理網絡設備無區別。Crossbow提供了對VNIC與物理網卡一致的管理接口,crossbow將NIC,VNIC,鏈路聚合均視爲類似的數據鏈路。數據包的分發識別是基於VNIC的MAC地址實現,也可以基於VLAN標誌。當創建VNIC時同時指定VLAN標誌時,crossbow可以使用GVRP或者MVRP協議實現物理交換機(physical switch)自動的註冊VLAN標誌。

3.    Dynamic polling,虛擬lan可以在中斷及polling模式之間動態切換,當網絡負載較小時虛擬lan處於傳統的中斷模式,當網絡壓力較大時(as soon as backlog builds up),虛擬路徑動態的切換到poll模式。在此種模式下,針對與每一個lan,一個內核線程主動從網卡的接收隊列中以packet chain的方式將數據包抓取。因爲lan之間是隔離的,因此不需要同步操作。針對於每一個lan,都有三個線程在同時工作以處理數據接收,poll thread從網卡硬件中抓取數據包,worker thread負責將數據包發送到協議棧上層或者將數據包發送給虛擬機內的back-end driver。Worker thread也可以做一下傳輸工作,比如在TCP協議中產生併發送ACK報文。當有數據需要發送是Transmit thread就會被激活。若是基於軟件的虛擬網卡實現,每一個lan都會有對應的softring(包括軟件實現的數據包隊列及一個softring workerthread),softringworker thread會被激活,用於處理softring,此時poll thread將數據包放到數據包隊列中,softring worker thread處理協議棧上層。此外crossbow將各個不同的線程分派到不同的執行單元上執行,以便實現數據一致性,減少上下文切換時間,提高吞吐率。

4.    帶寬控制,crossbow允許管理員配置每一個VNIC的link speed,通過調節特定時段內的數據包抓取速率實現。當數據傳輸速率達到給定的值後,lan就放棄數據處理,直到下一個時間片到來。

5.    虛擬交換,當多個VNIC共享同一個物理網卡時,在MAC層提供了一種數據交換的通道,虛擬交換是不可視的,也不可直接操作的。虛擬交換可以在VNIC之間實現多播及廣播,虛擬交換可識別VLAN。在創建第一個VNIC是虛擬交換會被默認創建出來。只有定義在同一個物理網卡之上的VNIC是可以通過虛擬交換聯通的。在虛擬網卡驅動的數據收發函數中實現了虛擬交換的功能。(In practice, the virtual switch semantics are implemented by thetransmit and receive entry points of the VNIC driver)。在發送端,VNIC的驅動發送函數通過數據包的目的MAC地址來標識(classifaction)數據包,被標識的數據包將直接傳送到目標地址,目標地址可以是VNIC或者物理網卡,如果目標地址與鏈表中任一網卡MAC地址均不匹配,將默認傳輸至物理網卡。在接收端,數據被物理網卡或者軟件識別,當數據包被正確識別後,相應網卡的接收回調函數將被調用。虛擬交換可以建立在物理網卡之上,也可以建立在虛擬網卡上,當建立在虛擬網卡上時,底層的虛擬網卡被稱爲anchor VNIC。

虛擬交換

AnchorVNIC

三、容器網絡簡介

Linux容器的網絡配置有empty,physical,macvlan,vlan,veth五種模式,常用的是physical與veth模式。在physical模式下,直接將物理網卡給容器使用,在veth模式下,系統將默認創建兩個配對的虛擬網絡設備,一個在容器命名空間內部,一個在容器命名空間外部,命名空間內部的虛擬網絡設備無法與命名空間外部的網絡設備直接通信,只能與其對應的peer網絡設備通信。數據發送時,在容器內部的虛擬網絡設備會將數據指針直接轉發給對應的peer網絡設備,peer網絡設備接收到數據包後會往協議棧上層轉發,有虛擬網橋實現在peer虛擬網絡設備與真實網絡設備之間的數據轉發。

通過iperf測試工具測試,在容器內部直接使用物理網卡時,無性能損耗。基於VMDq的虛擬網卡配置給容器使用時,無法收發數據包。

基於普通的虛擬網絡設備與基於VMDq的網卡實現的虛擬網絡設備,在設備驅動層均沒有實現虛擬交換及流量控制功能。容器的網絡流量控制是基於cgroup的net_cls子系統實現。

容器的網絡環境需要解決高效的虛擬交換、基於VMDq的網絡設備隔離與網絡通信的聯通、底層高效的流量控制等功能。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章